quilt code
[Java] 클래스 (4) 본문
6. 패키지와 접근 제한자
패키지: 클래스의 체계적 관리를 위해 사용. 클래스의 일부분, 식별자 역할
1) 패키지 선언
: 해당 클래스가 어떤 패키지에 속할 것인지 선언하는 것
| package 상위패키지.하위패키지; public class ClassName { ... } |
*패키지 선언 규칙*
- 숫자로 시작x, _, $ 제외 특수문자 사용 불가
- java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용 불가
- 모두 소문자로 작성
2) import문
: 사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속되어 있다면, import문으로 해당 패키지의 클래스 또는 인터페이스를 가져와 사용할 것임을 컴파일러에게 알려줘야함
| import 상위패키지.하위패키지.클래스이름; import 상위패키지.하위패키지.*; |
* import문 자동 추가 기능
[Source] - [Organize imports] 메뉴 선택 / 단축키 ctrl + shift + o
3) 접근 제한자
| public | 외부 클래스가 자유롭게 사용 가능 |
| protected | 같은 패키지 or 자식 클래스에서 사용 가능 |
| default | 같은 패키지에서는 제한 x, 다른 패키지에서는 불가 |
| private | 외부 사용 불가 |
4) 클래스의 접근 제한
| //default 접근 제한 class 클래스 { ... } |
public 생략 -> default 같은 패키지에서는 제한 x 다른 패키지에서는 사용 불가 |
| //public 접근 제한 public class 클래스 { ... } |
+public public 접근 제한 같은, 다른 패키지에서 접근 가능 |
5) 생성자의 접근 제한
| public | 제한 없이 생성자 호출 |
| protected | 같은 패키지 생성자 호출, 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스라면 생성자 호출 가능 |
| default | 제한 없이 생성자 호출 가능 but 다른 패키지에서는 생성자 호출 불가 |
| private | 생성자 호출 불가 |
6) 필드와 메소드의 접근 제한
: 필드와 메소드를 선언할 때 해당 필드와 메소드를 클래스 내부에서만 사용할 것인지, 패키지 내에서만 사용할 것인지, 다른 패키지에서도 사용할지 결정해야함
| //필드선언 [ public | protected | private ] [ static ] 타입 필드; |
| //메소드 선언 [ public | protected | private ] [ static ] 리턴 타입 메소드( ... ) { ... } |
| public | 제한 없이 필드와 메소드 사용 |
| protected | 같은 패키지에 속하는 클래스에서 사용 가능, 다른 클래스여도 자식 클래스면 사용 가능 |
| default | 접근 제한자 생략하면 default 같은 패키지 내에서는 제한 x, 다른 패키지에서는 사용 불가 |
| private | 클래스 내부에서만 사용 가능 |
7) Getter / Setter 메소드
① Setter
: 매개값을 검증해서 유효한 값만 객체의 필드로 저장하는 메소드
| void setSpeed(double speed) { if (speed < 0) { this.speed = 0; return; } else { this.speed = speed; } } |
>>매개값이 음수일 경우 speed 필드에 0으로 저장하고 메소드 실행 종료
② Getter
: 메소드로 필드값을 가공한 후 외부로 전달하는 메소드
| double getSpeed() { double ㎞ = speed * 1.6; return ㎞; } |
>> 필드값이 마일을 ㎞ 단위로 환산한 후 외부로 리턴
| private 타입 fieldName; | 필드 접근 제한자 private |
| //Getter public 리턴 타입 getFieldName() { return fieldName; } |
접근 제한자 public 리턴 타입 : 필드타입 메소드 이름 : get + 필드이름(첫글자는 대문자) 리턴값 : 필드값 |
| //Setter public void setFieldName(타입 fieldName) { this.fieldName = fieldName; } |
접근 제한자 public 리턴 타입 : void 메소드 이름 : set + 필드이름(첫글자는 대문자) 매개변수타입 : 필드타입 |
| private boolean stop; | 필드 접근 제한자 private |
| //Getter public boolean isStop() { return stop; } |
접근 제한자 public 리턴 타입 : 필드타입 -> boolean인 경우 get이 아니라 is로 시작 메소드 이름 : is + 필드이름 리턴값 : 필드값 |
| //Setter public void setStop(boolean stop) { this.stop = stop; } |
접근 제한자 public 리턴 타입 : void 메소드 이름 : set + 필드이름 매개 변수 타입 : 필드타입 |
'daily > Java' 카테고리의 다른 글
| [Java] 상속 (0) | 2023.01.16 |
|---|---|
| [Java] 클래스 (3) (0) | 2023.01.04 |
| [Java] 클래스 (2) (0) | 2023.01.03 |
| [Java] 클래스(1) (0) | 2023.01.02 |
| [Java] 참조타입 과제 (0) | 2023.01.02 |