☕JAVA/🐣 강의 [JAVA]

[JAVA][기초] 패키지 Package & 패키지 구성

디카페인라떼 2022. 10. 7. 00:02

[기초] 시리즈는 본강의를 수강후 정리한 글들 입니다.

Java for Beginner - YouTube

 

Java for Beginner

[교재 link] https://github.com/namoosori/java-for-beginner/tree/master/doc Java for Beginner 강의에서 다루는 내용은 다음과 같습니다. - Java 개요 : Java 언어가 어떤 언어이고 Java 언어를 이용해 프...

www.youtube.com


패키지란?
  • 자바는 패키지를 통해 관련 있는 클래스들을 그룹화.
  • 패키지를 사용하면 외부로부터 제공 받은 여러 클래스들과 현재 구현하는 클래스들을 구분하여 관리 가능
  • 패키지를 사용하는 가장 중요한 이유는 클래스 이름에 대한 유일성을 보장할 수 있기 때문.

 

클래스 import
  • 클래스는 자신의 패키지에 있는 모든 클래스와 다른 패키지의 모든  public 클래스들을 사용 가능
  • 다른 패키지의 public 클래스를 사용하는 두가지 방법
    • 패키지를 포함한 클래스명을 사용
 java.util.Date today = new java.util.Date();

 

  • import문을 사용
import java.util.Date;
.
Date today = new Date();
  • import문
    • import문은 소스파일의 가장 상단에 위치하며, 포함시키는 클래스를 정의
    • 와일드카드(*)를 사용하여 특정 패키지의 모든 클래스에 포함시킬 수 있음.
      • ex) java.util.*;
    • 단, 사용하려는 클래스가 두 곳 이상의 패키지에 포함된 경우 컴파일 에러가 발생

 

static import

  • import static문을 사용하면 정적 메소드나 필드를 클래스명 없이 사용가능
  • 마찬가지로 와일드카드를 사용하여 해당 클래스의 모든 정적 요소를 포함시킬수 있음.
  • 그러나, 클래스명 없이 정적 요소를 사용하는 것은 코드가 명시적이지 않아 권장하지 않음.

 

패키지 구성
  • 패키지에 대한 정의는 클래스 소스파일의 가장 상단에 위치하며 소스 파일은 패키지명과 동일한 폴더에 위치
  • 컴파일 결과 (바이트코드)도 동일한 폴더에 생성
  • 통합 개발환경에서는 설정을 통해 컴파일 결과를 다른 폴더에 저장 가능

 


여기까지는 강의 내용이었으나 오늘 팀 프로젝트를 위해서 패키지 구조 리팩토링을 하려다 찾은 자료들이 있어서 같이 정리한다.

참고 블로그

 


패키지의 구성은 크게 계층형, 도메인형 2가지가 있다.

  • 계층형 (레이어형)

👉장점 : 프로젝트에 대한 이해가 상대적으로 낮아도 전체적인 구조 파악 가능

👉단점 :  프로젝트가 커지게되면 클래스들이 너무 응집해있어 가독성이 떨어진다.

  • 도메인형 (기능형)
    • DB테이블 마다 패키지를 만들어주고 그 안에 관련된걸 다 넣어준다고 생각하면 된다

👉장점 : 프로젝트가 커질 수록 패키지 안에 클래스 수가 증가하기 때문에 기능별 구성 재사용성이 좋다. 

👉단점 :  프로젝트에 대한 이해가 상대적으로 낮으면 쉽게 파악하기 어렵다.

 

좀더 나은 가독성을 위한 패키지 구성 (계층형 + 기능형)
  • 기능별로 나누고 계층별로 나누기 ✔

 

👉 원래는 처음에 배웠던 계층형구조로만 패키지 구성을 해왔었는데 팀 프로젝트를 하면서 프로젝트가 커지면서 XXXService..XxxService.. 이런 식으로 계속 클래스들이 응집해 있으면서 바로 찾기가 어려운 문제점이 있었다. 

👉 기능형으로만 나누려고 하니 전역으로 사용되는 클래스들은 어떤 식으로 처리해야할까 하다가

global을 만들고 그 안에 패키지로 나누었다. 이 부분은 찾아봐도 개발자마다 다른 방법이 있으므로 이러한 방식으로 계속 프로젝트를 해보면서 바꾸어봐도 좋을 것 같다.