자바의 접근 제어자는 다른 클래스로부터 정보와 데이터의 접근을 제어한다.
public : 어떤 클래스에서도 접근이 가능
private : 외부의 어떤 클래스에서도 접근이 불가능
protected : 같은 패키지 및 상속 받은 클래스에서 접근 가능.
default : 같은 패키지에 있는 클래스에서만 접근 가능
여기서 protected, default 접근제어자를 사용할 때 주의해야 할 점은 꼭! 같은 패키지여야만 한다는 것이다.
예를 들어 A 패키지에 존재하는 Board 클래스에 default 접근제어자로 선언되어 있는 add 메소드가 존재하고, A 패키지 하위에 B 패키지가 존재한다면. B 패키지 안에 있는 NoticeBoard 클래스에서 A 패키지에 있는 Board 클래스의 add 메소드에 접근할 수 없다. 즉, 같은 depth에 있는 패키지에서만 접근이 가능하다는 것이다.
자바의 접근제어자가 제공하는 기능이 위와 같다면 default 접근제어자는 어떤 경우에 사용할 수 있을까?
대게 layer 아키텍처를 구성할 때 나는 다음과 같이 구성한다.
board 패키지 - controller 패키지
|
- service 패키지
|
- dao 패키지
|
- vo 패키지
위와 같은 패키지 구조에서 default 접근제어자를 꼭 쓰고 싶은 경우에는 interface에 적용하면 좋을 것 같다는 생각을 한다.
controller 패키지에서 service 패키지에 있는 특정 클래스를 사용하고 싶을 때에는 객체지향의 OCP(개방폐쇄원칙)를 지키기 위해 controller 와 service의 중간에 인터페이스를 설계한 후 런타임 의존 관계를 구성한다.
service 패키지 안에 인터페이스를 생성하고 추상화된 메소드들을 모두 default 접근 제어자를 사용하게 된다면 다른 패키지에서 service 패키지 내에 있는 인터페이스로의 접근을 막을 수 있다. 이와 같이 접근 자체를 차단하는 것이 객체지향에서의 캡슐화이다.
'프로그래밍' 카테고리의 다른 글
Serializable 객체직렬화 (1) | 2013.07.30 |
---|---|
jquery를 이용한 jsonp 처리 방법 (0) | 2013.07.11 |
java 재귀함수 시퀀스 다이어그램 (0) | 2013.07.05 |
369 게임 알고리즘 (0) | 2013.06.26 |
정규표현식 (Java) (2) | 2013.05.09 |
스프링 시큐리티 적용하기 (properties 인증 방법) (2) | 2013.04.20 |
스프링 MVC에서 SimpleMappingExceptionResolver 선언 시 주의 사항 (0) | 2013.04.18 |
알고리즘 문제 풀이 방법에 대해서. (0) | 2013.03.08 |