안드로이드 공부를 하다가 익명 클래스에 대해서 나와서 이를 정리를 위한 메모성 포스트




1. 익명 내부 클래스


View.OnTouchListener TouchListener = new View.OnTouchListener()

{

public boolean onTouch(View v, MotionEvent event) { 내용 생략 }

};



익명 내부 클래스 방식은 대략 이런 모양인데.


내부에 onTouch 메서드를 보아서 일단 이건 클래스 이긴 클래스라는 것이다.



TouchListener 이것은 바로 이 클래스의 인스턴스 명이다.


그렇다면 이는 View.OnTouchListener의 인스턴스일까? 아니다.


View.OnTouchListener는 인터페이스이기 때문에 인스턴스를 생성하지 못한다.



즉, 이 문법은 View.OnTouchListener를 상속을 받고 클래스이름은 익명으로 생성하고 TouchListener라는 이름의 인스턴스를 만든 것이다.


당연히 클래스 이름을 정하지 않았기에 이런 객체를 한번 더 만들 수는 없다.




2. 익명 내부 클래스의 임시 객체 사용


vw.setOnTouchListener(new View.OnTouchListener()

{

public boolean onTouch(View v, MotionEvent evnet)

{ 내용 생략 }

});


다음과 같은 형태인데.



vw라는 인스턴스가 setOnTouchListener를 메서드를 사용해서 여기에다가 터치 이벤트 리스너를 넣어서 이벤트를 등록해주는 것인데.


setOnTouchListener 안에 익명 클래스의 임시객체를 바로 집어 넣은 모양새이다.



View.OnTouchListener는 역시 인터페이스이다. 여기에다가 new를 가져다가 붙이는데.


클래스도 아니고 View.OnTouchListener의 인스턴스가 만들어질리는 없다.


View.OnTouchListener 인터페이스를 받아서 클래스를 구성하는데 클래스 이름도 익명이고 만든 인스턴스도 익명이다.



그리고 그냥 바로 매개변수로 집어던져버리는 사용 방식이다.




3. 람다식 사용


아쉽게도 안드로이드의 자바는 버전이 7이다. 그래서 람다식이 안된다고 한다.


람다식은 자바8에 새롭게 도입된 문법이다.



vw.setOnTouchListener((v. event) -> { 내용 생략 });


진짜 혁신적이게 짧아졌다.


보면 메서드의 매개변수랑 내용 딱 두가지만 가지고 넘겨주고 있다.





잊지 않으려고 메모 용도라서 타인이 보는데는 별로겠네요...




참고 자료 : 안드로이드 프로그래밍 정복 1 (저자 : 김상형)

'프로그래밍 > Java' 카테고리의 다른 글

[Java] 난수(Random)  (0) 2017.02.01
[Java] 쓰레드 프로그래밍  (0) 2017.01.04
[Java] 구구단 퀴즈  (0) 2016.07.09
[Java] UDP 통신 예제  (0) 2016.07.09