Hi

(javascript) 캡슐화 본문

WEB(웹)

(javascript) 캡슐화

SharingWorld 2018. 6. 25. 17:17
캡슐화

캡슐화

관련된 여러가지 정보를 하나의 틀 안에 담는 것.


멤버 변수와 메서드 -> 관련된 정보가 되고 클래스가 관련된 정보들을 담는 하나의 큰 틀.
정보은닉 -> 정보의 공개 여부를 결정
var Person = function(arg) {
	
	var name = arg ? arg : "zzoon" ;

	this.getName = function() {
		return name;
	};
	this.setName = function(arg) {
		name = arg;
	};
};


var me = new Person();
console.log(me.getName()); // zzoon
me.setName("iamhjoo");
console.log(me.getName()); // iamhjoo
console.log(me.name); // (출력값) undefined

private 멤버로 name을 선언하고, public 메서드로 getName()과 setName()을 선언


this 객체의 프로퍼티로 선언하면 외부에서 new 키워드로 생성한 객체로 접근할 수 있다.
하지만 var로 선언된 멤버들은 외부에서는 접근이 불가능하다.

코드를 조금 더 깔끔하게
var Person = function(arg) {
	var name = arg ? arg : "zzoon";

	return  {
		getName : function() {
			return name;
		},
		setName : function(arg) {
			name = arg;
		}
	};

};

var me = Person(); /* or var me = New Person(); */
console.log(me.getName());

반환 받은 객체는 Person 함수 객체의 프로토타입에는 접근할 수 없다는 단점이 있다.


보완하려면 객체를 반환하는 것이 아닌, 함수를 반환하는 것이 좋다.
var Person = function(arg) {
	var name = arg ? arg : "zzoon";

	var Func = function() {};
	Func.prototype = {
		getName : function() {
			return name;
		}
		setName : function(arg) {
			name = arg;
		}
	};
	
	return Func;
}();

var me = new Person();
console.log(me.getName());

이것이 모듈 패턴 이다!


'WEB(웹)' 카테고리의 다른 글

(jquery) 기본선택자  (0) 2018.06.26
문서 객체 모델  (0) 2018.06.26
(javascript) 함수의 다양한 형태  (0) 2018.06.25
(javascript) 함수 객체 : 함수도 객체다  (0) 2018.06.22
(javascript) isNaN()  (0) 2018.06.22