728x90
접근 제한자 종류
1) public : 외부 클래스가 자유롭게 사용할 수 있다.
package practice.ex1;
public class PublicEx {
public int a = 10;
}
package practice.ex1; // 같은 패키지
public class Test {
public static void main(String[] args) {
PublicEx publicEx = new PublicEx();
System.out.println(publicEx.a); // 출력 가능
}
}
package practice.ex2; // 다른 패키지
import practice.ex1.PublicEx;
public class Test {
public static void main(String[] args) {
PublicEx publicEx = new PublicEx();
System.out.println(publicEx.a); // 출력 가능
}
}
2) protected : 같은 패키지 또는 자식 클래스에서 사용할 수 있다.
package practice.ex1;
public class ProtectedEx {
protected int a = 10;
}
package practice.ex1; // 같은 패키지
public class Test {
public static void main(String[] args) {
ProtectedEx protectedEx = new ProtectedEx();
System.out.println(protectedEx.a); // 출력 가능
}
}
package practice.ex2; // 다른 패키지
import practice.ex1.ProtectedEx;
public class Test {
public static void main(String[] args) {
ProtectedEx protectedEx = new ProtectedEx();
System.out.println(protectedEx.a); // 출력 불가능
}
}
package practice.ex1;
// 상속 관계
public class PublicExtendsTest extends PublicEx{
public static void main(String[] args) {
PublicEx publicEx = new PublicEx();
System.out.println(publicEx.a); // 출력 가능
}
}
3) default : 같은 패키지에 소속된 클래스에서만 사용할 수 있다.
package practice.ex1;
public class DefaultEx {
int a = 10;
}
package practice.ex1; // 같은 패키지
public class Test {
public static void main(String[] args) {
DefaultEx defaultEx = new DefaultEx();
System.out.println(defaultEx.a); // 출력 가능
}
}
package practice.ex2; // 다른 패키지
import practice.ex1.DefaultEx;
public class Test {
public static void main(String[] args) {
DefaultEx defaultEx = new DefaultEx();
System.out.println(defaultEx.a); // 출력 불가능
}
}
4) private : 외부에서 사용될 수 없다.
package practice.ex1;
public class PrivateEx {
private int a = 10;
}
package practice.ex1; // 같은 패키지
public class Test {
public static void main(String[] args) {
PrivateEx privateEx = new PrivateEx();
System.out.println(privateEx.a); // 출력 불가능
}
}
package practice.ex2; // 다른 패키지
import practice.ex1.PrivateEx;
public class Test {
public static void main(String[] args) {
PrivateEx privateEx = new PrivateEx();
System.out.println(privateEx.a); // 출력 불가능
}
}
생성자 접근 제한
기본 생성자의 접근 제한은 클래스의 접근 제한과 동일하다.
만약 클래스가 public 접근 제한자를 가진다면 기본 생성자도 public을 가지는 것을 의미한다.
public : 모든 패키지에서 아무런 제한 없이 생성자를 호출할 수 있다.
protected : 같은 패키지에 속하는 클래스에서 생성자를 호출할 수 있다.
다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스라면 생성자를 호출할 수 있다.
default : 같은 패키지에서만 생성자를 호출할 수 있다.
private : 동일한 패키지이든 다른 패키지이든 상관없이 생성자를 호출할 수 없고,
오로지 생성자 내부에서만 생성자를 호출할 수 있고 객체를 만들 수 있다.
접근 제한자 한 눈에 보기
적용 대상 | 클래스 내부 | 클래스 외부 | |
public | 클래스, 필드, 생성자, 메소드 | 접근 가능 | 접근 가능 |
protected | 필드, 생성자, 메소드 | 접근 가능 | 같은 패키지 or 상속 관계일 때 접근 가능 |
default | 클래스, 필드, 생성자, 메소드 | 접근 가능 | 같은 패키지일 때 접근 가능 |
private | 필드, 생성자, 메소드 | 접근 가능 | 접근 불가능 |
728x90
'국비 지원 > JAVA' 카테고리의 다른 글
MVC란 무엇일까? 또, DAO와 DTO, VO는 무엇일까? (0) | 2023.05.14 |
---|---|
[JAVA] 게터(getter)와 세터(setter) (0) | 2023.05.14 |
[JAVA] 오버로딩과 오버라이딩 (0) | 2023.05.13 |
[JAVA] 인스턴스 멤버, 정적 멤버 - static (0) | 2023.05.13 |
[JAVA] 날짜 클래스(SimpleDateFormat와 Calendar) (0) | 2023.05.07 |