(1) 클로저의 개념 (정의)

1. 클로저에 대한 정의

2. 클로저와 클로저가 아닌 것의 예시

(2) 클로저의 활용

1. 클로저의 활용

<aside> 💡 정리

Closure(클로저)는 State(상태)가 의도치 않게 변경되지 않도록 안전하게 은닉(information hiding)하고 특정 함수에게만 상태 변경을 허용하여 상태를 안전하게 변경하고 유지하기 위해 사용한다.

</aside>

2. 캡슐화 (encapsulation)와 정보 은닉

  1. 캡슐화란 무엇일까?

    1. 프로퍼티와 메서드를 하나로 묶는 것을 말한다.

      • 프로퍼티 : 객체의 상태 (state)
      • 메서드 : 프로퍼티를 참조하고 조작할 수 있는 동작 (behavior)
    2. 객체의 특정 프로퍼티메서드를 감출 목적으로 사용한다. 가지고 있는 정보가 예민하고 민감해서 정보 은닉이 필요한 경우이다.

      • 객체의 상태 변경을 방지함으로써 정보 보호
      • 객체 간의 의존성(결합도 - coupling)을 낮춤.
    3. java 등 기타 객체지향 언어에서 사용하는 public, private, protected

      → 접근을 제한할 수 있는 기능이다.

    4. 자바스크립트는 제공하지 않는다.

      즉, 별도의 조치를 취하지 않으면 기본적으로 외부 공개가 된다는 의미이다.

    // 생성자 함수
    function Person(name, age) {
      this.name = name; //public
      let _age = age; //private
    
      // 인스턴스 메서드
      // 따라서, Person 객체가 생성될 때 마다 중복 생성됨
      // : 해결방법 -> prototype
      this.sayHi = function () {
        console.log(`Hi! My name is ${this.name}. I am ${_age}.`);
      };
    }
    
    const me = new Person("Choi", 33);
    me.sayHi(); // Hi!, My name is Choi. I am 33.
    console.log(me.name); // Choi
    console.log(me._age); // undefined
    
    const you = new Person("Lee", 30);
    you.sayHi(); // Hi! My name is Lee. I am 30.
    console.log(you.name); // Lee
    console.log(you.age); // undefined
    

3. 자주 발생하는 실수