천발무금
976
2017-06-08 10:50:17
2
447

자바 문법 문의!


안녕하세요! 열심히 자바 공부하고 있는 초급 개발자입니다!


회사 코드를 보다가 이해가 안가는 부분이 있어서 이렇게 여쭤보려고 글 올립니다!!


회사 코드에서 예를들어 a라는 클래스가 있고, 아래와 같은 코드가 작성되어 있습니다.

a.class.getName()

그래서 getName()에서 뭘 가져오는지 확인하기 위해서 추적해보니 Class.class 로 이동되고 아래와 같은 코드가 있더군요



public String getName() {

        String name = this.name;

        if (name == null)

            this.name = name = getName0();

        return name;

    }


    // cache the name to reduce the number of calls into the VM

    private transient String name;

    private native String getName0();



음..여기서 궁금한 점은 2가지입니다! ㅎㅎ


1. a.class.getName() 해당 코드를 생각하면.. a클래스의 정보를 담은 Class instance의 getName()메서드를 호출한다..라고 생각되는데 제 생각이 맞는지 궁금합니다 ㅎㅎ


2. a.class.getName() 해당 코드 추적시 나오는 Class.class 의 코드를 이해못하겠는데 ㅠ.ㅠ 해당 메서드에서는 도대체 무슨 값을 리턴해주는 건가요?

this.name = name = getName0(); 이렇게 0000 = 0000 = 0000 같은 것도 처음봤네요..ㅠ.ㅠ


답변 달아주실 선배님들께  미리 감사의 인사 드립니다! ㅎㅎ

0
  • 답변 2

  • Chaed
    2k
    2017-06-08 10:55:59

    자바의 리플렉션을 따로 살펴보세요.

    getName 레퍼런스 검색하면 그 기능이 바로 나옵니다. 말그대로 아마 클래스 이름이려나요?


    this.name = name = getName0();

    이거는 지역변수의 name과 멤버변수 name 각각에 호출된getName()의 값이 입력되는겁니다.

    오른쪽부터 순차적으로 입력되죠.




  • 천발무금
    976
    2017-06-08 11:04:17

    PuppyRush 님 답변 감사드립니다!

    리플렉션을 찾아보니 뭔가 이거다! 라는 느낌이 드네요 ㅎㅎ 확인해보겠습니다~ ㅎㅎ



    아하 000 = 000 = 000 가 이런 뜻이었군요 ㅎㅎ

    음.... 호출된 getName0() 의 경우

    private native String getName0();

    이렇게 선언되어 있는데, 어떻게 구현되어 있는지 확인해봐야겠네요 ㅎㅎ 감사합니다 ㅎㅎ

  • 로그인을 하시면 답변을 등록할 수 있습니다.