본문 바로가기
얄코의 제대로 파는 자바/섹션6 클래스 더 알아보기

패키지

by 백엔드 개발자 2024. 4. 2.
  • 자바 프로젝트의 디렉토리(폴더) - 패키지로 불리게 됨
    • 일정 규모 이상의 프로그램을 적절히 모듈화
    • 패키지 정보: 클래스의 구성요소 중 하나
  • 클래스명의 중복을 피하기 위해 사용
    • 예: Button 클래스 - 내부에서 생성한 클래스도 있지만, java에서 제공해주는 클래스도 있기 때문에 잘 확인해야 한다.
  • 빌드의 결과도 패키지의 구조를 따름
    • 이전 예제들의 out 폴더 확인할 것

 

 

 

 

패키지 내 클래스별로 접근제어자 확인하기


 

private

  • 가장 엄격해서 자식 클래스에서도 사용이 안되고 있는 모습
  • 접근만 불가능할 뿐이지 Child 내부에서 가지고 있는 것은 맞다.
  • 상속받지 않는 클래스도 당연히 사용불가.
  • 같은 클래스 내에서만 사용가능.

 

 

default

  • 같은 패키지 내에서는 사용 가능하므로 자식 클래스 및 Friend 클래스에서도 사용 가능한 걸 볼 수 있따.

 

protected, public은 훨씬 관대하기 때문에, 다 사용이 가능하다.

다만 protected나 public이라도 인스턴스 생성후 접근 가능.

 

 

 

다른 패키지에 들어있는 클래스로부터도 상속 가능

package sec06.chap02.pkg2;//  상단에 임포트 필요

import sec06.chap02.pkg1.Parent;

public class Child extends Parent {
    //  Parent와 다른 패키지
    //  int aa = a; // ⚠️ 불가
    //  int bb = b; // ⚠️ 불가
    int cc = c; // 💡 protected - 다른 패키지, 상속관계
    int dd = d;
}
  • 다른 패키지이기 때문에, private 사용 불가
  • default도 같은 패키지에서만 사용할 수 있기 때문에 사용 불가
  • protected는 같은 패키지 아니면 상속일 경우 사용할 수 있어서 c도 사용가능
  • public은 어디서든 접근 가능.

 

 

와일드 카드와 패키지명 특정

 

  • 특정패키지에 특정 클래스를 지정할 수도 있고, 와일드카드를 찍어서 해당 패키지 안의 클래스를 다 가져올 수도 있다.
  • 패키지가 다른 동명 클래스를 가져올 때 구분이 안갈 수 있다. 그때는 클래스를 전부 적어서 가져올 수도 있다.

(ex : chap02.pkg1.....)

  • 보통 이렇게 하는건 비효율적이다. 두클래스 이름이 같아서 부득이하게 각각 특정해줘야 하는 경우에만 사용하는 것이 좋다.

 

컴파일

  • java에서 컴파일할 때 그와 관련된, 임포트하는 클래스들도 함께 컴파일 된다.
  • 그과정에서 패키지의 정보와 명령을 내리는 위치가 중요하게 맞물려서 작용한다.

 

 

 

프로젝트 패키지명 작명


  • 인텔리제이에서 새 프로젝트 - Maven 또는 Gradle - 고급 옵션에서 예시
  • 본인/또는 회사의 도메인 (있을 경우) 권장
    • kr.yalco.calculator
      • 한국에 있는 얄코란 사람/회사가 만든 계산기 프로그램
      • 규모, 주체, 용도 등을 파악 가능
      • 다른 프로젝트들에 사용될 시…
  • java, javax 가 맨 앞에 올 수 없음 (JRE 라이브러리와 중복)
    • src 폴더 안에 만들고 클래스 넣어 확인해 볼 것
  • 식별자 명명 규칙 따름
    • 소문자로 시작하는 것이 컨벤션

 

 

 

java.lang 패키지


package sec06.chap02.pkg5;

public class Main {
    public static void main(String[] args) {
        //  java.lang 패키지에 속한 기본 라이브러리 클래스들
        System.out.println("이 클래스들은 왜 임포트를 안 해도 될까요?");
        Object object = new Object();
        String str = new String("java.lang 패키지 소속이라 그럼");
        Integer integer;
        Math math;

        //  다른 패키지에 속한 기본 라이브러리 클래스들
        ArrayList arrayList;
        Calendar calendar;
        Optional optional;
        Iterator iterator;
        InputStream inputStream;
        Serializable serializable;
        Stream stream;
        Button button;
    }
}

 

  • 자바 라이브러리에 기본으로 포함
    • 프로그래밍에 널리 사용되는 핵심적인 클래스
  • 임포트하지 않아도 되는 패키지
    • System, String 등을 임포트하지 않아도 되는 이유
    • 다른 라이브러리 패키지들은 임포트해야 함

 

 

 

 

 

 

출처 

  • 사이트, 검색명 (날짜)

'얄코의 제대로 파는 자바 > 섹션6 클래스 더 알아보기' 카테고리의 다른 글

열거형  (0) 2024.04.17
메인 메소드  (0) 2024.04.15
익명클래스  (0) 2024.04.08
내부클래스  (0) 2024.04.07
블록과 스코프  (0) 2024.03.24