본문 바로가기

Programming/Javascript

13. Javascript 객체지향 프로그래밍(4) - 캡슐화 구현 2

javascript logo image

 

앞선 아티클에서 작성한 예제 코드를 다시 한번 살펴보겠습니다. 이 코드는 사용하는 데 있어서 한 가지 문제점이 있다는 말씀을 드렸죠? 

 

var Rapper = function(arg) {
    var rapName = arg ? arg : "MC JOHN DOE";

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

var hype = Rapper();
// var hype = new Rapper(); 도 가능


console.log(hype.getName());
hype.setName("JAMBINO");
console.log(hype.getName());

 

여기서 반환받은 객체는 Rapper 객체의 프로토타입에 접근하기 어렵다는 제약 조건이 생기게 됩니다. 이를 보완하기 위해서, 객체가 아닌 '함수'를 반환하는 것이 더 활용에 용이한 방법입니다. 

 

var Rapper = function(arg) {
    var rapName = arg ? arg : "NEWBIE";

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

var hype = new Rapper();
console.log(hype.getName());

 

우선 위 예제에서도 rapName에 접근할 수 없도록 선언하였고, 클로저 Func가 참조하는 rapName 프로퍼티가 자유 변수가 됩니다. 여기서는 사용자가 직접 rapName에 접근할 수 없으며 Func의 프로토타입 메서드를 통해 접근하게 됩니다.