HASHCODE 관련해서 질문이 있습니다.

조회수 1294회

이미지

HASHCODE를 공부하던 중 궁금한 점이 하나 생겨 질문합니다.

위에 코드를 보시면 hashCode()를 오버라이딩 하고 있는데

return hash.hashCode()로 String hash를 int형으로 전환시켜 return 시키는게 가능하더라구요.

어떻게 오버라이딩 하기 전의 hashCode()를 불러올 수 있는건가요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • return hash.hashCode();
    

    이 부분이 궁금하신건가요?

    이 코드는 super의 hashCode를 가져오는게 아닙니다.

    String hash = name + id + job;
    return hash.hashCode();
    

    바로 윗줄에서 생성한 String 타입 인스턴스의 hashCode를 가져오는거죠. 여기서의 오버라이딩은 메서드 이름을 덮어쓰겠다는것 외엔 의미가 없습니다.


    질문하실때 코드는 왠만하면 스크린샷 말고 텍스트로 작성해주세요. 코드블럭 사용도 잊지 마시구요.

    • 답변 감사합니다. 제가 질문하는 게 이번이 처음이라 잘몰랐습니다. 죄송합니다. 알 수 없는 사용자 2017.9.7 16:26
    • 그런데 아직 의문이 남는게, 제가 int hashCode() 메소드를 만들어 Object 클래스의 hashCode()을 오버라이딩 하였는데, 어떻게 Object 클래스의 hashCode()를 사용할 수 있는건지요? 이 점을 아직도 모르겠네요. 알 수 없는 사용자 2017.9.7 16:34
    • hash.hashCode()에서 hashCode()는 쓰니분이 오버라이딩 하겠다 선언한 메서드가 아니라 String 클래스에 선언된 메서드입니다. 누가 소유한 메서드인지 헷갈리시는것 같은데요. String은 객체 타입이며 접근연산자 온점(.)은 피연산자가 소유한 자산에 접근하는 연산자라는걸 생각해보세요. 편집요청빌런 2017.9.7 16:50
    • 아 그렇군요. 설명 감사합니다. 덕분에 이해할 수 있었습니다. 알 수 없는 사용자 2017.9.7 18:04
    • String 클래스의 선언된 메소드를 생각못하고 있었네요. 정말 감사합니다. 알 수 없는 사용자 2017.9.7 18:07
  • 오버라이딩 하기 전의 hashCode()라 함은, 부모클래스의 메소드, hashCode를 말씀하시는건가요? 부모클래스의 메소드는

    super.메소드명(this)
    

    와 같이 호출할 수 있습니다. 이 경우에는 super.hashCode(this)겠네요.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 답변 감사합니다. 그런데 제가 궁금했던 점은 super 을 사용하지 않고 위에 코드와 마찬가지로 hash.hashCode()를 써도 부모 클래스의 메소드가 사용이 되더라고요. 그 부분이 궁금해서 질문을 남겼습니다. 알 수 없는 사용자 2017.9.7 11:09

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

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

(ಠ_ಠ)
(ಠ‿ಠ)