본문 바로가기

반응형

이번 글에서는 제네릭 클래스를 활용한 타입 안전한 비교 메서드 구현 방법을 배울겁니다.
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> 구조처럼 동일한 타입끼리만 비교하도록 만들면,
코드 재사용성과 안정성을 동시에 확보할 수 있는 깔끔한 설계가 가능해집니다.

댓글