[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 메소드는 은닉되어 외부에서 접근할 수 없습니다.

은닉 속성과 메소드를 활용하면 객체의 상태를 보호하고, 외부에서의 변조나 오용을 막을 수 있습니다. 이를 통해 안정적이고 유지보수가 용이한 코드를 작성할 수 있습니다.

결론

프로토타입 체인을 이용하여 객체지향 프로그래밍을 구현할 때, 은닉 속성과 메소드를 활용하여 객체의 정보 은닉과 보호를 할 수 있습니다. 이는 안전하고 견고한 코드를 작성할 수 있게 도와줍니다.