안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요,
김상형씨 책을 보면서 공부하고 있습니다.
예제 코드 중에 이런 부분이 있네요.
위 코드에서 Class<?> 코드가 궁금합니다. 이게 Generics와 관련이 있는 건 대충 알거 같은데,
혹시 Class<?>하고 Class<? extends Object>하고 같은건가요?
그리고 아래 배열문에 보면 mm_MPTest, mm_PlayAudio는 모두 Activity에서 상속되어 만들어진 클래스인데요,
mm_MPTest.class 라고 쓰는 것도 잘 이해가 안되네요. 이러면 해당 클래스를 반환하는 건가요? 클래스의 레퍼런스 같은건가요? +_+
미리 감사드립니다. m(__)m
김상형씨 책을 보면서 공부하고 있습니다.
예제 코드 중에 이런 부분이 있네요.
public class MultiMedia extends Activity { class Example { Example(Class<?> acls, String aTitle) { cls = acls; Title = cls.getSimpleName() + " : " + aTitle; } String Title; Class<?> cls; } Example[] arExample = { new Example(mm_MPTest.class, "MediaPlayer의 간단한 사용법 연구"), new Example(mm_PlayAudio.class, "MP3 음악 재생기"), // ... };
위 코드에서 Class<?> 코드가 궁금합니다. 이게 Generics와 관련이 있는 건 대충 알거 같은데,
혹시 Class<?>하고 Class<? extends Object>하고 같은건가요?
그리고 아래 배열문에 보면 mm_MPTest, mm_PlayAudio는 모두 Activity에서 상속되어 만들어진 클래스인데요,
mm_MPTest.class 라고 쓰는 것도 잘 이해가 안되네요. 이러면 해당 클래스를 반환하는 건가요? 클래스의 레퍼런스 같은건가요? +_+
미리 감사드립니다. m(__)m
2010.10.28 13:58:11
java.lang.Class 클래스 자바독을 한번 보시면 좋을 듯 싶구요.
Class가 generic argument를 하나 받기 때문에 Class라는 클래스를 오브젝트로 쓰기 위해서는 반드시 제네릭의 타잎이 지정되어야 합니다. 그냥 쌩으로 Class aclz라고 쓰면 컴파일러에서 제네릭 타잎 안적었다고 워닝을 뱉어내기 때문에 Class<?>라고 해서 "제네릭이긴 한데 그게 뭔지는 모르겠고 신경도 안쓸래"라고 선언을 해주고 쓰는 겁니다. 그리고 모든 클래스는 java.lang.Ojbect를 상속받기 때문에 말씀하신 것 처럼 Class<?>와 Class<? extends Object>는 동일합니다.
그리고 어떤 클래스(MyClass)가 있을 때 MyClass.class라고 하면 해당 클래스의 Class Ojbect를 레퍼런스하게 됩니다.
2010.10.28 15:06:34
아.. java.lang.Class 라는 클래스가 있군요. 지금 대충 읽어봤는데, 클래스 정보에 접근할 수 있는 유용한 클래스군요.
인스턴스가 있을 때에는 getClass() 함수를 사용하고,
MyClass mc = new MyClass();
Class c1 = mc.getClass();
클래스 이름에서 직접 사용하려면 .class 를 사용하는 것도 알았습니다.
Class c2 = MyClass.class;
Class<?>을 사용하지 않고, Class만 사용하니까 이클립스에서 워닝을 나타내는 것도 확인했습니다. ^^
감사합니다~
인스턴스가 있을 때에는 getClass() 함수를 사용하고,
MyClass mc = new MyClass();
Class c1 = mc.getClass();
클래스 이름에서 직접 사용하려면 .class 를 사용하는 것도 알았습니다.
Class c2 = MyClass.class;
Class<?>을 사용하지 않고, Class만 사용하니까 이클립스에서 워닝을 나타내는 것도 확인했습니다. ^^
감사합니다~
리플렉션(reflection)을 검색해보세요...