반응형
이번 글에서는 제네릭 클래스를 활용한 타입 안전한 비교 메서드 구현 방법을 배울겁니다.
Box<T> 클래스는 T 타입의 데이터를 담고 있으며,
같은 타입의 Box<T> 객체와 내용이 같은지를 비교하는 compare() 메서드를 제공합니다.
📌 예제 코드
package ch13.sec02;
public class Box<T> {
public T content;
public boolean compare(Box<T> other) {
boolean result = content.equals(other.content); // 내용 비교
return result;
}
}
package ch13.sec02;
public class GenericExample4 {
public static void main(String[] args) {
Box<String> box1 = new Box<>();
Box<String> box2 = new Box<>();
box1.content = "100";
box2.content = "100";
boolean re = box1.compare(box2);
System.out.println("re1 : " + re);
}
}
💻 실행 결과
re1 : true
💬 코드 설명
- Box<T>는 타입 매개변수 T를 갖는 제네릭 클래스이며,
내부에 T 타입의 content 필드를 가지고 있습니다. - compare() 메서드는 Box<T> 타입의 다른 객체를 받아서,
this.content와 other.content를 equals()로 비교합니다. - 제네릭 덕분에 타입이 일치하는 객체끼리만 비교 가능하며,
컴파일러가 타입을 보장해주므로 형변환 없이도 안전한 비교가 가능합니다. - 두 Box<String> 객체 모두 "100"이라는 문자열을 담고 있으므로 결과는 true입니다.
💡 포인트 정리
- 제네릭 클래스 내부에서도 제네릭 타입끼리의 비교가 가능합니다.
- compare(Box<T> other) 구조는 타입이 다른 Box끼리의 비교는 컴파일 단계에서 막아주기 때문에 오류 예방이 됩니다.
- 내부적으로 equals() 메서드를 활용하므로, T 타입은 equals()를 제대로 오버라이딩하고 있어야 정확한 비교가 가능합니다.
📌 정리하자면, 제네릭 클래스를 활용하면 객체 내부의 내용 비교도 타입 안정성을 유지하면서 구현할 수 있습니다.
Box<T> 구조처럼 동일한 타입끼리만 비교하도록 만들면,
코드 재사용성과 안정성을 동시에 확보할 수 있는 깔끔한 설계가 가능해집니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
125. 수강 조건 제한하기 – 와일드카드 ?, extends, super 실습 (0) | 2025.05.15 |
---|---|
124. 숫자만 비교하자! – 제한된 제네릭(T extends Number) (0) | 2025.05.15 |
123. 메서드에도 제네릭을? – 제네릭 메서드 Boxing() (0) | 2025.05.15 |
121. 인터페이스도 제네릭으로! – 타입별로 유연한 구조 만들기 (0) | 2025.05.15 |
120. 타입 두 개도 OK! – 제네릭 멀티 타입 파라미터 (0) | 2025.05.15 |
119. 타입을 자유롭게! – 제네릭 클래스 만들기 (0) | 2025.05.15 |