티스토리 뷰

반응형

객체의 캡슐화

TV라는 객체를 생각해봅시다. 사용자는 전원을 키고, 채널과 음량을 조절 할 줄 안다면 TV를 문제 없이 사용할 수 있습니다. TV의 내부적인 모습이나 원리는 알 필요가 없습니다. 하지만 사용자가 TV 객체에 대한 충분한 이해 없이 중요한 부품들을 건들이게 된다면, TV는 개발자가 의도한 대로 혹은 사용자가 예상한대로 작동하지 않을 확률이 매우 높습니다. 이러한 이유로 사용자가 객체에 접근할 수 있는 영역을 제한하는 것을 객체의 캡슐화(encapsulation)라고 합니다. 

캡슐화의 장점

  1. 사용자가 불필요한 부분을 접근하지 못하게 하여, 객체의 오용을 방지 할 수 있습니다. (항상 개발자와 사용자가 다를 수 있음을 기억해야 합니다.)
  2. 객체의 내부가 바뀌어도 그 객체의 사용방법이 바뀌지 않습니다. (사용자는 객체 내부가 바뀌어도 같은 결과를 기대 할 수 있습니다.)
  3. 객체 내부에서 사용되는 데이터가 바뀌어도 다른 객체에게 영향을 주지 않습니다. (각 객체들의 독립성이 유지됩니다.)
  4. 객체간의 결합도가 낮아지게 됩니다. (객체간의 결합도를 낮추는 일은 객체 설계의 기본 원칙입니다.)
  5. 큰 시스템 일지라도 컴포넌트 별로 작게 분리하여 개발이 가능하게 됩니다. 이로 인하여 시스템 개발 속도를 높이고 성능을 최적화 하기가 쉽습니다.

접근제어자(access modifier)

클래스를 만드는 개발자는 클래스 멤버(필드와, 메소드)에게 접근제어자를 사용하여서 객체를 캡슐화 할 수 있습니다. Java에서 접근제어자는 4가지가 존재합니다. 


  • private : 같은 클래스 내부에서만 접근 가능
  • default : (같은 클래스) + 같은 패키지 클래스에서만 접근 가능
  • protected : (같은 클래스) + (같은 패키지) + 자신을 상속받은 자손 클래스에서만 접근 가능
  • public : 자유롭게 접근 가능 
public class AccessModifier {
    private int a = 10;
    int b = 20; //default는 키워드를 적지 않습니다.
    protected int c = 30;
    public int d = 40;
}

class AmTester {
    public static void main(String[] args) {
        AccessModifier am = new AccessModifier();
        //int a = am.a; //다른 클래스 에서는 접근 불가!
        int b = am.b;
        int c = am.c;
        int d = am.d; 
    }
}

Tip) 어떤 접근제어자를 사용해야 하는지 정하기 어렵다면 private로 모두 선언해보고, 필요에 따라 다른 접근제어자를 생각 해보는 것을 추천 드립니다. 

반응형

'Design Pattern' 카테고리의 다른 글

전략 패턴 (strategy pattern)  (0) 2019.01.23
객체 설계의 응집도란?  (2) 2019.01.15
객체지향의 4대 특성  (2) 2018.12.31
객체의 추상화 (Abstraction)  (0) 2018.12.04
객체의 다형성(polymorphism)  (0) 2018.10.30
댓글