접근제어자
접근제어자 (access modifier)
private 같은클래스 내에서만 접근가능
(default) 같은 패키지 내에서만 접근가능
protected 같은패키지 내에서
그리고 다른패키지의 자손클래스에서 접근이가능
public 접근제한이 전혀없다
넓은범위순서
pulblic > protected > (default) > private
public,(default) 클래스 앞에붙일수있는건 단2개
public,protected,(default),private 멤버변수(인스턴스변수,클래스변수) 에는 4가지 가능하다
package pkg1;
class MyParent{ // 한패키지안에서는 퍼블릭 클래스는 1개뿐이다
private int prv; // 같은클래스
int dft; // 같은 패키지
protected int prt; // 같은패키지 + 자손 (다른패키지)
public int pub; // 접근제한없음.
public void printMember(){
System.out.println(prv); // 성공
System.out.println(dft); // 성공
System.out.println(prt); // 성공
System.out.println(pub); // 성공
}
}
public class MyParentTest {
public static void main(String[] args) {
MyParent p = new MyParent();// 기본생성자
System.out.println(p.prv); // 실패 > 원인은 다른 클래스에서는 사용불가이기 때문
System.out.println(p.dft); // 성공
System.out.println(p.prt); // 성공
System.out.println(p.pub); // 성공
}
}
캡슐화와 접근제어자
접근제어자를 사용하는이유
- 외부로 부터 데이터를 보호하기 위해서 , 잘못된 데이터값이 들어오거나 변경되는걸 되는걸막으려고
- 외부에는 불필요한걸 노출안시키려고 , 내부에만 사용되는
-
메서드를 통한 간접접근 스타일로 코딩을한다
class Time{ private int hour; // 여기있는변수들의 변형되는걸 막을려고 추후에 따로 객체를생성해서 다른주소로 변수를 초기화(변경,저장)한다 private int minute; // iv 인스턴스변수들 , private 기떄문에 클래스내에서만 사용가능하다 ,클래스내부에서 메서드를통해 간접적으로 가져온다 private int second; public void setHour(int hour) { //3번 인스턴스 메서드 (static이없기떄문에) if(hour <0 || hour > 23 ) return; this.hour = hour; // < 이곳에서 발동되는건 새로운 TIME 객체에서의 hour다 > } public int getHour() { //인스턴스 메서드 return hour; } } public class TimeTest{ public static void main (String[] args) { Time t = new Time(); // 1번 새로운 기본생성자 객체 생성 필수 t.setHour(12); // 2번 System.out.println(t.getHour()); } }
Leave a comment