반응형
이번 글에서는 클래스 내부 필드와 메서드에 적용된
접근 제한자(public, default, private)가
같은 패키지 또는 다른 패키지에서 접근할 때
어떤 영향을 미치는지 실습을 통해 확인합니다.
📦 클래스 코드 (A.java)
package ch06.sec13.exam03.package1;
public class A {
public int field1;
int field2;
private int field3;
public A() {
field1 = 1;
field2 = 1;
field3 = 1;
method1();
method2();
method3();
}
public void method1() {
}
void method2() {
}
private void method3() {
}
}
📦 클래스 코드 (B.java)
package ch06.sec13.exam03.package1;
public class B {
public void method() {
A a = new A();
a.field1 = 1; // (O) public
a.field2 = 1; // (O) default - 같은 패키지라서 가능
a.field3 = 1; // (X) private - 접근 불가
a.method1(); // (O) public
a.method2(); // (O) default - 같은 패키지라서 가능
a.method3(); // (X) private - 접근 불가
}
}
📦 클래스 코드 (C.java)
package ch06.sec13.exam03.package2;
import ch06.sec13.exam03.package1.A;
public class C {
public C() {
A a = new A();
a.field1 = 1; // (O) public
a.field2 = 1; // (X) default - 다른 패키지라서 접근 불가
a.field3 = 1; // (X) private - 접근 불가
a.method1(); // (O) public
a.method2(); // (X) default - 다른 패키지라서 접근 불가
a.method3(); // (X) private - 접근 불가
}
}
💬 코드 설명
- public
→ 어디서든 접근 가능 (같은 패키지 + 다른 패키지 모두) - default (아무 키워드 없음)
→ 같은 패키지 안에서는 접근 가능, 다른 패키지에서는 접근 불가 - private
→ 클래스 내부에서만 접근 가능. 다른 클래스에서는 절대 접근 불가
📌 간단 정리
접근 제한자 | 같은 패키지 | 다른 패키지 | 같은 클래스 내부 |
public | O | O | O |
default (생략) | O | X | O |
private | X | X | O |
💻 실행 결과
- B 클래스에서는 field1, field2, method1(), method2() 사용 가능
→ field3, method3() 사용 불가 (private 때문) - C 클래스에서는 field1, method1()만 사용 가능
→ field2, field3, method2(), method3() 모두 접근 불가
💡 포인트 정리
- public은 모두에게 공개
- default는 같은 패키지끼리만 공개
- private은 자기 클래스 내부에서만 사용 가능
- 다른 패키지에서 접근하려면 반드시 public이어야 함
- private 필드는 외부에서 직접 수정하거나 읽을 수 없기 때문에 getter/setter를 통해 우회 접근함
'프로그래밍 > JAVA' 카테고리의 다른 글
56. super(...)를 통한 부모 생성자 호출 (0) | 2025.05.02 |
---|---|
55. 클래스 상속(Inheritance) - 부모 기능을 자식 클래스에서 확장 (0) | 2025.05.02 |
54. Getter/Setter를 이용한 캡슐화 (Encapsulation) (0) | 2025.04.29 |
52. 패키지와 import 사용하기 (0) | 2025.04.29 |
51. static final로 상수(Constant) 정의하기 (0) | 2025.04.29 |
50. final 필드 - 수정 불가능한 데이터 만들기 (0) | 2025.04.29 |