본문 바로가기

프로그래밍언어/Java

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

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


패키지의 위치에 주의하며 실습해보자.

 

AccessData.java

package access.a;

public class AccessData {

    public int publicField;
    int defaultField;
    private int privateField;

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

    void defauiltMethod() {
        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();
        defauiltMethod();
        privateMethod();
    }
}

 

AccessInnerMain.java

public class AccessInnerMain {
    public static void main(String[] args) {
        AccessData  data = new AccessData();
        //public 호출 가능
        data.publicField = 1;
        data.publicMethod();

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

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

        data.innerAccess();
    }
}

 

=> data.innerAccess() 메서드는 public이다. 따라서 외부에서 호출할 수 있다. 

innerAccess() 메서드 자체는 AccessData에 포함되어 있다. 이 메서드는 자신의 private 필드와 메서드에 모두 접근할 수 있다. 

 

이번엔 패키지 b를 만들어보자.

AccessOuterMain.java

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();

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

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

        data.innerAccess();
    }
}

 

=> private, defauilt는 호출이 안된다. 

 

 

 

* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.