다형성을 통한 중복 해결시도

SungMin·2026년 6월 5일

자바 심화 정리

목록 보기
29/34

Object는 모든 클래스의 부모이므로 모든 타입의 객체를 저장할 수 있다.
따라서 다형성을 참조하면 이전에 다룬 문제를 해결할 수 있을 것이다.

package generic.ex1;
public class ObjectBox {
  private Object value;
  public void set(Object object) {
  this.value = object;
 }
  public Object get() {
  return value;
 }
}

ObjectBox는 내부에 Object 타입의 value 필드를 가지고 있다.
따라서 Integer, String 등 모든 객체를 저장할 수 있다.
Object는 자식을 담을 수 있으므로 모든타입의 objectBOX를 담을 수 있다.

package generic.ex1;
public class BoxMain2 {
 	public static void main(String[] args) {
 	ObjectBox integerBox = new ObjectBox();
 	integerBox.set(10);
 	Integer integer = (Integer) integerBox.get(); //Object -> Integer 캐스팅
 	System.out.println("integer = " + integer);
 	ObjectBox stringBox = new ObjectBox();
 	stringBox.set("hello");
 	String str = (String) stringBox.get(); //Object -> String 캐스팅
 	System.out.println("str = " + str);
 	//잘못된 타입의 인수 전달시
 	integerBox.set("문자100");
 	Integer result = (Integer) integerBox.get(); // String -> Integer 캐스팅
예외
 	System.out.println("result = " + result);
 }
}

현재 integerBox를 만들었다.
숫자를 입력하는 부분에는 문제가 없어 보이지만, integerBOX.get()을 호출할 때 문제가 생긴다.
integerBOX.get()은 Object 타입이기 때문이다.

Integer integer = (Integer) integerBox.get();

따라서, 다운캐스팅이 필수적이다.

stringBox도 위와 마찬가지다.


다형성을 활용한 덕분에 코드의 중복을 제거하고, 기존코드를 재사용할 수 있게 되었다.
다만, 입력할 때는실수로 원하지 않는 타입이 들어갈 수 있는 타입 안전성 문제가 발생한다.
결과적으로 이 방식은 타입 안전성이 떨어진다.

지금까지 개발한 프로그램은 코드 재사용과 타입 안전성이라는 2마리 토끼를 한번에 잡을 수 없다. 코드 재사용을 늘리
기 위해 Object 와 다형성을 사용하면 타입 안전성이 떨어지는 문제가 발생한다.


[정리]

  • Object는 모든 객체를 저장할 수 있으므로 코드 재사용성을 높일 수 있다.
  • 하지만 get()의 반환 타입이 Object이기 때문에 다운캐스팅이 필요하다.
  • 잘못된 타입의 객체가 저장될 수 있어 런타임에 ClassCastException이 발생할 수 있다.
  • 즉, Object를 활용하면 코드 재사용성은 얻을 수 있지만 타입 안전성이 떨어진다.
  • 이러한 문제를 해결하기 위해 제네릭(Generic)이 등장했다.
profile
오늘도 한 걸음씩 나아가

0개의 댓글