노출모듈 패턴
즉시 실행 함수를 통해 private,public 같은 접근 제어자를 만드는 패턴
자바 스크립트는 private이나 public 같은 접근 제어자가 없고 전역 범위에서 스크립트가 실행됨
그리하여 노출모듈 패턴을 통해 private과 public 접근 제어자를 구현하기도 함
const pukuba = (() => {
const a = 1
const b = () => 2
const public = {
c : 2,
d : () => 3
}
return public
})()
console.log(pukuba)
console.log(pukuba.a)
// { c: 2, d: [Function: d] }
// undefined
내부 구현은 감추고 필요한 것만 공개할때 쓰임
a,b 는 감추고
public에 있는 c,d만 공개됨
public
클래스에 정의된 함수에서 접근 가능하며 자식 클래스와 외부 클래스에서 접근 가능한 범위
protected
클래스에 정의된 함수에서 접근 가능, 자식 클래스에서 접근 가능하지만 외부 클래스에서 접근 불가능한 범위
private
클래스에 정의된 함수에서 접근 가능하지만 자식 클래스와 외부 클래스에서 접근 불가능 한 범위
즉시 실행 함수(IIFE Immediately Invoked Function Expression)
함수를 정의하자마자 바로 호출하는 함수. 초기화 코드, 라이브러리 내 전역 변수의 충돌 방지 등에 사용한다
모듈 패턴 등에 쓰임
클로저 (Closure)
함수가 자신이 선언될 당시의 스코프(환경)을 기억하는 현상
함수가 return 된 이후에도 바깥 변수에 접근할 수 있게 만들어줌
상태 저장, 이벤트 핸들러, 은닉된 데이터 유지, 콜백함수에서 외부값 기억, 이벤트 핸들러 안에서 변수를 유지 등에 쓰임
function outer() {
let count = 0;
return function inner() {
count++;
return count;
}
}
const counter = outer();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
outer() 가 실행되면서 count라는 변수를 기억하고, 내부함수 inner()는 count를 계속 접근할 수 있음
여기서 중요한 건 count는 outer()가 끝났어도 메모리는 살아있음
→왜? 내부 함수 inner()가 계속 그 count를 기억하고 있기 때문
파이썬 에서 노출 모듈 패턴
class Counter:
def __init__(self):
self._count = 0 # 외부에서 직접 접근하지 말라는 뜻 (_접두어)
def increase(self):
self._count += 1
def get_count(self):
return self._count
자바에서 노출 모듈 패턴
public class Counter {
private int count = 0; // 👈 비공개 (외부에서 직접 접근 불가)
public void increase() {
count++;
}
public int getCount() {
return count;
}
}
Counter c = new Counter();
c.increase();
System.out.println(c.getCount()); // 👉 1
개념 JavaScript Python Java
| 내부 은닉 | 클로저, IIFE | _ 접두어 | private 키워드 |
| 외부 공개 | return { ... } | 메서드만 사용 | public 메서드 |
| 강제 여부 | ❌ 약함 (은닉 권장) | ❌ 약함 (관례) | ✅ 강함 (컴파일 오류 발생) |
파이썬에서 _를 두개 쓰면 어느정도 강제성이 생기고 데코레이터를 통해 은닉 할 수 있음.
'Computer Science' 카테고리의 다른 글
| 디자인 패턴 - MVP 패턴 (0) | 2025.04.24 |
|---|---|
| 디자인 패턴 - MVC 패턴 (0) | 2025.04.24 |
| 디자인 패턴 - 이터레이터 패턴 (0) | 2025.04.23 |
| 디자인 패턴 - 프록시 패턴 (0) | 2025.04.22 |
| 디자인 패턴 - 옵저버 패턴 (0) | 2025.04.22 |