private으로 선언된 클래스 내부의 public static 변수 접근

조회수 8324회
private class Example {
    public static final PI = 3.14;

    ...

}

위와 같은 코드 구성이 있다면, PI는 외부에서 접근이 가능한가요? 클래서는 private으로 외부로부터의 접근을 제한하는데, PI는 외부의 접근을 허용하니, 이 상황에선 어떤 접근권한이 우위를 갖는지, 아니면 static이기 때문에 예외를 갖는지 모르겠습니다.

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    최상위 클래스 선언에서는 private 는 사용할 수 없습니다.

    생각해보면 당연한것으로 접근하지도 못하는 클래스를 만들이유가 없습니다. 그렇다면 private(protected) class 선언등은 언제 사용하는가?

    바로 Inner class 를 만들때 사용합니다. 해당 Inner class의 접근제한을 할 수 있습니다.

    예제를 분석해보세요.

    package yhjung;
    
    public class MyClass {
        private class InnerMyClass {    // InnerClass 는 private 이므로 MyClass에서만 사용가능
            public InnerMyClass() {
                System.out.println(this.getClass().getName());
            }
            public String getName(){
                return this.getClass().getName();
            }
        }
    
        public class InnerMyClassForPublic {    // public 이므로 외부에서 접근가능
            public InnerMyClassForPublic() {
                System.out.println(this.getClass().getName());
            }
            public String getName(){
                return this.getClass().getName();
            }
        }
    
        public void showInnerClassName() {
            InnerMyClass ic = new InnerMyClass();
            String icName = ic.getName();
            System.out.println(icName);
        }
    }
    
    
    package yhjung;
    public class Main {
        public static void main(String[] args) {
            MyClass mc = new MyClass();
            mc.showInnerClassName();
    
            MyClass.InnerMyClassForPublic mc2 = mc.new InnerMyClassForPublic();
            System.out.println(mc2.getName());
        }
    }
    
    
    yhjung.MyClass$InnerMyClass
    yhjung.MyClass$InnerMyClass
    yhjung.MyClass$InnerMyClassForPublic
    yhjung.MyClass$InnerMyClassForPublic
    
    • 그렇다면 private으로 선언된 Inner Class 내에 질문처럼 static 변수가 있다면 이때도 답변해주신 코드처럼 Access 메소드를 통해 접근하면 되는건가요? 정성원 2018.8.12 10:59
    • 네 그런식으로 접근할 수 있습니다. 정영훈 2018.8.12 18:21

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)