Home 김영한의 실전 자바 - 패키지
Post
Cancel

김영한의 실전 자바 - 패키지

패키지

  • 김영한님의 실전 자바 강의 중 패키지 챕터를 학습하며 클래스를 분류하고 관리하는 패키지의 개념과 사용법을 정리함



패키지란?

패키지의 필요성

  • 프로그램의 기능이 추가되어 규모가 커지면 관리해야 할 클래스가 매우 많아짐
  • 관련 있는 기능들을 분류하여 관리하기 위해 컴퓨터의 폴더와 유사한 개념인 패키지를 사용함
  • user, product, order 등 카테고리를 만들고 관련 클래스들을 해당 패키지에 넣어서 관리함

패키지 사용법

  • 패키지를 사용하는 경우 항상 코드 첫 줄에 패키지 이름을 적어주어야 함
  • 패키지 이름은 package pack과 같이 선언함
  • 클래스 생성 시 다른 패키지에서 호출하려면 생성자에 public 키워드를 사용해야 함

패키지 위치에 따른 호출 방식

  • 같은 패키지 위치
    • 클래스가 같은 패키지 내에 소속되어 있는 경우 패키지 경로를 생략할 수 있음
  • 다른 패키지 위치
    • 패키지가 다르면 pack.a.User와 같이 패키지 전체 경로를 포함해서 클래스를 적어주어야 함



import란?

개념

  • 패키지가 다를 때마다 항상 전체 경로를 적는 불편함을 해결하기 위해 사용함

사용법

  • 코드 상단에 import 문을 사용하면 패키지 명을 생략하고 클래스 이름만 적을 수 있음
  • 특정 패키지에 포함된 모든 클래스를 가져오고 싶으면 *을 사용함
  • import pack.a.*와 같이 선언하여 해당 패키지의 모든 클래스를 바로 사용함

클래스 이름이 중복일 경우

  • 서로 다른 패키지에 이름이 같은 클래스가 존재하는 경우 패키지 이름으로 대상을 구분함
  • 중복된 이름의 클래스를 한 곳에서 모두 사용하려면 import는 둘 중 하나만 선택함
  • 자주 사용하는 클래스를 import 하고 나머지는 전체 경로를 직접 적어서 구분함

클래스 이름 중복 해결



패키지 규칙

기본 규칙

  • 패키지의 이름과 위치는 물리적인 폴더 위치와 반드시 같아야 함
  • 패키지 이름은 관례상 모두 소문자를 사용함
  • 외부 라이브러리와의 이름 충돌을 방지하기 위해 회사 도메인 이름을 거꾸로 사용함
  • 예시로 com.company.myapp과 같은 형태를 가짐

패키지와 계층 구조

  • 패키지는 사람이 이해하기 쉽게 계층 구조를 이루어 분류함
  • 계층 구조상 하위 패키지라도 자바 입장에서는 서로 완전히 다른 독립적인 패키지임
  • 따라서 계층 구조 관계라도 다른 패키지의 클래스가 필요하면 반드시 import 해야 함

패키지 계층 구조



패키지 활용

패키지 구성 방식

  • 프로젝트 규모와 아키텍처에 따라 패키지를 구성함
  • 서로 관련된 클래스는 하나의 패키지에 모으고 관련이 적은 클래스는 다른 패키지로 분리함
  • 다른 패키지의 기능이 필요하면 import 문을 통해 연동하여 사용함



연습 문제

  1. 대규모 프로그램에서 패키지가 해결하는 주된 문제는 무엇일까요?

    a. 너무 많은 클래스로 인한 관리의 어려움

    • 프로그램 규모가 커지면서 클래스가 많아지면 관리가 어려워지는데 패키지는 클래스를 그룹화하여 이런 복잡성을 해결함
  2. 다른 패키지의 클래스를 사용할 때 import를 사용하면 어떤 점이 편리해지나요?

    a. 클래스의 전체 경로명 생략 가능

    • import 문을 사용하면 다른 패키지에 있는 클래스를 사용할 때 매번 전체 경로를 쓰지 않고 클래스 이름만으로 사용할 수 있게 됨
  3. 패키지 이름에 회사 도메인 이름을 역순으로 사용하는 주된 목적은 무엇일까요?

    a. 외부 라이브러리와의 이름 충돌 방지

    • 전 세계적으로 고유한 패키지 이름을 만들 수 있어 다른 라이브러리와의 충돌을 피할 수 있음
  4. pack.a 패키지에 있는 클래스가 pack.a.b 패키지에 있는 클래스를 사용하려면 어떻게 해야 할까요?

    a. import 문을 사용하여 해당 클래스를 가져와야 함

    • 두 패키지는 계층 구조처럼 보이지만 실제로는 완전히 독립적인 별개의 패키지임
  5. 클래스를 패키지로 구성할 때 가장 권장되는 방법은 무엇일까요?

    a. 관련된 클래스들을 하나의 패키지로 묶기

    • 기능적 또는 논리적으로 관련 있는 클래스들을 모아두면 코드를 찾고 관리하기 쉬워짐



요약 정리

  • 패키지의 기능
    • 클래스를 그룹화하여 관리하는 폴더 역할을 수행함
    • 클래스 이름 중복 문제를 패키지 경로를 통해 해결함
  • import의 장점
    • 다른 패키지 클래스 호출 시 전체 경로 작성의 번거로움을 제거함
  • 패키지 관리의 대원칙
    • 패키지 계층 구조와 상관없이 모든 패키지는 서로 독립적인 존재임
    • 명확한 분류와 도메인 역순 명명 관례를 통해 코드의 안정성을 확보함



Reference

Contents