Whiteship's Note

Generic 팩토리 메소드

Java : 2008.09.25 08:53


참조: http://www.ibm.com/developerworks/kr/library/j-jtp04298.html

흠.. 제네렉 타입을 사용한 객체를 생성할 때 유용할 것 같습니다.

Box<String> box = new BoxImpl<String>();

보통 제네릭 타입을 사용한 객체를 생성할 때 저렇게 String이라는 타입을 두 번이나 입력해야 하는데..

public class BoxImpl<T> implements Box<T> {

    public static<V> Box<V> make() {
        return new BoxImpl<V>();
    }

    ...
}

이렇게 make라는 팩토리 메소드를 만들어 두면..

Box<String> myBox = BoxImpl.make();

이렇게 타입을 한 번만 지정해도 되는군요. 오호~ 괜찮군요. 근데 굳이 V 라고 안하고 그냥 T 계속 써도 될텐데, 굳이 구분할 필요가 있었나..흠. 어차피 같은 타입 지칭하는건데..

V대신 T를 써도 무방하긴 하지만, 이 예제는 왠지 컴파일러가 제네릭 타입을 선택하는 과정을 보여주기 위해, V를 둔것 같습니다.
top

  1. Favicon of http://toby.epril.com BlogIcon '토비 2008.09.25 14:22 PERM. MOD/DEL REPLY

    이건 전에 보라고 한 Effective Java 2의 젤 앞에 나오는 얘긴데, 안읽었군!
    그리고 T와 V는 전혀 다른거라네.

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2008.09.25 15:36 PERM MOD/DEL

    읽었던것 같은데 기억이 가물가물 하네요.@.@

    흠..T랑 V랑 다른 거군요. V는 메소드에다 주는 타입이고 T는 클래스에다 주는 타입이라 그런가요?

    Box<String> myBox = BoxImpl.<String>make();

    이때 왼쪽 String은 T 타입이 되고 오른쪽 String은 V타입이 되는거죠? 흠..그럼

    Box<String> myBox = BoxImpl.make();

    이 녀석은 V 타입에 String을 직접 넣어준게 아니라. Box<String> 타입의 리턴타입이 필요한걸 보고 컴파일러가 판단을 한거로군요. V 타입은 String이라고..

    아항.. 다른거로군요. 캬.. 감사합니다. :)

Write a comment.




: 1 : ··· : 806 : 807 : 808 : 809 : 810 : 811 : 812 : 813 : 814 : ··· : 2638 :