강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

개발자 취업 포기님의 프로필 이미지
개발자 취업 포기

작성한 질문수

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

17강. 코틀린에서 람다를 다루는 방법

자바와 코틀린의 함수형 프로그래밍,

해결된 질문

작성

·

74

1

안녕하세요 강사님!

 

자바는 메소드 자체를 직접 넘겨주는 것 처럼 쓸 수 있다, 자바에서 함수는 변수에 할당되거나 파라미터로 전달할 수 없다.

 

이부분에서 명확하게 이해가 잘 안되어서 질문을 남깁니다 ㅠ

 

자바에서 JDK 8이후로 람다와 스트림, 함수형 인터페이스 덕분에 자바도 함수가 일급 시민으로 취급되어 함수형 프로그래밍 패러다임을 적용해서 상호 보완해나가며 개발할 수 있다고 배웠습니다.

 

그러나 강사님께서 말씀하시는 내용으로는 자바는 그런 것 함수가 일급 시민 자체가 된 것이 아니라, '일급 시민이 된 것 처럼' 동작하도록 함수형 인터페이스를 통해 함수형 프로그래밍을 할 수 있게 된 것이지 근본 자체가 일급 시민이 아니라는 말씀이신건지가 궁금합니다..

 

중요한 내용은 아닌것 같지만 모호하게 알고 넘어가기가 찜찜해서 질문을 남겨드립니다.

답변 1

1

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요~ 나구리님! 🙂 좋은 질문 감사합니다.

자바는 '일급 시민이 된 것 처럼' 동작하도록 함수형 인터페이스를 통해 함수형 프로그래밍을 할 수 있게 된 것이지 근본 자체가 일급 시민이 아니라는 말씀이신건지가 궁금합니다..

이라고 표현해 주셨는데요! 표현해주신 내용이 정확합니다.

자바는 함수형 프로그래밍을 사용하기 위해 interface를 활용했고, interface의 구현체는 class로 함수와는 엄연히 다르게 취급된다고 할 수 있습니다. 즉, 함수형 프로그래밍이 가능은 하지만, 함수가 1급 시민은 아닌 셈이죠~

중요한 내용은 아니라고 생각하실 수도 있지만, 이런 차이를 정확히 이해하면 코틀린에만 존재하는 inline function, noinline 등이 왜 등장하게 되었는지도 쉽게 이해하실 수 있을 것 같아요!

 

간략히만 말씀드려 보면 다음과 같습니다. 🙂

  • JVM은 함수를 일급 객체로 보지 않는데, Kotlin은 함수를 일급 객체로 보면서도 JVM level에서 돌아갈 때는 함수형 인터페이스로 .class 파일이 만들어 져야 한다.

  • 이를 위해 Kotlin이 컴파일 될 때 함수는 FunctionN 이라는 특수한 타입으로 컴파일 되는데

    이는 결국 class의 method 호출을 의미한다. (= 약간의 오버로드)

  • 따라서 오버로드를 완전히 줄이기 위해 진짜 함수 그 자체를 사용 지점에서 사용하고 싶다면 inline 키워드를 붙여 .class 파일이 만들어 질 때 함수 구현체 자체를 붙여 넣게 되고

  • 상황에 따라 inlining 하고 싶지 않은 경우는 noinline 키워드를 사용하게 된다.

 

답변이 도움이 되었으면 좋겠습니다. 또 궁금하신 내용 있으시면 언제든 편하게 찾아주세요~ 감사합니다.

아.. inline 키워드의 최적화가 코틀린에서 부득이하게 컴파일 시 오버로드가 필요한데,, 이걸 함수를 작성한 지점에서 그대로 사용하기 위해서 코드를 복붙한다는 그런 느낌이군요..!!

오.. 신기합니다 ㅎㅎ
친절한 답변 감사합니다 강사님!!

개발자 취업 포기님의 프로필 이미지
개발자 취업 포기

작성한 질문수

질문하기