[javascript] 프로토타입 체인에서 은닉 속성과 메소드 활용
자바스크립트에서 객체지향 프로그래밍을 할 때, 프로토타입을 활용하여 상속과 다형성을 구현할 수 있습니다. 하지만 때로는 특정 메소드나 속성을 외부에서 직접 접근하지 못하도록 은닉해야 하는 경우가 있습니다. 이를 위해 프로토타입 체인을 활용하여 은닉된 속성과 메소드를 구현할 수 있습니다.
은닉 속성 구현
function Person(name) {
this._name = name; // 언더스코어(_)를 통해 은닉 속성을 표현
}
Person.prototype.getName = function() {
return this._name;
};
let person1 = new Person('John');
console.log(person1._name); // 접근 가능
console.log(person1.getName()); // 접근 가능
위 예제에서 Person
생성자 함수 내부에서 _name
속성을 만들었습니다. 이 속성은 언제나 언더스코어로 시작하는 변수명으로 표기하여 해당 변수가 은닉 속성임을 명시적으로 보여줍니다.
그 후, getName
메소드를 prototype
을 통해 추가하여 외부에서 _name
에 접근하는 것을 막고, 메소드를 통해 간접적으로 접근할 수 있도록 했습니다.
은닉 메소드 구현
function Calculator() {
this._add = function(a, b) {
return a + b;
};
}
Calculator.prototype.add = function(a, b) {
return this._add(a, b);
};
let calc = new Calculator();
console.log(calc._add(5, 3)); // 접근 불가
console.log(calc.add(5, 3)); // 접근 가능
위 예제에서 Calculator
생성자 함수 내부에서 _add
메소드를 만들었습니다. add
메소드는 외부에서 직접 호출될 수 있지만, 실제 덧셈 연산을 하는 _add
메소드는 은닉되어 외부에서 접근할 수 없습니다.
은닉 속성과 메소드를 활용하면 객체의 상태를 보호하고, 외부에서의 변조나 오용을 막을 수 있습니다. 이를 통해 안정적이고 유지보수가 용이한 코드를 작성할 수 있습니다.
결론
프로토타입 체인을 이용하여 객체지향 프로그래밍을 구현할 때, 은닉 속성과 메소드를 활용하여 객체의 정보 은닉과 보호를 할 수 있습니다. 이는 안전하고 견고한 코드를 작성할 수 있게 도와줍니다.