질문입니다~ > QnA

본문 바로가기
사이트 내 전체검색

QnA

안드로이드 질문입니다~

페이지 정보

profile_image
작성자 zmatkddhkdwk
댓글 2건 조회 158회 작성일 20-06-03 12:45

본문


이것이 안드로이다 코틀린 책 사서 공부하고 있습니다. 궁금한 것은 소괄호와 중괄호의 차이가 궁금해서 질문합니다.
예를들어, setOnClickListener( ) 와 setOnClickListener { }의 차이가 무엇입니까?  그냥 소괄호 중괄호 뜻 그대로 중괄호가 소괄호를 포함할 수 있다 그 정도인가요?

 소괄호 안에는 중괄호를 넣지 못하고요. 궁금합니다 ㅎ 

댓글목록

profile_image

김민식님의 댓글

김민식 작성일

코틀린만의 특별 기능입니다.
SAM 변환 기능과 코틀린의 고차 함수 특성이 결합된 기능인데

1. setOnClickListener의 파라미터로 View.OnclickListner의 객체를 전달할 수 있습니다.
View.OnClickListener는 원래 자바의 인터페이스이고 가지고 있는 함수가 한개 뿐이므로 익명객체로 생성 가능합니다.

btn.setOnClickListener(View.OnClickListener {
    override fun onClick(view: View!) { }
})

2. 함수가 하나뿐인 자바의 인터페이스나 클래스의 익명객체를 람다식으로 표현 가능합니다. (Single Abstract Method 변환)
btn.setOnClickListener({ view -> })

3. 코틀린은 함수에 전달하는 마지막 인자가 함수일 때만 소괄호를 밖에 바로 람다식 코드를 쓸 수 있습니다.
(setOnClickListener는 인자가 하나 뿐이므로 소괄호 생략이 가능합니다.)

btn.setOnClickListener { view -> }

- 예시 -
fun print(message: String, decorator: (String) -> String)
print("Kotlin", { origin -> "Hello " + origin })
print("Kotlin") { origin -> "Hello " + origin } // 마지막 인자가 람다식이므로 소괄호 밖으로 꺼낼 수 있다.

fun autoDrive(command: () -> Unit)
autoDrive({ go() })
autoDrive { go() } // 마지막 인자가 람다식이므로 소괄호 밖으로 꺼낼 수 있는데 인자가 함수 하나 뿐이라서 소괄호 생략가능.

혼동을 방지하기 위해선
원칙적으로 중괄호와 소괄호는 문법적으로 관련이 없습니다.

profile_image

zmatkddhkdwk님의 댓글의 댓글

zmatkddhkdwk 작성일

아직 초반부분 공부중이라 많은 말을 이해하지는 못하겠지만, 중괄호와 소괄호가 문법적으로 관련이 없다는 말 이해했습니다.
나중에 더 공부하고 와서 한 번 더 봐야겠네요. 감사합니다.

회원로그인

회원가입

Site info.

Team Flow9
Address : 10, Gukjegeumyung-ro, Yeongdeungpo-gu, Seoul, Republic of Korea
Contact : flow9.net@gmail.com

접속자집계

오늘
53
어제
214
최대
284
전체
12,222
Copyright © flow9.net All rights reserved.