[Java] 접근 제어자 사용 - 필드, 메서드

코드 속의 "진돌"·2024년 2월 13일
0
post-thumbnail

✅ 필드, 메서드 레벨의 접근 제어자


✏️ AccessData

package access.a;

public class AccessData {

  public int publicField;
  int defaultField;
  private int privateField;

  public void publicMethod() {
    System.out.println("publicMethod 호출 " + publicField);
  }

  void defaultMethod() {
    System.out.println("defaultMethod 호출 " + defaultField);
  }

  private void privateMethod() {
    System.out.println("privateMethod 호출 " + privateField);
  }

  public void innerAccess() {
    System.out.println("내부 호출");
    publicField = 100;
    defaultField = 200;
    privateField = 300;
    publicMethod();
    defaultMethod();
    privateMethod();
  }
}
  • 패키지 위치는 package access.a이다. 패키지 위치를 꼭 맞추어야 한다.
  • 순서대로 public, default, private을 필드와 메서드에 사용했다.
  • 마지막에 innerAccess()가 있는데, 이 메서드는 내부 호출을 보여준다. 내부 호출은 자기 자신에게 접근하는 것이다. 따라서 private을 포함한 모든 곳에 접근할 수 있다.



✏️ AccessInnerMain

package access.a;

public class AccessInnerMain {

  public static void main(String[] args) {
    AccessData data = new AccessData();

    // public 호출 가능
    data.publicField = 1;
    data.publicMethod();

    // 같은 패키지 default 호출 가능
    data.defaultField = 2;
    data.defaultMethod();

    // private 호출 불가
    // data.privateField = 3;
    // data.privateMethod();

    data.innerAccess();
  }
}
  • 패키지 위치는 package access.a이다. 패키지 위치를 꼭 맞추어야 한다.
  • public은 모든 접근을 허용하기 때문에 필드, 메서드 모두 접근 가능하다.
  • default는 같은 패키지에서 접근할 수 있다. AccessInnerMainAccessData와 같은 패키지이다. 따라서 default 접근 제어자에 접근할 수 있다.
  • privateAccessData 내부에서만 접근할 수 있다. 따라서 호출 불가다.
  • AccessData.innerAccess() 메서드는 public이다. 따라서 외부에서 호출할 수 있다.
    innerAccess() 메서드는 외부에서 호출되었지만 innerAccess() 메서드는 AccessData에 포함되어 있다. 이 메서드는 자신의 private 필드와 메서드에 모두 접근할 수 있다.



🖥️ 실행 결과



✏️ AccessOuterMain

package access.b;

import access.a.AccessData;

public class AccessOuterMain {

  public static void main(String[] args) {
    AccessData data = new AccessData();

    // public 호출 가능
    data.publicField = 1;
    data.publicMethod();

    // 다른 패키지 default 호출 불가
    // data.defaultField = 2;
    // data.defaultMethod();

    // private 호출 불가
    // data.privateField = 3;
    // data.privateMethod();

    data.innerAccess();
  }
}
  • 패키지 위치는 package access.b이다. 패키지 위치를 꼭 맞추어야 한다.
  • public은 모든 접근을 허용하기 때문에 필드, 메서드 모두 접근할 수 있다.
  • default같은 패키지에서 접근할 수 있다. access.b.AccessOuterMainaccess.a.AccessData와 다른 패키지이다. 따라서 default 접근 제어자에 접근할 수 없다.
  • privateAccessData 내부에서만 접근할 수 있다. 따라서 호출 불가이다.
  • AccessData.innerAccess() 메서드는 public이다. 따라서 외부에서 호출할 수 있다.
    innerAccess() 메서드는 외부에서 호출되었지만 해당 메서드 안에서는 자신의 private 필드와 메서드에 접근할 수 있다.



🖥️ 실행 결과



💡 참고 : 생성자도 접근 제어자 관점에서 메서드와 같다.

profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글