* 필드(field)
> 보통 자바스크립트에서는 constructor에서 주어지는 데이터라면 생략 가능
> 인스턴스를 만들때 초기화가 되어야하는 데이터라면 constructor 윗 부분에 작성해서 초기값(default) 설정 가능
: ex) type = '과일';
* 접근제어자 ( # )
> 객체를 만들었을때 class외부에서 변경이 불가능하게 만들고 싶을때 사용한다.
: ex) apple.name = '오렌지' // 외부에서 apple이라는 객체의 name값으로 오렌지를 추가하려고 시도중
> 접근제어자를 이용해서 캡슐화를 할 수있다.
> 내부상으로 필요한데이터를 보이지 않도록 수정할 수 없도록 캡슐화해놓는다.
> 다른 프로그램언어에서는 private(#), public(기본), protected등을 이용해 접근제어를 컨트롤 한다.
> 자바스크립트에서는 private(#을 이용한다.), public(기본적으로 모두에게 공개)으로 사용가능하다.
> #을 붙여주면 class내부에서는 사용가능하고 class외부에서는 사용이 불가능하다.
> 만든 인스턴스를 출력할때도 field들의 정보는 console창에 출력되지 않는다.
> class내부에서만 호출이 되고 class외부에서는 호출이 되지 않는다.
=> 내가 지정해놓은 프로퍼티의 값을 변경시키고 싶지 않을때 접근제어자(#)을 이용해 외부에서 수정이 불가능하도록 제어하고 접근제어가 된 프로퍼티값을 참조한 메서드를 만들수 있다.
=> constructor()의 상단에 #변수명을 작성해주고 constructor함수 내부에 아래의 예시와 같이 작성해준다.
: ex) 상단 : #value 함수 내부 : this.#value = value;
// 접근제어자 - 캡슐화
// private(#), public(기본), protected
class Fruit {
#name;
#emoji;
#type = "사과";
constructor(name, emoji) {
this.#name = name;
this.#emoji = emoji;
}
display = () => {
console.log(`${this.#name}: ${this.#emoji}`);
};
}
const apple = new Fruit('apple', '🍎');
//apple.#name = '오렌지'; // #field는 외부에서 접근 및 수정이 불가능함
console.log(apple);
'Study > JavaScript' 카테고리의 다른 글
[JavaScript_study] 상속 (extends) (0) | 2022.04.11 |
---|---|
[JavaScript_study] setter, getter (0) | 2022.04.11 |
[JavaScript_study] static, 인스턴스(instance)레벨, 클래스(Class)레벨 (0) | 2022.04.11 |
[JavaScript_study] 클래스(class) (0) | 2022.04.11 |
[JavaScript_study] 객체란? (0) | 2022.04.11 |