Java/자바 정리
122. 제네릭 객체도 비교할 수 있다 – 같은 타입끼리의 compare() 메서드
코딩하는냥이
2025. 5. 15. 11:29
반응형
이번 글에서는 제네릭 클래스를 활용한 타입 안전한 비교 메서드 구현 방법을 배울겁니다.
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> 구조처럼 동일한 타입끼리만 비교하도록 만들면,
코드 재사용성과 안정성을 동시에 확보할 수 있는 깔끔한 설계가 가능해집니다.