πŸ“† λ‚ μ§œ

2023/12/13(수)

πŸ“š 챕터

ν΄λž˜μŠ€λž€ 무엇인가


πŸ‘¨πŸ»β€πŸ’» ν•™μŠ΅ λ‚΄μš©

🎯 ν΄λž˜μŠ€λž€ 무엇인가

ν΄λž˜μŠ€λŠ” νŠΉμ •ν•œ 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ μΌμ’…μ˜ ν…œν”Œλ¦Ώκ³Ό 같은 κ°œλ…μœΌλ‘œ λ³Ό 수 μžˆλ‹€.
즉 , νŠΉμ •ν•œ ν˜•νƒœμ˜ 객체λ₯Ό 반볡적으둜 λ§Œλ“€κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 것이 λ°”λ‘œ ν΄λž˜μŠ€λ‹€.
클래슀λ₯Ό ν™œμš©ν•˜λ©΄ 객체λ₯Ό λ§Œλ“œλŠ” 데 ν•„μš”ν•œ λ°μ΄ν„°λ‚˜ 이λ₯Ό μ‘°μž‘ν•˜λŠ” μ½”λ“œλ₯Ό 좔상화해 객체 생성을 λ”μš± νŽΈλ¦¬ν•˜κ²Œ ν•  수 μžˆλ‹€.

예제 μ½”λ“œλ₯Ό λ³΄λ©΄μ„œ μ–΄λ–»κ²Œ 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ”μ§€ μ‚΄νŽ΄λ³΄μž

<script>
class Car {
 // constructorλŠ” μƒμ„±μžλ‹€.처음 생성할 λ•Œ μ–΄λ–€ 인수λ₯Ό 받을지 κ²°μ •ν•  수 μžˆλ‹€.
 // 객체λ₯Ό μ΄ˆκΈ°ν™” ν•˜λŠ” μš©λ„λ‘œλ„ μ‚¬μš©λœλ‹€.
 constructor(name){
 this.name = name
 }
 
 //λ©”μ„œλ“œ
 honk(){
 	console.log(`${this.name}이 경적을 μšΈλ¦½λ‹ˆλ‹€!`)
 }
 
 // 정적 λ©”μ„œλ“œ
 
 static hello(){
 	console.log('μ €λŠ” μžλ™μ°¨μž…λ‹ˆλ‹€')
 }
 
 //setter
 
 set age(value){
 	this.carAge = value
 }
 
 //getter
 get age(){
 	return this.carAge
 }
 
 //Car 클래슀λ₯Ό ν™œμš©ν•΄ car 객체λ₯Ό 생성함
 
 const myCar = new Car('μžλ™μ°¨')
}

//λ©”μ„œλ“œ 호좜
myCar.honk()

//정적 λ©”μ„œλ“œλŠ” ν΄λž˜μŠ€μ—μ„œ 직접 ν˜ΈμΆœν•¨
Car.hello()

//정적 λ©”μ„œλ“œλŠ” 클래슀둜 λ§Œλ“  κ°μ²΄μ—μ„œλŠ” 호좜 λΆˆκ°€λŠ₯
//Uncaught TypeError: myCar.hello is not a function
MyCar.hello()

//setterλ₯Ό λ§Œλ“€λ©΄ 값을 ν• λ‹Ήν•  수 μžˆλ‹€.
MyCar.age = 32

//getter둜 값을 κ°€μ Έμ˜¬ 수 μžˆλ‹€.
console.log(myCar.age , myCar.name)// 32 , μžλ™μ°¨
</script>

πŸ“Œ constructor

constructor = μƒμ„±μž
μ΄λ¦„μ—μ„œ μ•Œ 수 μžˆλŠ” κ²ƒμ²˜λŸΌ 객체λ₯Ό μƒμ„±ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” νˆ­μˆ˜ν•œ λ©”μ„œλ“œλ‹€.
단 ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•  수 있으며, μ—¬λŸ¬ 개λ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
κ·ΈλŸ¬λ‚˜ μƒμ„±μžμ—μ„œ 별닀λ₯΄κ²Œ μˆ˜ν–‰ν•  μž‘μ—…μ΄ μ—†λ‹€λ©΄ μƒλž΅λ„ ν•  수 μžˆλ‹€.

<script>
// X
class Car {
 constructor(name){
 this.name = name
 }
 
 constructor(name){
 	this.name = name
 } // SyntaxError : A class may only have one constructor
 
