캡슐화란 이름 그대로 뭔가 보호한다는 의미다. 객체를 생성할 때, 외부에서 프로퍼티에 접근할 수 있도록 설정하면서 동시에 특정 프로퍼티에는 접근할 수 없도록 하고 싶다면 캡슐화를 이용하면 된다. 가령, 'car'라는 객체를 만들었다고 가정해보자.
let car = {
gear : '8단',
power : '320마력',
seat : 'black'
}
위의 코드에서는 외부에서 객체 내부의 값에 접근할 수 있다. 만일, car라는 객체에서 seat 프로퍼티는 외부에서 접근할 수 있지만, gear와 power는 숨기고 싶다면 어떻게 해야할까?
위의 상태에서는 car.gear = '9단'이라고 입력하는 순간 car객체의 gear값이 변경된다. 프로그램을 제작하다보면 변경이 불가능한 값에 대한 설정이 필요하다. 가령, 사용자들에게 메서드만 알려주고, 내부에는 고정된 값이 필요하다면 캡슐화가 필수다.
캡슐화에서는 아래 2가지 사항이 필요하다.
1] 내부에 지역변수를 선언한다.
2] 즉시 실행 함수 패턴을 사용한다.
즉시실행함수를 활용한 캡슐화를 진행해보자.
let car = (function(){
let _gear = '8단'; //지역변수 선언
return {
get_gear(){
console.log('call getter');
return _gear;
},
set_gear(value){
console.log('call setter');
_gear = value;
}
}
}())
console.log(car._gear);
//>> undefined ---> ①
car.set_gear('9단');
console.log(car.get_gear())
//>>call getter ---> ②
console.log(car._gear);
//>>undefined ---> ③
console.log(car.gear());
//>>9단 ---> ④
①의 경우 즉시실행함수에서는 car객체에서 곧바로 _gear, 지역변수에 접근할 수 없다. return값으로 지정해준 public영역의 메서드에만 외부에서 접근가능하다. ②의 경우, set_gear()메서드를 통해 '9단'이라는 값을 입력했다. set_gear메서드는 내부 지역변수 _gear의 값을 인자값, value로 변경한다.
③은 당연히 외부에서 접근불가능하다. ④의 경우, public(return내부)의 get_gear()메서드가 내부 _gear값을 반환하기 때문에 변경된 9단 값이 도출된다.
'코드 스터디' 카테고리의 다른 글
심층 자바스크립트(4) 객체 프로퍼티 읽기 (0) | 2019.06.10 |
---|---|
심층 자바스크립트(3) -클래스란?- (0) | 2019.06.09 |
심층 자바스크립트(1) -객체의 생성과 활용- (0) | 2019.06.07 |
웹디자인 기본(3) CSS 주의사항 (0) | 2019.06.06 |
웹디자인 기본(2) CSS레이아웃 공식 (0) | 2019.06.05 |
댓글