인프런 커뮤니티 질문&답변

나가을님의 프로필 이미지
나가을

작성한 질문수

김영한의 실전 자바 - 중급 2편

직접 구현하는 Set4 - 제네릭과 인터페이스 도입

직접구현하는 SET4 제네릭과 인터페이스 도입

작성

·

240

1

왜 hashIndex에서 Object 로 매개변수를 받나요?제네릭인 E로 받는게 타입안정성측면에서 좋지않나요??

답변 2

3

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 나가을님

생각하신 내용이 맞습니다 🙂

다만 이런 부분은 어느정도 트레이드 오프가 있는데요. 이 메서드는 어떤 객체가 전달 되든지 int 값을 정상 반환할 수 있기 때문에, 유연성 측면에서 Object를 받는 것이 더 나은 선택일 수 있습니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

해당 질문에 대한 답변은 제네릭 타입 EhashIndex 메소드의 매개변수를 받는 것이 타입 안정성 측면에서 더 바람직하다고 말씀드릴 수 있습니다. 일반적으로 제네릭을 사용하는 이유 중 하나는 컴파일 시간에 타입 체크를 통해 타입 안정성을 확보하기 위함입니다. 따라서, hashIndex 메소드에서도 제네릭 타입 E를 매개변수로 사용함으로써 해당 클래스가 다루고 있는 특정 타입의 객체에 대해서만 작업을 수행하도록 하는 것이 좋습니다. 이 방법을 통해 런타임에 발생할 수 있는 ClassCastException을 예방할 수 있습니다.

그러나 Object 타입으로 매개변수를 받고 있는 이유는, 해당 메소드가 hashCode() 메소드를 사용하여 객체의 해시코드를 계산하는 로직을 포함하고 있어서, 모든 객체에 대해 유연성을 보장하려는 의도일 수도 있습니다. Java에서 모든 클래스는 Object 클래스를 상속받기 때문에, Object 클래스의 메소드인 hashCode()는 모든 객체에 대해 호출 가능합니다. 그렇기 때문에 hashIndex 메소드에서 Object를 매개변수로 받는 것은 그 메소드가 어떤 타입의 객체라도 처리할 수 있도록 유연성을 제공하는 것일 수 있습니다.

하지만 이 경우, MyHashSetV3 클래스가 특정 타입의 객체만을 다루는 제네릭 클래스라면, hashIndex 메소드의 매개변수도 이와 일관되게 제네릭 타입 E를 사용하는 것이 타입 안정성을 보장하고 클래스의 명확성을 높이는 데 도움이 됩니다. 따라서, 제네릭 클래스 내에서는 가능한 한 제네릭 타입을 일관되게 사용하는 것이 좋습니다.

나가을님의 프로필 이미지
나가을

작성한 질문수

질문하기