728x90
반응형
접근 제한자
클래스와 인터페이스 및 다른 패키지에서 사용하지 못하도록 접근 제한하여 접근 제한자를 사용한다.
접근 제한자 종류
-
pulbic 접근 제한자: 외부 클래스가 자유롭게 사용할 수 있도록 함
-
protected 접근 제한자: 같은 패키지 또는 자식 클래스에서 사용할 수 있도록함
-
private 접근 제한자: 외부에서 사용할 수 없도록 함
-
default 접근 제한자: 같은 패키지에 소속된 클래스에서만 사용할 수 있도록 함
클래스 접근 제한
같은 패키지 내에서만 사용할 것인지 다른 패키지 내에서도 사용할 수 있도록 할 것인지 결정한다.
//default 접근 제한
class 클래스 { ... }
//pulbic 접근 제한
public class 클래스 { ... }
default 접근 제한
클래스 선언시 public을 생략하면 클래스는 default접근 제한을 가진다.
default 접근제한은 같은 패키지에서 아무런 제한 없이 사용할 수 있지만, 다른 패키지에서는 사용할 수 없다.
public 접근 제한
같은 패키지 뿐만 아니라, 다른 패키지에서도 아무런 제한 없이 사용할 수 있다.
생성자 접근 제한
public clas ClassName{
//publice 접근 제한
public ClassName(...) { ... }
//protected 접근 제한
protected ClassName(...) { ... }
//default 접근 제한
ClassName(...) { ... }
//private 접근 제한
private ClassName(...) { ... }
}
예시1) 생성자 접근 제한
public class A {
//필드
A a1 = new A(true);
A a2 = new A(1);
A a3 = new A("문자열);
//생성자
public A(boolean b) { } //public 접근 제한
A(int b) { } //default 접근 제한
private A(String s) { } //private 접근 제한
}
필드와 메소드의 접근 제한
//필드 선언
[public | protected | private] [static] 타입 필드;
//메소드 선언
[public | protected | private] [static] 리턴 타입 메소드(...) {...};
예시2) 필드와 메소드 접근 제한 1
package sec06.exam05.package1;
public class A {
// 핃드
public int field1; //public 접근 제한자
int field2; //deault 접근 제한자
private int field3; //private 접근 제한자
// 생성자
public A() {
//클래스 내부일 경우 필드와 메소드
// 모두 접근제한자의 영향을 받지 않음
field1 = 1;
field2 = 1;
field3 = 1;
method1();
method2();
method3();
}
public void method1() { } //public 접근 제한자
void method2() { } //deault 접근 제한자
private void method3() { } //private 접근 제한자
}
예시2) 필드와 메소드 접근 제한 2
package sec06.exam05.package1; //A클래스와 패키지 동일
public class B {
public B() {
A a = new A();
a.field1 = 1;
a.field2 = 1;
//private 필드 접근 불가
//a.field3 = 1; //컴파일 에러가 생김
a.method1();
a.method2();
//private 메소드 접근 불가
//a.method3(); //컴파일 에러가 생김
}
}
예시2) 필드와 메소드 접근 제한 3
package sec06.exam05.package2; //패키지가 다름
import sec06.exam05.package1.A;
public class C {
public C() {
A a = new A();
a.field1 = 1;
//default 필드 접근 불가
//a.field2 = 1; //컴파일 에러가 생김
//private 필드 접근 불가
//a.field3 = 1; //컴파일 에러가 생김
a.method1();
//default 메소드 접근 불가
//a.method2(); //컴파일 에러가 생김
//private 메소드 접근 불가
//a.method3(); //컴파일 에러가 생김
}
}
※용어 정리
-
접근 제한자: 클래스와 인터페이스를 다른 패키지에서 사용하지 못하도록 막아야 하는 경우, 객체 생성을 막기위해 생성자를 호출하지 못하게 하거나 필드나 메소드를 사용하지 못하도록 막아야되는 경우에 사용
접근 제한 | 적용 대상 | 접근할 수 없는 클래스 |
public | 클래스,필드,생성자,메소드 | 없음 |
protected | 필드,생성자,메소드 | 자식 클래스가 아닌 다른 패키지에 소속된 클래스 |
default | 클래스,필드,생성자,메소드 | 다른 패키지에 소속된 클래스 |
private | 필드,생성자,메소드 | 모든 외부 클래스 |
본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
728x90
반응형
'Work & Study > JAVA (& 혼공자Java)' 카테고리의 다른 글
자바(Java) - 상속1 (클래스 상속) (0) | 2020.10.26 |
---|---|
자바(Java) - 패키지와 접근 제한자3 (Getter & Setter 메소드) (0) | 2020.10.20 |
자바(Java) - 패키지와 접근 제한자1 (패키지선언 & import문) (0) | 2020.10.19 |
자바(Java) - 인스턴스 멤버와 정적 멤버3 (싱글톤 & final필드, 상수) (0) | 2020.10.16 |
자바(Java) - 인스턴스 멤버와 정적 멤버2 (정적 멤버 & static) (0) | 2020.10.15 |