본문 바로가기
개발 공부/Java

이펙티브 자바 아이템 15 - 클래스와 멤버의 접근 권한을 최소화하라 - 완벽 공략

by 개발인생 2022. 11. 9.
반응형

아이템 15 - 클래스와 멤버의 접근 권한을 최소화하라 - 완벽 공략

이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다.

자바 모듈

자바 9 버전에서의 가장 큰 변화는 Java Platform Module System 이다.

줄여서 JPMS 라고도 부른다.

모듈 시스템은 컴포넌트 간의 더 나은 관계를 표현해 줄 수 있는 방법을 제공한다.

이전에는 어떤 컴포넌트가 다른 컴포넌트에서 사용한다는 걸 표시하는 방법은 classpath 뿐이었다.

classpath 에 jar 파일을 넣음으로써 현재 프로젝트에서 다른 jar 파일을 참조해 사용할 수 있었다.

이 방법은 참조하는 jar 파일이 없더라도 어플리케이션이 동작한뒤 해당 jar 파일을 참조하려고 할 때 알 수가 있었다.

즉, 시작하기 전에 구성하는 jar 파일이 존재하는지 확인하는 기능이 없다는 뜻이다.

Spring Boot 를 사용하는 경우라면 스프링 부트에서 사용하는 jar 파일들을 전부 넣어 jar 파일을 만든다.

이를 우버 자르 또는 fatjar 라고 부른다.

이 경우는 아주 특이한 경우이므로 제외한다.

classpath 는 사용한다는 표현만 있고 컴포넌트들 간의 관계를 표현하는 방법이 존재하지 않는다.


자바 모듈 시스템의 장점은 다음과 같다.

  • 자바 모듈 시스템은 컴포넌트들 간의 관계 를 표현할 수 있기 때문에 더 안정적인 설정이 가능해진다.

자바 모듈 시스템은 어떤 패키지를 사용할 것인지 어떤 패키지를 공개할 것인지에 대한 정의 를 할 수 있기 때문에

더 안정적인 설정이 가능하다.

  • 보다 강력한 캡슐화가 가능하다.

공개할 수 있는 패키지 를 정할 수 있기 때문에 만약 protectedpublic 으로 된 맴버라도

모듈에서 해당 패키지를 공개하지 않는다면 모듈 외부 에서는 접근 할 수 없다.

하지만 모듈이 아닌 곳에서 모듈을 classpath 에 추가해 사용한다면

모듈에 정의된 protectedpublic 으로 된 맴버를 그대로 사용할 수 있다.

중요한 건 현재 사용하는 어플리케이션이 모듈이냐 아니냐가 중요하다.

이렇게 모듈은 강제하지 않기 때문에 자주 사용하지는 않는다.

  • 모듈을 사용하면 자바 런타임 자체를 우리가 필요로 한 것으로만 구성해 만들 수 있다.

자바 9에서 JDK 가 모듈 시스템으로 재구성되었기 떄문에 필요한 모듈을 불러와 JRE 를 구성해 사용할 수 있다.

  • 모듈이 없다면 애플리케이션 구동시 알 수 있다.
반응형

댓글