생성자 함수를 통한 정보 은닉과 자바스크립트 캡슐화의 사용 사례

자바스크립트는 동적이고 유연한 언어로써, 객체지향 프로그래밍에서 정보 은닉과 캡슐화를 구현하는데 매우 유용합니다. 생성자 함수를 사용하면 객체를 생성하고 프라이빗 멤버 변수를 사용하여 정보를 은닉할 수 있습니다. 이를 통해 외부에서 직접 접근할 수 없는 프라이빗 멤버 변수를 가지는 객체를 생성할 수 있습니다.

정보 은닉 (Information Hiding)

정보 은닉은 객체의 데이터를 외부에서 직접 접근하지 못하도록 제한하는 것을 말합니다. 이는 객체의 데이터의 무결성을 보장하고 객체의 내부 상태를 캡슐화하여 외부에서 접근하지 못하도록 합니다.

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

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

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

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

const person = new Person("John", 25);
console.log(person.getName()); // "John"
console.log(person.getAge()); // 25

person._name = "Jane"; // 외부에서 직접 접근 불가능
person.setAge(30);
console.log(person.getAge()); // 30

위의 예제에서 _name_age 변수는 프라이빗 멤버 변수입니다. 외부에서 직접 접근할 수 없으며, getName()getAge() 메서드를 통해 값을 가져올 수 있습니다. setAge() 메서드를 통해 age 값을 변경할 수 있습니다.

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

자바스크립트 캡슐화는 정보 은닉을 통해 객체의 내부 상태를 보호하는 것을 말합니다. 이는 객체의 메서드를 사용하여 프라이빗 멤버 변수를 조작하도록 제한함으로써 외부에서 객체의 상태를 변경하는 것을 방지합니다.

function Counter() {
  let _count = 0;

  function increment() {
    _count++;
  }

  function decrement() {
    _count--;
  }

  this.getCount = function() {
    return _count;
  };

  this.incrementCounter = function() {
    increment();
  };

  this.decrementCounter = function() {
    decrement();
  };
}

const counter = new Counter();
console.log(counter.getCount()); // 0

counter.incrementCounter();
counter.incrementCounter();
console.log(counter.getCount()); // 2

counter.decrementCounter();
console.log(counter.getCount()); // 1

위의 예제에서 _count 변수는 프라이빗 멤버 변수입니다. 외부에서 직접 접근할 수 없으며, getCount() 메서드를 통해 값을 가져올 수 있습니다. incrementCounter()decrementCounter() 메서드를 통해 count 값을 증가 및 감소할 수 있습니다.

결론

정보 은닉과 자바스크립트 캡슐화를 통해 객체의 데이터를 보호하고 외부에서의 접근을 제한할 수 있습니다. 생성자 함수를 사용하여 프라이빗 멤버 변수를 가진 객체를 생성하고, 해당 객체의 메서드를 통해 프라이빗 멤버 변수를 조작하는 방식으로 캡슐화를 구현할 수 있습니다. 이를 통해 안정성과 유지보수성을 향상시킬 수 있습니다.

#JavaScript #캡슐화