본문 바로가기
Programming Language 이해하기/Java 이해하기

Java 에서 패키지(Package) 라는 것을 왜 사용해야만 할까?

by simplify-len 2024. 10. 3.

자바에서 사용하는 패키지는 왜 사용할까? 일단 Java 에서 Package 라고 하면 다음과 같이 생각하는 것이 일반적이다.

패키지(Package) 패키지란? 클래스의 묶음으로 클래스를 용도별이나, 기능별로 그룹화 [참고 - https://wikidocs.net/231]

이것을 고민했던 이유는 다음과 같습니다.

java 소스코드 아래 바로 Zzzz 클래스 생성

이걸 보면, Zzzz 클래스는 아무런 패키지없이도 만들 수 있습니다. 그런데 패키지가 왜 필요한거지?

멘토링을 진행하면서 '이렇게 패키지 구조를 만들었는데, 적절한가요?' 라는 질문을 정말 많이 받았는데요. 이 질문에 답변을 하는 과정에서 패키지 구조만 보고 내가 어떻게 적절하다고 판단을 하지? 라는 생각을 했습니다.

 적어도 옛날에 읽었던 클린 소프트웨어 책에서 패키지는 이렇게 하는거야! 라는 내용을 읽어보긴 했지만- 아직까지 저에게는 조금 벅찬내용이지 않을까 싶습니다. 그래서 좀더 쉬운 내용으로 왜 패키지가 필요한지 설명해보고 싶었습니다.

과거 어깨넘어 들었던 패키지가 존재하는 이유가 가시성이라는 말을 했습니다. 여기서 가시성이란 무엇일까요?
그리고, 클래스의 묶음으로 클래스를 용도별이나, 기능별로 그룹화가 무슨 의미인지 이야기해볼까 합니다.

가시성 = 접근 제어와 코드의 노출 범위 > 보안적 목적

가시성이라고 말하는건 눈에 보인다 이것보다 좀더 구체적으로 말해보면, 클래스와 클래스간에 접근 제어와 코드의 노출범위를 패키지가 책임진다는 이야기입니다. 

접근제어자(public, protected, default, private)은 패키지 기반으로 가시성을 보장해준다. 라고 말할 수 있습니다. 여기서 default 라는 것은 '위치한 패키지내에서만 사용할 수 있는 클래스'이다. 라는 의미인데- 이것이 힘을 발휘하는 시점은 하나의 서비스가 요구사항에 따라 변경되더라도, 'default 클래스는 위차한 패키지안에서만 사용해야해.' 라는 메세지를 전달할 수도 있습니다.

이는 보안적인 목적에 해당되지 않을까요. 패키지를 기반으로 클래스, 메서드, 변수에 대한 접근 권한을 설정함으로써, 다른 패키지에서 특정 코드에 접근할 수 있는지 여부를 결정짓게 하고 만약 의도하지 않은 사용이나 부적절한 접근을 방지할 수 있을 것입니다.

클래스의 묶음 = 클래스 용도 = 기능별 그룹화 > 구조적 목적

코드를 논리적으로 그룹화하여 관리하기 쉽도록 만들기 위해 패키지를 사용합니다. 예를 들어, StringUtil, ClassUtil 등 Util 과 관련된 클래스는 한 곳에 모으거나 하는거죠.  코드를 구조적으로 잘 관리하기 쉽게 만들면 어떤 이점이 있을 수 있을까요?

일단 잘 구조화된 코드의 패키지의 경우에는 이를 여러 필요한 공간에서 재사용 할 수 있을 것 같아요.

또 Class 이름에 대해서도 관리할 수 있지 않을까요? 대규모 애플리케이션에서는 같은 이름의 클래스를 만들 수 있는데- 잘 구조화가 되어있다면, 같은 이름의 클래스를 만들 필요가 없지 않을까요?

 

결론

1. 접근 제어와 코드 노출 범위 보안적 관점에서 클래스와 메서드의 가시성을 제어하여 코드의 캡슐화 보호를 중점으로 한다.
2. 조직화와 관리 구조적 관점에서 코드의 정리와 그룹화를 중점으로 하여, 프로젝트의 규모가 커질수록 관리 효율성을 높이는 데 초점을 둔다.

 

그 외에도 클린소프트웨어에서 말하는 패키지 원칙이 있는데, 그 부분은 조금만 더 고민해보고 이야기해보자..!

 

댓글