🌎 Web/Java

[Java] 패키지와 접근 제한자

오늘 ONEUL 2022. 11. 30. 11:59
Chapter 06 클래스
   06-1 객체 지향 프로그래밍
   06-2 필드
   06-3 생성자
   06-4 메소드
   06-5 인스턴스 멤버와 정적 멤버
   06-6 패키지와 접근 제한자

 

 

06 클래스

06-6 패키지와 접근 제한자

시작하기 전에

  • 패키지의 물리적인 형태는 파일 시스템의 폴더이다.
  • 프로젝트 개발 시 클래스를 체계적으로 관리하기 위해 패키지를 사용한다.
  • 단순 폴더 기능뿐만 아니라 클래스의 일부분으로, 클래스를 유일하게 만들어주는 식별자 역할을 한다.
  • 클래스 이름이 동일하더라도 패키지가 다르면 다른 클래스를 인식한다.
  • 클래스의 전체 이름은 패키지+클래스를 사용하여 다음과 같이 표현한다.
    • 상위패키지.하위패키지.클래스

 

패키지 선언

  • 해당 클래스가 어떤 패키지에 속할 것인지를 선언한다.
package 상위패키지.하위패키지;

public class ClassName {...}
  • 패키지 이름 규칙
    • 숫자로 시작 불가
    • _및 $ 제외한 특수문자 사용 불가
    • java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용 불가
    • 모두 소문자로 작성하는 것이 관례
  • 패키지 이름의 중복 방지를 위해 보통 회사 도메인 이름으로 패키지를 만든다.

 

import문

  • 사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속된 경우, 해당 패키지 클래스 또는 인터페이스 가져와 사용할 것임을 컴파일러에게 알려줘야 한다.
import 상위패키지.하위패키지.클래스이름;
import 상위패키지.하위패키지;
  • 패키지 선언과 클래스 선언 사이에 작성한다.
  • 하위 패키지는 별도로 import를 해야 한다.
  • 다른 패키지에 동일한 이름의 클래스가 있을 경우 import와 상관없이 클래스 전체 이름을 기술한다.

 

접근 제한자

  • 클래스와 인터페이스 및 이들이 가진 멤버의 접근을 제한하기 위해 사용된다.
  • public 접근 제한자
    • 외부 클래스가 자유롭게 사용할 수 있도록 한다.
  • protected 접근 제한자
    • 같은 패키지 또는 자식 클래스에서 사용할 수 있도록 한다.
  • private 접근 제한자
    • 외부에서 사용할 수 없도록 한다.
  • defaut 접근 제한
    • 같은 패키지에 소속된 클래스에서만 사용할 수 있도록 한다.

 

클래스의 접근 제한

  • default 접근 제한
    • 같은 패키지에서는 제한이 없지만 다른 패키지에서는 사용할 수 없다.
  • public 접근 제한
    • 같은 패키지뿐만 아니라 다른 클래스에서도 사용할 수 있다.

 

생성자의 접근 제한

  • 생성자 접근 제한에 따라 생성자 호출 가능 여부가 결정된다.
  • public 접근 제한자
    • 모든 패키지에서 생성자를 호출할 수 있다.
  • protected 접근 제한자
    • 같은 패키지에 속하는 클래스에서 생성자를 호출할 수 있다. default 접근 제한자와 다른 점은 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스라면 생성자를 호출할 수 있다.
  • default 접근 제한
    • 같은 패키지에서는 제한 없이 생성자를 호출할 수 있으나, 다른 패키지에서는 생성자를 호출할 수 없다.
  • private 접근 제한자
    • 오로지 클래스 내부에서만 생성자를 호출할 수 있고 객체를 만들 수 있다.
  • 자동으로 생성되는 기본 생성자는 클래스의 접근 제한을 따른다.
public class ClassName() {
	// public 접근 제한
	public ClassName(...) {...}

	// protected 접근 제한
	protected ClassName(...) {...}

	// default 접근 제한
	Class Name(...) {...}

	// private 접근 제한
	private ClassName(...) {...}

}

 

필드와 메소드의 접근 제한

  • public 접근 제한자
    • 모든 패키지에서 필드와 메소드를 사용할 수 있다.
  • protected 접근 제한자
    • 같은 패키지에 속하는 클래스에서 필드와 메소드를 사용할 수 있다. default 접근 제한자와 다른 점은 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스라면 필드와 메소드를 사용할 수 있다.
  • default 접근 제한
    • 같은 패키지에서는 제한 없이 필드와 메소드를 사용할 수 있으나, 다른 패키지에서는 필드와 메소드를 사용할 수 없다.
  • private 접근 제한자
    • 오로지 클래스 내부에서만 필드와 메소드를 사용할 수 있다.

 

Getter와 Setter 메소드

  • 외부에서 객체에 마음대로 접근할 경우 객체의 무결성이 깨질 수 있다! → 필드는 private, 메소드는 public으로 설정하여 메소드를 통해서만 필드를 변경할 수 있도록 한다.
  • Setter 메소드
    • 외부의 값을 받아 필드의 값을 변경하는 것이 목적이다.
    • 매개값을 검증하여 유효한 값만 필드로 저장할 수 있다.
  • Getter 메소드
    • 외부로 필드값을 전달하는 것이 목적이다.
    • 필드값을 가공해서 외부로 전달할 수도 있다.
    • 필드타입이 boolean일 경우 get으로 시작하지 않고 is로 시작하는 것이 관례이다.

 

마무리 핵심 포인트

  • 패키지 선언: 해당 클래스 또는 인터페이스가 어떤 패키지에 속할 것인지 선언하는 것을 의미한다.
  • import문: 사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속되어 있다면, import문으로 가져와 사용할 것임을 컴파일러에게 알려줘야 한다.
  • 접근 제한자
접근 제한 적용 대상 접근할 수 없는 클래스
public  클래스, 필드, 생성자, 메소드 없음
protected 필드, 생성자, 메소드  자식 클래스가 아닌 다른 패키지에 소속된 클래스
default 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스
private 필드, 생성자, 메소드 모든 외부 클래스
  • Getter / Setter: 필드는 외부에서 접근할 수 없도록 막고 메소드는 공개해서 외부에서 메소드를 통해 필드에 접근하도록 유도한다.
    • 필드의 값을 외부로 리턴해주는 메소드 → Getter
    • 외부에서 값을 받아 필드를 변경하는 메소드 → Setter

 

 

 

※ 이 내용은 책 [혼자 공부하는 자바]를 보고 정리한 내용입니다.