본문 바로가기

플밍 is 뭔들/JavaScript&jQuery

[JavaScript] 자바스크립트 객체지향 프로그래밍 - 캡슐화

※ 캡슐화란?
일반적으로 연관 있는 변수와 함수를 클래스로 묶는 작업. 얼핏보면 그냥 클래스를 만드는 작업 이라고 생각 할 수 있다. 
캡슐화에는 은닉성이란게 있어서 클래스에 담는 내용 중 외부에서 접근하지 말아야 하는 프로퍼티나 메서드는 외부에서 접근하지 못하게 만들 수 있다.

※ 접근 지정자
일반적으로 객체 내부에 들어있는 메서드와 프로퍼티는 객체 내부, 객체 외부, 자식 객체에서 접근이 가능하다.
하지만 일반 객체지향 프로그래밍에서는 캡슐화를 위해 접근 지정자라는 문법을 제공한다.

접근 지정자는 public, protected, private 가 있고 접근 범위는 public > protected > private 순이다.

public - 모든 영역에서 접근 가능
protected - 자신과 자식 객체에서만 접근 가능
private - 객체 내부 접근만 가능


※ UML로 접근 지정자 표현

public : + 로 표현 
protected : # 으로 표현
private : - 로 표현


※ 자바스크립트에서의 접근지정자
자바스크립트에서는 접근 지정자를 지원하지 않음. 하지만 다음과 같이 접근 지정자를 흉내 내서 사용한다.
function MyClass(){
    //public 
    this.프로퍼티이름 = 값;

    //private/protected 프로퍼티
    this._프로퍼티이름 = 값;
    
}

//public 메서드
MyClass.prototype.메서드이름 = function(){
    //기능구현
}

//private/protected 메서드
MyClass.prototype._메서드이름 = function(){
    //기능구현
}


위의 예시에서 보듯 protected/private 프로퍼티와 메서드는 앞에 "_"가 붙는다.
하지만 자바스크립트는 문법적으로 접근 지정자를 지원하지 않기 때문에 "_"를 붙여도 외부에서 접근이 가능하다.
단지 무언의 약속으로 "_"가 붙어있으면 protected/private 이니까 외부에서 접근하면 안되겠구나 라는 식으로 사용한다.