일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 대구핫플
- 대구카페
- 인스타핫플
- 개발자
- 대구맛집
- 안드로이드개발
- 감성카페
- 대구인스타핫플
- 동성로핫플
- 애드몹
- 수성구맛집
- 안드로이드
- androidstudio
- 코딩
- 의무경찰
- 어플개발
- 범물동카페
- 파이썬
- 애드센스
- 안드로이드앱
- 안드로이드스튜디오
- 범물동
- 지산동카페
- Android
- 동성로맛집
- 앱개발
- 안드로이드앱개발
- 동성로카페
- 코딩공부
- 수성구카페
Archives
- Today
- Total
Glacier's Daily Log
코틀린 SAM-constructor 란? 그리고 코틀린에서 clickListener를 간단하게 쓸 수 있는 이유 본문
Coding/Android
코틀린 SAM-constructor 란? 그리고 코틀린에서 clickListener를 간단하게 쓸 수 있는 이유
h__glacier_ 2024. 4. 9. 16:58반응형
코틀린 작업중 발생하는 제안사항인 SAM-constructor 가 뭘까?
SAM conversions (Single Abstract Method)
- 기존 Java에서 클릭 리스너를 만들 때 사용한 익숙한 코드
btnTest.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// Do something}}); - 람다식을 사용하지 않은 Kotlin으로 만든 클릭 리스너
btnTest.setOnClickListener(object: View.OnClickListener {override fun onClick(v: View) {// Do something}}) - 여기서 OnClickListener는 아래와 같이 구현되어 있음.
public interface OnClickListener { void onClick(View v); } - OnClickListener는 onClick, 단 하나의 추상 메소드만을 가지는데 이걸 SAM(Single Abstract Method) 라고 부른다.
따라서, 우리가 OnClickListener를 구현했다는 것은, 하나뿐인 무조건 override하여 구현해야하는 onClick을 구현할 것이고,
컴파일러도 이를 당연히 여기고 있기 때문에 이를 생략할 수 있음. -
이후 아래 코드까지 생략을 한다.btnTest.setOnClickListener(View.OnClickListener { v: View -> println("Do something") })
- 그러면 이렇게 SAM-constructor를 제거하라고 검게 표시해 버린다.
그 의미는, 실제로 setOnClickListener를 사용한 순간 OnClickListener를 생성자로 넣을 수 밖에 없는 상황이기 때문에, 컴파일러도 미리 알고 생략을 추천하는 것이다. - 이후 아래 코드까지 생략을 할 수 있고,
btnTest.setOnClickListener({ v: View -> println("Do something") }) - 파라미터가 여러 개 있어도 가장 마지막 파라미터가 람다식이면 소괄호 바깥으로 빼낼 수 있는 코틀린 문법 때문에
이후 btnTest.setOnClickListener() { v: View -> println("Do something") } 로 만들 수 있고, 빈 괄호는 생략 가능해서 최종적으로 우리에게 익숙한
btnTest.setOnClickListener { v: View -> println("Do something") }
이러한 Redundant SAM-constructor는 자바코드를 코틀린에서 사용할 때 만 적용이 되었지만, 최근 코틀린 신규버전에도 적용이 되어서 모두 사용할 수 있다.
반응형
'Coding > Android' 카테고리의 다른 글
[앱 개발 전문가] 기기 연동 안드로이드 앱을 개발해 드립니다. (BLE, MQTT, TCP, RTSP, PTZ, 클래식 블루투스 등) (2) | 2024.12.01 |
---|---|
헷갈리는 Sealed, Open, Abstract Class를 정리해보자 (0) | 2024.09.26 |
@JvmField 어노테이션으로 Java+Kotlin 환경에 대응하기 (0) | 2024.03.29 |
[Kotlin] vararg로 파라미터 갯수를 유동적으로 지정하기 (0) | 2024.01.29 |
UI 작성시 ConstraintLayout을 활용을 권장하는 이유 (1) | 2024.01.25 |
Comments