🌎 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
※ 이 내용은 책 [혼자 공부하는 자바]를 보고 정리한 내용입니다.