생성자 함수를 통한 정보 은닉과 자바스크립트 캡슐화의 차이점

자바스크립트에서는 정보 은닉과 캡슐화를 이용하여 객체 지향 프로그래밍의 기본 개념을 구현할 수 있습니다. 이 두 가지 개념은 객체의 데이터와 메서드를 보호하여 내부 구현을 감추는 데 사용됩니다. 하지만, 생성자 함수를 통한 정보 은닉과 자바스크립트의 캡슐화는 목표와 구현 방식에서 차이가 있습니다.

정보 은닉 (Information Hiding)

정보 은닉은 객체의 내부 상태를 외부에서 직접 접근하지 못하도록 하는 것을 말합니다. 이로써 객체의 데이터를 보호하고, 객체의 내부 구현을 감춰서 안정성과 보안성을 높일 수 있습니다. 자바스크립트에서 생성자 함수를 사용하여 객체를 생성하는 방법으로 정보 은닉을 구현할 수 있습니다.

function Person(name, age) {
  var _name = name;
  var _age = age;

  this.getName = function() {
    return _name;
  };

  this.getAge = function() {
    return _age;
  };
}

var person = new Person("John Doe", 25);
console.log(person.getName());  // 출력: John Doe
console.log(person.getAge());   // 출력: 25
console.log(person._name);      // 출력: undefined
console.log(person._age);       // 출력: undefined

위 예제에서 Person 생성자 함수 내부에는 nameage를 저장하는 private 변수인 _name_age가 있습니다. getNamegetAge 메서드를 통해 _name_age에 접근할 수 있지만, 직접적으로 _name이나 _age에 접근하는 것은 불가능합니다. 이렇게 하면 _name_age의 값이 은닉되어 외부에서 변경되거나 접근되지 않습니다.

자바스크립트 캡슐화 (JavaScript Encapsulation)

자바스크립트에서 캡슐화는 객체의 데이터와 메서드를 하나로 묶어 외부로부터의 접근을 제한하는 것을 말합니다. 정보 은닉과 유사하지만, 캡슐화는 getter와 setter 메서드를 통해 객체의 데이터를 조작하고 접근할 수 있게 합니다.

function Person(name, age) {
  var _name = name;
  var _age = age;

  this.getName = function() {
    return _name;
  };

  this.setName = function(name) {
    _name = name;
  };

  this.getAge = function() {
    return _age;
  };

  this.setAge = function(age) {
    _age = age;
  };
}

var person = new Person("John Doe", 25);
console.log(person.getName());  // 출력: John Doe
person.setName("Jane Doe");
console.log(person.getName());  // 출력: Jane Doe
console.log(person.getAge());   // 출력: 25
person.setAge(30);
console.log(person.getAge());   // 출력: 30

위 예제에서는 setNamesetAge 메서드를 추가하여 _name_age의 값을 변경할 수 있게 하였습니다. 이렇게 함으로써, private 변수인 _name_age의 값을 캡슐화하여 외부에서의 직접 접근을 막으면서도 정해진 방법으로 데이터 조작을 허용할 수 있습니다.

결론

정보 은닉은 객체의 내부 상태를 외부에서 직접 접근하지 못하도록 막는 것이고, 자바스크립트 캡슐화는 객체의 데이터와 메서드를 하나로 묶어외부로부터의 접근을 제한하는 것입니다. 이 두 가지 개념은 객체의 안정성과 보안성을 높이는 데 도움을 주며, 자바스크립트에서는 생성자 함수를 통해 정보 은닉을 구현하고 getter와 setter 메서드를 통해 캡슐화를 구현할 수 있습니다.

#JavaScript #Encapsulation