마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

자바 인터페이스 궁금한점입니다.

0 추천
안녕하세요.

그냥 늘 생각없이 사용하던 부분에서 궁금증을 느껴서 질문하게 되었습니다.

다름이 아니라

인터페이스 aInterface 라는 인터페이스가 있습니다.

인터페이스 안에는 testMethod라는 추상 메서드가 있습니다.

 그런데 예전에 제가 책에서 본 기억으로는 인터페이스는 new를 할수없다고 봤던게 기억이 납니다.

implements로 구현해야한다고 알고있는데요.

클래스 안에서 testMethod mTestMethod  = new testMethod(){

@override

public void testMethod(){

//세부내용구현

}

이런식으로 new가 가능한게 어떤 원리에서 그런건지 궁금합니다.

인터페이스를 new로 할 수 있나요?

저렇게 되면 객체가 만들어지는건가요? 인터페이스에 관해서?
갸아악 (21,260 포인트) 님이 2013년 12월 26일 질문

2개의 답변

0 추천

anonymus class 라는 것을 검색해보시면 이해가 되실겁니다.

 

interface를 명시적인 클래스에서의 구현이 아닌 익명의 클래스에서 바로 구현해서 사용할수가 있습니다.

 

android에서도 Listener들을 구현할때 자주 사용되는 방법이죠.

이라슈 (8,770 포인트) 님이 2013년 12월 26일 답변
0 추천

질문하신 부분이 안드로이드에서 가장 중요한 핵심이 되는 부분이고,

인터페이스를 사용하는 6가지 방법을 차례대로 공부하셔야 되는데, 중요한 몇가지만 짚고 넘어가겠습니다.

일단 먼저 기억하셔야 할것은 함수의 파라메터가 인터페이스라는 의미는 인터페이스를 구현한 인스턴스라는겁니다.

6가지 방법중

1)번은 MyActivity.java라고 한다면 선언부에서  implements aInterface로 하고 testmethod()함수를 오버라이딩하는 방법

2)번은 aInterface를 구현한 내부 클래스를 선언하는 방법

즉, 액티비티 내부에

class MyClass implements ainterface {

   @Override

   testmethod() {} //구현

}

그리고,

MyClass mMyClass = new MyClass();

mMyClass.testmethod();  이렇게 사용하는 방법

이 방법은 실제 필요로 하지 않는 MyClass라는 이너 클래스가 더 들어가조,

실제 컴파일하게 되면 액티비티가 MyActivity.java라고 가정한다면 MyActivity.class, MyActivity$MyClass.class라는 두개의 클래스가 생성됩니다.

3,4) 생략

5) 익명 클래스 사용 방법

익명 클래스 사용 문법은 인스턴스 생성 문법과 같지만 끝에 {} 와 세미콜론을 붙이고 필요한 함수를 오버로딩합니다.

aInterface a = new aInterface(); 이렇게만 하면 인스턴스 생성문법이조. 그렇지만

aInterface a = new aInterface() {

   testmethod(); //구현부

};

이렇게 하는게 익명 클래스이고 실제 컴파일을 하게 되면 MyActivity.class 와 MyActivity$1.class 라는 익명클래스가

생성되게 됩니다. 2번처럼 클래스 이름이 없어서 $1 이라고 번호를 붙이게 됩니다.

그렇지만 여기서 기억해 주셔야 할것은 이것도 2번과 같은 인스턴스라는 것입니다.

6)번 익명클래스 Inner Type 은 5번을 좀 더 간략화한것입니다. 

aInterface라는 이름도 필요없을때 즉 함수의 파라메터가 인터페이스일 경우,

button.setOnAListener(aInterface a) 이렇게 함수의 파라메터가 인터페이스라면

인터페이스를 구현한 인스턴스를 넣어라는 의미입니다.

그런데 이걸 제일 쉽게 해주는게 6번이고, 아래와 같이 해주는겁니다.

button.setOnAListener(new aInterface() {

   testmethod();//구현부

}); 

제가학원에서 강의할때도 이렇게 설명을 해줘도 이해를 못하는 분들이 너무 많더군요...

아무쪼록 참고가 되시길,,,

이스트플랙 (2,510 포인트) 님이 2013년 12월 29일 답변
이스트플랙님이 2013년 12월 29일 수정
...