Javascript

Class 기본 개념

서앶인 2022. 11. 15. 14:40
Javascript의 Class를 알아보자.


Javascript에서 Class는 잘 안쓰이긴 하지만,

Typescript를 공부하다보니 자연스럽게 Javascript의 Class에 대해서 찾아보게 되었다.

 

 

 

 


 

 

 

 

 

Class란?
 
  • 객체(Object) 생성을 위한 템플릿.
  • 다양한 개별 인스턴스를 생성.
  • Typescript의 인터페이스나 타입 별칭(alias)과 다른 개념.

 

 

 

Constructor (생성자)
  • 인스턴스로 생성된 객체를 초기화 하기 위한 특수 함수.
  • new로 생성한 인스턴스에 파라미터로 넣어준 값들을 초기화 하며 저장.
class TempClass {
	constructor () {
            ...
        }
}
 
 
class TempClass {
	constructor (first, last) {
    		this.first = first
            	this.last = last
        }
}


const temp1 = new TempClass('seo', 'hyejin') // first: seo, last: hyejin
const temp2 = new TempClass('hong', 'gildong') // first: hong, last: gildong

 

 

 

 

Class Field(클래스 필드)
  • Constructor 메서드 안에서 정의하는 데이터가 아닌 클래스 내 필드 값.
  • 인스턴스를 선언하면서 넘겨주는 동적 데이터가 아닌 클래스에 기본적으로 내장되는 데이터.
  • 클래스 내.외부에서 자유롭게 사용 가능.
class TempClass {
	score = 0
	constructor(first, last) {
    		this.first = first
        	this.last = last
    	}
}

const temp1 = new TempClass('seo', 'hyejin')
// temp1 = { first: 'seo', last: 'hyejin', score: 0 }

 

 

  • Private Field (프라이빗 필드)
  • 클래스 외부에서 선언 불가한 필드.
  • # 기호 사용
class TempClass {
	#score = 0
	constructor(first, last) {
    		this.first = first
        	this.last = last
    	}
        
        getScore () {
        	return this.#score
        }
        #secret () {
        	console.log('프라이빗 필드 메서드')
        }
}

const temp1 = new TempClass('seo', 'hyejin')
temp1.#score // ERROR - 클래스 외부에서 선언 불가
temp1.#secret() // ERROR - 클래스 외부에서 선언 불가
temp1.getScore() // SUCCESS

 

 

 

Getters
  • get 키워드 사용.
  • 해당 프로퍼티가 있는 것처럼 호출.
class Person {
	constructor (age) {
    	this.age = age
    }
    
    get age () {
    	return this.age + '살'
    }
    
    getAge () {
    	return this.age + '살'
    }
}

const gildong = new Person(30);
gildong.age // 30살
gildong.getAge() // 30살
  • get age() getAge()는 같은 값을 리턴해 주지만 getters를 사용하면 구문이 더 간략하고 직관적.
  • getters는 object.age 처럼 key 값을 호출하는 것처럼 사용

 

 

 

Setters
  • set 키워드 사용.
class Person {
	constructor (age) {
    	this.age = age
    }
    
    get age () {
    	return this.age + '살'
    }
    
    set age (newAge) {
    	return this.age = newAge
    }
    
    getAge () {
    	return this.age + '살'
    }
    
    setAge (newAge) {
    	this.age = newAge
    }
}

const gildong = new Person(30);
gildong.age // 30살
gildong.age(25) // { age: 25 }
gildong.setAge(25) // { age: 25 }
  • getters와 마찬가지로 setters를 사용하면, setAge() 함수를 사용하는 것보다 더 직관적이고 편리함.

 

 

 

Static Fields / Methods (정적 필드/메서드)
  • static 키워드 사용.
  • new로 선언한 개별 인스턴스에는 없지만 클래스내에 선언되어 있음.