inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

338

나가을

작성한 질문수 6

2

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

java 객체지향 코딩-테스트 알고리즘

답변 2

4

김영한

안녕하세요. 나가을님

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

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

감사합니다.

0

인프런 AI 인턴

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

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

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

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

제네릭 타입 매개변수 제한과 관련한 문의입니다.

0

80

3

강의가 좀 버겁다 느껴질 때 학습방법 문의

1

135

4

제네릭 반환값 및 파라미터 선언 방식의 변화 <T> T

0

63

1

new T()가 안 되는 니유

0

102

1

안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.

0

98

2

자바 로드맵 선택 질문

0

111

2

실전 자바 중급 - 2편 후 추천 강의

0

177

2

실프로젝트에서 Java25버전 사용

0

121

1

Arrays.sort

0

68

1

블로그 작성 시, 저작권 문제에 대하여

0

166

1

중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.

0

94

3

pop()과 poll()의 차이

0

94

1

특정 index의 노드 조회하기 질문

0

66

2

List.of() 비어있는 불변 리스트 생성

0

81

2

문제2: 개 타입 반환

0

56

2

[리뷰] 중급2편까지 겨우 완강 했습니다.

0

114

2

문제와 풀이1 Ex2와 Ex3

0

65

2

노드 삭제시 노드 null값으로 초기화

0

78

2

강의영상에 대한 질문

0

57

1

타입 매개변수 제한

0

59

1

compareTo

0

68

1

직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다

0

99

3

섹션 8-58 equals and hashcode 에서 코드가 다르게 생성됨

0

70

2

퀴즈 오류 관련 문의

0

109

1