외부에 대한 접근을 제어하는 문법을 접근 제어자(access modifier)라고 한다. 보통 변수나 함수, 클래스앞에 접근 제어자를 붙이고 접근 허용 범위를 관리한다.
접근 제어자는 크게 4가지로 분류된다. private,default,protected,public
private
private을 사용할 경우, 그에 해당하는 함수나 변수, 클래스는 해당 클래스에서만 접근할 수 있다. 즉 클래스 외부에서 사용할 수 없고 해당 클래스내에서만 사용할 수 있다.
같은 패키지, 같은 클래스
publicclassPrivateClass{
privateint private_num = 10; //PrivateClass 내에서만 접근 가능private String private_str = "private"; //PrivateClass 내에서만 접근 가능 private String getPirvate(){
returnthis.private_str; //같은 클래스 내에 있는 변수를 함수로 접근 가능
}
}
default
이는 같은 패키지 내에서만 접근이 가능하다. default는 따로 접근 제어자를 입력할 필요가 없다.
같은 패키지, 다른 클래스
package seungWon.defaultone;
classDefaultClass{
int year = 2019;
}
publicclassDefaultTwoClass{
int month = 9;
int day = 14;
publicstaticvoidmain(String []args){
System.out.println(year+"."+month+"."+day);
//같은 패키지,다른 클래스에 있는 변수 호출가능
}
}
protected
default와 같이 같은 패키지에서 접근이 가능하다. 하지만 다른 패키지에서 사용할 수 있는 경우가 있다. 다른 패키지에 상속받는 부모 클래스가 있을 때 접근이 가능하다.
다른 패키지, 상속받은 클래스
package seungWon.protectedone;
publicclassProtectedClass{
int year = 2019;
}
package seungWon.protectedtwo;
import protectedone.ProtectedClass;
publicclassMainClassextendsProtectedClass{
int month = 9;
int day = 14;
publicstaticvoidmain(String []args){
System.out.println(year+"."+month+"."+day);
//다른 패키지,상속한 클래스에 있는 변수 호출가능
}
}
public
public은 어디에서나 접근이 가능하다.따라서 사용하기 편할 수 있지만 정보가 노출되어 있다는 단점이 있다.
다른 패키지,다른 클래스
package seungWon.publicone;
publicclassPublicClass{
int year = 2019;
}
package seungWon.publictwo;
publicclassMainClass{
int month = 9;
int day = 14;
publicstaticvoidmain(String []args){
System.out.println(year+"."+month+"."+day);
//다른 패키지,다른 클래스에 있는 변수 호출가능
}
}
이처럼 접근 제어자는 각자 장단점이 있고 이를 잘 활용하여 코드를 짜야 한다.
public - 모두 다 protected - 동일 패키지, 상속 default - 동일 패키지 private - 동일 클래스
코드를 짜면서 SecondActivity의 GOTO버튼을 누를경우에만 Toast메세지를 띄우게 설정해놨는데 처음 MainActivity에서
Layout을 누르면 Toast 메세지가 버그가 걸린 것처럼 메세지 없이 뜬다.
해결
LayoutActivity에서 if(test != null) 을 넣어서 만약 SecondActivity에서 해당 인텐트를 받지 않는다면 Toast메세지가 뜨지않게 설정해 두었다. 그렇게 한다면 메인 엑티비티에서 바로 Layout버튼을 눌러도 토스트 메세지 버그 현상이 이러나지 않는다!!