 // O
 class Car{
  	// constructorλŠ” 없어도 κ°€λŠ₯ν•˜λ‹€.
 }
 </script>

πŸ“Œ ν”„λ‘œνΌν‹°(property)

ν”„λ‘œνΌν‹°λž€ 클래슀둜 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ λ‚΄λΆ€μ—μ„œ μ •μ˜ν•  수 μžˆλŠ” 속성값을 μ˜λ―Έν•œλ‹€.

<script>
class Car {
 constructor(name){
 this.name = name
 }

const myCar = new Car('μžλ™μ°¨')//ν”„λ‘œνΌν‹° 값을 λ„˜κ²¨μ£Όμ—ˆλ‹€.
 </script>

μΈμŠ€ν„΄μŠ€ 생성 μ‹œ constructor λ‚΄λΆ€μ—λŠ” 빈 객체가 할당돼 μžˆλŠ”λ° λ°”λ‘œ 이 빈 객체에 ν”„λ‘œνΌν‹°μ˜ 킀와 값을 λ„£μ–΄μ„œ ν™œμš©ν•  수 있게 도와쀀닀.

πŸ“Œ getter 와 setter

getter : ν΄λž˜μŠ€μ—μ„œ 무언가 값을 κ°€μ Έμ˜¬ λ•Œ μ‚¬μš©λœλ‹€.
getter을 μ‚¬μš©ν•˜λ €λ©΄ μ•žμ— getμ΄λΌλŠ” ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬μ•Όν•˜κ³ ,λ’€μ΄μ–΄μ„œ getter의 이름을 μ„ μ–Έν•΄μ•Όν•œλ‹€.

<script>
 //getter
 get age(){
 	return this.carAge
 }
</script>

setter : 클래슀 ν•„λ“œμ— 값을 ν• λ‹Ήν•  λ•Œ μ‚¬μš©ν•œλ‹€.
μ‚¬μš©λ°©λ²•μ€ getκ³Ό λ™μΌν•˜λ‹€.

πŸ“Œ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ

클래슀 λ‚΄λΆ€μ—μ„œ μ„ μ–Έν•œ λ©”μ„œλ“œλ₯Ό μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλΌκ³  ν•œλ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ prototype에 μ„ μ–Έλ˜λ―€λ‘œ ν”„λ‘œν† νƒ€μž… λ©”μ„œλ“œλΌκ³  λΆˆλ¦¬κΈ°λ„ ν•œλ‹€.
객체지ν–₯μ–Έμ–΄μ—μ„œ ν”νžˆ μ‚¬μš©λ˜λŠ” 클래슀(Class)κ°€ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” ν”„λ‘œν† νƒ€μž…(prototype)이며 μƒμ„±μž ν•¨μˆ˜κ°€ μ‚¬μš©λœλ‹€. λ‹€μ‹œ 말해 ν΄λž˜μŠ€λ‚˜ ν”„λ‘œν† νƒ€μž…μ„ μ‚¬μš©ν•˜μ—¬ λ§Œλ“€μ–΄ λ‚Έ 것이 결과물이 μΈμŠ€ν„΄μŠ€λΌκ³  ν•  수 μžˆλ‹€.
μ΄λ ‡κ²Œ μƒμ„±λœ μΈμŠ€ν„΄μŠ€λŠ” μ›λž˜μ˜ 객체인 ν΄λž˜μŠ€λ‚˜ ν”„λ‘œν† νƒ€μž…μ΄ κ°€μ§€κ³  μžˆλŠ” ν”„λ‘œνΌν‹°(property)와 λ©”μ†Œλ“œ(method)λ₯Ό λͺ¨λ‘ 상속(inheritance)λ°›λŠ”λ‹€.

πŸ“Œ 정적 λ©”μ„œλ“œ

μ •μ λ©”μ„œλ“œλŠ” νŠΉμ΄ν•˜κ²Œ 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ μ•„λ‹Œ μ΄λ¦„μœΌλ‘œ ν˜ΈμΆœν•  수 μžˆλŠ” λ©”μ„œλ“œλ‹€.

<script>
class Car {
	static hello(){
    console.log('λ°˜κ°‘μŠ΅λ‹ˆλ‹€~')
    }
}

const myCar = new Car()

myCar.hello()// TypeError: myCar.hello is not a function
Car.hello()//λ°˜κ°‘μŠ΅λ‹ˆλ‹€~
</script>

정적 λ©”μ„œλ“œ λ‚΄λΆ€μ˜ thisλŠ” 클래슀둜 μƒμ„±λœ μΈμŠ€ν„΄μŠ€κ°€ μ•„λ‹ˆλ‹€.
클래슀 μžμ‹ μ„ 가리킀기 λ•Œλ¬Έμ— λ‹€λ₯Έ λ©”μ„œλ“œμ—μ„œ
일반적으둜 μ‚¬μš©ν•˜λŠ” thisλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.
ν•˜μ§€λ§Œ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ 정적 λ©”μ„œλ“œλŠ” μ‚¬μš©ν•  수 있고,
μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ μ ‘κ·Ό κ°€λŠ₯ν•΄μ„œ 객체λ₯Ό 생성 μ•ˆν•΄λ„ μ—¬λŸ¬ κ³³μ—μ„œ
μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” μž₯점이 μžˆλ‹€.
μ΄λŸ¬ν•œ μž₯점을 μ΄μš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ „μ—­μ—μ„œ μ‚¬μš©ν•˜λŠ” μœ ν‹Έ ν•¨μˆ˜λ₯Ό
정적 λ©”μ„œλ“œλ‘œ 많이 ν™œμš©ν•˜λŠ” νŽΈμ΄λ‹€.

πŸ“Œ 상속

λ¦¬μ•‘νŠΈμ—μ„œ ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€κΈ° μœ„ν•΄μ„œ extends React.Componet λ˜λŠ”
extends React.pureComponentλ₯Ό μ„ μ–Έν•œ 것을 λ³Έ 적이 μžˆμ„κ²ƒμ΄λ‹€.
이 extendsλŠ” κΈ°μ‘΄ 클래슀λ₯Ό μƒμ†λ°›μ•„μ„œ μžμ‹ ν΄λž˜μŠ€μ—μ„œ 이 상속받은
클래슀λ₯Ό 기반으둜 ν™•μž₯ν•˜λŠ” κ°œλ…μ΄λΌ λ³Ό 수 μžˆλ‹€.
이 extendsλ₯Ό ν™œμš©ν•œλ‹€λ©΄ κΈ°λ³Έ 클래슀λ₯Ό 기반으둜 λ‹€μ–‘ν•˜κ²Œ 사물이 μ–΄λ–€ μ£Όμ²΄λ‘œλΆ€ν„° 갈렀 λ‚˜μ™€ μƒκΈ°λŠ” 클래슀λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

➑️ λ‹€μŒ κΈ€ μ—μ„œλŠ” ν΄λž˜μŠ€μ™€ ν•¨μˆ˜μ˜ 관계에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄μž.

profile
β˜„οΈ

0개의 λŒ“κΈ€