본문 바로가기

반응형

이번 글에서는 클래스 내부 필드와 메서드에 적용된
접근 제한자(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를 통해 우회 접근함
댓글