자바의 접근 제어자
- private
- default
- protected
- public
- private -> default -> protected -> public 순으로 보다 많은 접근을 허용한다.
Private
- private 이 붙은 변수, 메소드
- 해당 클래스에서만 접근이 가능하다.
public class AccessModifier {
private String secret;
private String getSecret() {
return this.secret;
}
}
- secret과 getSecret 메소드는 오직 AccessModifier 클래스에서만 접근이 가능하고 다른 클래스에서는 접근이 불가능하다.
Default
- 접근 제어자를 설정하지 않는다면 접근 제어자가 없는 변수, 메소드는 default 접근 제어자가 된다.
- 해당 패키지 내에서만 접근이 가능하다.
// HouseKim.java
package jump2java.house;
public class HouseKim {
String lastname = "kim";
}
// HousePark.java
package jump2java.house;
public class HousePark {
String lastname = "park";
public static void main(String[] args) {
HouseKim kim = new HouseKim();
System.out.println(kim.lastname);
}
}
// 출력: kim
- HouseKim과 HousePark는 패키지가 jump2java.house로 동일하다.
- HouseKim의 lastname은 접근 제어자 설정이 안되어 있으므로 default이다.
- 그러므로 같은 패키지 내에서 kim.lastname으로 접근 가능하다.
Protected
- protected가 붙은 변수, 메소드는 다음에서 접근 가능하다.
- 동일 패키지내의 클래스
- 해당 클래스를 상속받은 외부 패키지의 클래스
// HousePark.java package jump2java.house; public class HousePark { protected String lastname = "park"; }
// EungYongPark.java package jump2java.house.person; import house.HousePark; public class EungYongPark extends HousePark { public static void main(String[] args) { EungYongPark eyp = new EungYongPark(); System.out.println(eyp.lastname); } } // 출력 결과: park
- HousePark 클래스를 상속 받은 EungYongPark
- HousePark와 package는 다르다
- HousePark: jump2java.house
- EungYongPark: jump2java.house.person
- HousePark에서 lastname이 protected라서 eyp.lastname으로 접근이 가능하다.
- 만약 default로 되어있다면 컴파일 에러가 났을 것
- public이 붙은 변수, 메소드
- 어떤 클래스에서던지 접근 가능하다.
- 접근 제어자를 이용하면 프로그래머의 코딩 실수를 방지할 수 있고 기타 위험요소를 제거할 수 있는 등의 많은 장점이 있다.
'Application > Java' 카테고리의 다른 글
[Jump2Java] 07장 예외 처리 (0) | 2021.09.16 |
---|---|
[Jump2Java] 07장 정적 변수와 메소드 (static) (0) | 2021.09.16 |
[Jump2Java] 06장 입출력 01 (0) | 2021.09.15 |
[Jump2Java] 05장 객체지향 프로그래밍 06 (0) | 2021.09.14 |
[Jump2Java] 05장 객체지향 프로그래밍 05 (0) | 2021.09.14 |
댓글