glenn-syj / more-effective-java

이펙티브 자바를 읽으며 자바를 더 효율적으로 공부합니다
4 stars 5 forks source link

[MEJ-005] 도우미 클래스 예제 코드에 대한 질문 #115

Closed undeadtimo closed 5 months ago

undeadtimo commented 6 months ago

based on : #101 by @ssh2957


ssh2957님께서 정적 멤버 클래스에 대하여 작성한 글, 잘 읽었습니다.

'도우미 클래스' 라는 개념에 대한 이해가 저 또한 쉽지 않았지만, 해당 ssh2957님의 글을 통해 '도우미 클래스'에 대해 이해할 수 있게 되었습니다.

도우미 클래스란 하나의 클래스 내부에 구현된 또 다른 클래스의 형태로서, 바깥 클래스를 보조하기 위한 기능들을 모아놓거나 캡슐화를 위해 정보 은닉을 하는 역할을 갖고 있음을 알게 되었습니다.

다만, 저는 해당 글을 이해하기 위해 ssh2957님께서 같이 첨부해주신 예제 코드를 따라치면서 글을 읽었으나, '1. 정적 멤버 클래스란?' 부분의 예제 코드가 저의 IDE 환경에서 잘 실행되지 않아, 의문을 남기게 되었습니다.

//private으로 선언시 바깥 클래스에서만 접근 가능하다
public class test {

    public static void main(String[] args) {
        InnerClass a= new InnerClass();
        //InnerClass cannot be resolved to a type 오류뜸 
    }

}

먼저 이 부분에 대해서, InnerClass 라는 클래스명은 존재하지 않고, InnerClass_public과 InnerClass_private 라는 도우미 클래스들이 존재하기 때문에 두 클래스 중 하나를 지칭하려 한 것 같습니다.

또한 주석 내용에 따르면 private으로 접근제한을 지정한 InnerClass_private을 호출하려 했다고 짐작하였습니다.

그리고 아래 다른 코드에 대해서 또한,

// public 으로 선언시 다른 클래스에서 접근 가능 
import item24.OuterClass.InnerClass_public;

public class test {

    public static void main(String[] args) {    
        InnerClass_public b= new InnerClass_public();
        b.test();
    }

}

코드로 따라치며 실행해보려했지만 작동하지 않았습니다.

해당 코드를 직접 실행해보고, 조금씩 바꾸어보아야 완전히 제 지식으로 흡수할 것 같아서, 해당 코드들이 정상적으로 실행되기 위한 다른 준비사항들이 있는 것인지 궁금증이 생겼습니다.

혹시 위 예제 코드에 대한 저의 생각이 맞는지 그리고, 준비해야할 다른 코드가 있는지 알려주시면 감사하겠습니다.

ssh2957 commented 6 months ago

우선 예제의 코드가 바르지 못했던 거에 사죄드립니다. Innerclass를 private로 생성 후 안 되는 것을 실험한 후에 private 와 public으로 각각 생성한 후 다시 한번 실험하는 과정에서 코드 수정이 있었고 각각 테스트하며 글을 작성하였기 때문에 실수가 있던 거 같습니다. 본문 내용은 바로 수정하였습니다. 말씀하신 오류에 대해서는 Inner 클래스라고 해도 public으로 선언되고 import item 24.OuterClass.InnerClass_public;식으로 import 되었기 때문에 다른 설정 없이 오류 없이 실행되어야실행이 되어야 합니다…. 혹시 몰라 다시 코드를 실행해 보았는데 잘되는 것으로 보아 오류 메시지를 공유해 주시면 이유를 찾아보겠습니다.

undeadtimo commented 6 months ago

코드를 따라해보면서 발생했던 오류는 ssh2957님께서 알려주신대로 InnerClass_public과 InnerClass_private을 각각 수정하니 해결할 수 있었습니다.

InnerClass_public과 InnerClass_private에 대해 생각하지 못하고 또 다른 오류 원인 혹은 제가 파악하지 못한 다른 과정이 있는 것으로 생각해버렸네요.

섣부른 판단을 사과드리며, 제 질문에 대한 답변으로 코드를 재확인 해주셔서 감사드립니다.

ssh2957 commented 6 months ago

아닙니다! 저도 창용님의 질문 덕분에 코드를 한번더 꼼꼼히 살펴볼수 있었습니다! 언제든지 조금이라도 이상한 점 있다면 질문주세요!!