접근 제한자(Access Modifier)
접근 제한자는 (클래스, 멤버변수, 메서드, 생성자)의 접근을 제어할 수 있는 제한자입니다.
접근 제한자는 가장 처음에 쓰인다.
public class ~~{ 에서 public 이 접근제한자
클래스에는 접근제한자를 public과 default만 붙일 수 있다.
생성자에 접근제한자를 붙이면 외부에서 호출을 못하게 할 수 있다.
접근제한자를 통해 객체의 특정 데이터를 보호할 수 있다.
접근제한자 종류
1. pulic -어디서나 사용가능. 패키지 기준 아무곳에서나 사용할 수 있다. 패키지가 달라도 사용가능.
2. protected-같은 패키지에서 접근 가능. super를 통한 접근 가능. 상속관계를 줄 수 있다.
3. default(아무것도 붙이지 않는 형태)-같은 패키지에서만 접근 가능. 패키지가 다르면 접근불가능
4. private-public과 정반대. 같은 클래스 에서만 사용가능.
자바에서 색깔도 다르게 나온다. 초록색은 public, 노란색은 protected, 파란색은 default, 빨간색은 private
접근제한자가 적혀 있지 않다면 default이다.
패키지
package day07.modi.cls.pac1;
//클래스에 붙는 접근제어자는 public, default
class A {
}
package day07.modi.cls.pac2;
import day07.modi.cls.pac1.*;
public class B {
//A클래스 접근-default는 같은 패키지에서만 접근가능
// A a = new A();
}
위 아래 클래스는 다른 패키지에 생성되어 있음. 때문에 default인 A클래스는 B클래스에서 객체생성 불가능
생성자
package day07.modi.construct.pac1;
public class A {
//생성자
public A(int i){}
A(boolean b){}
private A(String s){}
}
package day07.modi.construct.pac1;
public class B {
A a = new A(10);//ok-public
A b = new A(true);//ok-default
// A c = new A("a");//no-private
}
package day07.modi.construct.pac2;
import day07.modi.construct.pac1.A;
public class C {
A a = new A(10);//ok-public
// A b = new A(true);//no-default
// A c = new A("a");//no-private
}
A와 B는 같은 패키지에 생성되어 있다. 따라서 private을 제외한 모든 접근제한 생성자에 접근가능
그러나, C는 다른 패키지에 생성되어 있기 때문에 default 접근제한 생성자는 접근이 불가능하다.
멤버변수
package day07.modi.member.pac1;
public class A {
//멤버변수
public int var1;
int var2;
private int var3;
public void method01() {}
void method02() {}
private void method03() {}
//생성자
public A() {
this.var1=1;
this.var2=2;
this.var3=3; //private
this.method01();
this.method02();
this.method03();
}
}
package day07.modi.member.pac1;
public class B {
//A의 기능
public B() {
A a = new A();
a.var1=1;
a.var2=2;
//a.var3=3;//no-private
a.method01();
a.method02();
//a.method03();//no-private
}
}
package day07.modi.member.pac2;
import day07.modi.member.pac1.A;
public class C {
public C() {
A a = new A();
a.var1=1;
//a.var2=2;//no-default
//a.var3=3;//no-private
a.method01();
//a.method02();//no-default
//a.method03();//no-private
}
}
A와 B는 같은 패키지에, C는 다른 패키지에 생성되어 있다. 따라서 멤버변수는 default일 경우 A와 B에서 모두 사용가능하지만, C에서는 사용이 불가능하다. 또한 private 멤버변수는 A에서만 사용이 가능하다.
protected
package day07.modi.protec.pac1;
public class A {
/*
* protected는 기본적으로 같은 패키지에서만 사용할 수 있습니다.(default 동일)
* 단, 패키지가 다르더라도 상속관계에서 super를 통한 접근은 가능함
*/
protected String s;
protected A() {
}
protected void method01() {
}
}
package day07.modi.protec.pac1;
public class B {
//생성자
public B() {
A a = new A();
a.s="홍길동";//동일 패키지 접근가능
a.method01();
}
}
protected 다른 클래스
package day07.modi.protec.pac2;
import day07.modi.protec.pac1.A;
public class C extends A{
public C() {
// A a= new A();
// a.s="홍길동";
// a.method01();
//패키지가 다르더라도, super키워드를 통한 접근은 가능
super();
super.s = "홍길동";
super.method01();
}
}
접근제한자가 protected일 경우 default와 동일하나, super키워드를 사용한다면 다른 패키지에서도 사용이 가능하다.
때문에 우선 상속을 받은 후 super()를 통해 같은 생성자를 호출하고, super.을 이용해 protected 유형 접근제한의 멤버변수와 메서드를 상속받은 자식 클래스에서 사용할 수 있다.
'JAVA' 카테고리의 다른 글
221011 생성자와 getter setter 단축키 (0) | 2022.10.11 |
---|---|
221011 은닉-getter와 setter (0) | 2022.10.11 |
221011 super 실습 (0) | 2022.10.11 |
221011 super (0) | 2022.10.11 |
221007 this (0) | 2022.10.07 |