생성자 함수 내부에서 private 멤버와 public 멤버의 구분과 활용

개요

생성자 함수는 객체를 생성할 때 사용되는 특별한 함수입니다. 생성자 함수는 객체의 초기 상태를 설정하고, 해당 객체에 대한 멤버 변수와 메서드를 정의하는 역할을 합니다. 이러한 멤버 변수와 메서드는 일반적으로 객체 외부에서 접근 가능한 public 멤버와 객체 내부에서만 접근 가능한 private 멤버로 구분됩니다. 이번 블로그 포스트에서는 생성자 함수 내부에서 private 멤버와 public 멤버를 어떻게 구분하고 활용할 수 있는지 알아보겠습니다.

Private 멤버와 Public 멤버의 구분

생성자 함수 내부에서 private 멤버와 public 멤버를 구분하는 방법은 변수와 메서드의 접근 제어자를 사용하는 것입니다. JavaScript에서는 기본적으로 모든 멤버가 public이기 때문에, private 멤버를 만들기 위해서는 일반적으로 클로저(closure)를 사용합니다.

  1. Private 멤버:
    • 생성자 함수 내부에서 var 키워드로 선언된 변수는 private 멤버입니다. 이 변수는 객체 외부에서 직접 접근할 수 없습니다.
    • 생성자 함수 내부에서 선언된 함수는 해당 함수 내에서만 호출할 수 있으며, private 멤버와 private 메서드로 취급됩니다.
  2. Public 멤버:
    • 생성자 함수 내부에서 this 키워드를 사용하여 선언된 변수와 메서드는 public 멤버입니다. 이 변수와 메서드는 객체 외부에서 접근할 수 있습니다.

Private 멤버와 Public 멤버의 활용

Private 멤버와 Public 멤버는 객체의 정보를 캡슐화하고, 객체의 상태를 보호하기 위해 사용될 수 있습니다. Private 멤버를 사용하여 객체의 내부 구현 상세를 숨길 수 있으며, Public 멤버를 통해 객체의 외부에서 접근 가능한 인터페이스를 제공할 수 있습니다.

아래는 생성자 함수 내부에서 Private 멤버와 Public 멤버를 구분하여 활용하는 예시 코드입니다.

function Person(name, age) {
    // Private 멤버
    var privateName = name;
    
    function privateMethod() {
        // privateName에 접근 가능
        console.log("Private 메서드 호출");
    }
    
    // Public 멤버
    this.publicAge = age;
    
    this.publicMethod = function () {
        // privateMethod에 접근 불가능
        console.log("Public 메서드 호출");
    }
    
    // Public 메서드에서 private 멤버에 접근 가능
    this.getPrivateName = function () {
        return privateName;
    }
}

var person = new Person("John", 30);
console.log(person.publicAge);   // Public 멤버에 접근
person.publicMethod();           // Public 메서드 호출
console.log(person.getPrivateName());   // Private 멤버에 간접적으로 접근

위의 예시 코드에서 privateName은 생성자 함수 내부에서만 접근 가능한 private 멤버입니다. privateMethod는 privateName에 접근할 수 있으며, publicAge와 publicMethod는 객체 외부에서 접근 가능한 public 멤버입니다. publicMethod에서 privateMethod에는 접근할 수 없습니다.

Private 멤버와 Public 멤버를 적절히 활용하면 객체의 구현 세부사항을 숨기고, 안전하게 객체를 사용할 수 있습니다. 이로써 다른 개발자들과의 협업이나 코드 유지 보수 작업에 효율적으로 참여할 수 있습니다.

#생성자함수 #private멤버 #public멤버