본문 바로가기
IT/Android

람다와 익명클래스 괴담

by YEON-DU 2021. 3. 14.
반응형

"람다 함수로 작성한 코드는 로그 출력이 되는데, 익명 클래스로 작성한 코드는 로그 출력이 안 되는데 이유가 뭐지..!"

엥, 그거 그냥 익명 클래스로 코드 작성을 잘못한 거 아니야?

"아냐, 둘다 토스트 띄우는 건 성공했단 말이야."

로그 레벨이 다르게 되어있는 거 아니야?

"그랬으면 람다에서도 출력이 안 되지 않나..?"

 

그랬다. 때는 3일 전. 전 회사에 같이다녔던 오빠가 대뜸 카톡으로 람다와 익명클래스 괴담에 대해 물어보았다.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

회사에서 야근?을 빙자한 저녁 먹고 퇴근 하던 도중에 이 질문에 묘하게 꽂혀서 "anonymous class java listener log not working" 같은 검색어를 쳐가며 스택오버플로우를 순회했다.

 

가설1.

xml이랑 코드랑 엮여있어서, listener 코드가 무시되었을 것이다..! (사실 그랬으면 람다도 무시되어야 맞음)

stackoverflow.com/questions/25835384/logcat-tells-me-it-could-not-find-a-method

 

Logcat tells me it could not find a method

When I press a button the activity should switch. I originally used onClick in the XML to start the method but after reading many answers about it I changed to a listener. However it is still not w...

stackoverflow.com

 

가설2.

테스트폰이 아닌 에뮬레이터로 돌리는 과정에서 안드로이드 버전차이 때문에 코드가 무시되었다..! (deprecated된 코드를 사용했다..!)

그리고 이 가설은 에뮬레이터를 사용하지 않는다는 점에서 기각되었다.

 

가설3.

안드로이드 스튜디오가 돌았다..!

사유 : 오빠 자리가 아닌 다른 자리에선 멀쩡히 로그가 찍힌다고 그랬음.

 

나는 이 문제에 집착아닌 집착을 시작했고 온갖 가설을 카톡으로 내뱉으며 상태에 대해 묻기 시작했다...

그래서 오빠가 임시 프로젝트를 만들어서 코드를 보내주었는데,

 

btnLambda.setOnClickListener(view -> {
        Log.w(getClass().getSimpleName(), "람다에요.");
        Toast.makeText(this, "람다", Toast.LENGTH_SHORT).show();
    }
);

btnAnonymous.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.w(getClass().getSimpleName(), "익명이에요.");
        Toast.makeText(this, "익명", Toast.LENGTH_SHORT).show();
    }
);

대충 이런 친구였다.

 

그리고 나는 문득.... 아까의 스택오버플로우 정주행중에 본 문구가 떠올랐다.

 

익명..클래스는.... getName을 할 수 있던가?

그리고 오빠한테 tag부분을 혹시 다른 문자열로 바꿔서 테스트해볼 수 있냐고 물었고,

결과는....

 

 

+ 결론적으로 익명 클래스에서는 getName은 물론 getSimpleName을 사용할 수'는' 있다. 하지만 getSimpleName을 할 경우에는 빈 문자열을 반환하게 되고, 로그 함수의 tag에 빈 문자열을 넣을 경우에 로그가 나타나지 않는다. (null일 경우에는 로그가 보여지는데, 완전히 빈 문자열일 때 보여지지 않는 이유는 아직 못찾음)

www.geeksforgeeks.org/java-program-to-check-if-a-given-class-is-an-anonymous-class/

 

Java Program to Check if a Given Class is an Anonymous Class - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

후일담.

 

반응형

'IT > Android' 카테고리의 다른 글

Fragment에서 Back키 처리 방식  (0) 2021.04.04
21.04.03  (0) 2021.04.03
Serializable vs Parcelable  (0) 2021.02.19
Epoxy 사용법 정리  (3) 2021.01.01
[Android Studio] OpenCV 적용  (0) 2019.10.16

댓글