inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Hướng dẫn dành cho người mới bắt đầu sử dụng Java và Kotlin

Bài 17. Cách xử lý lambda trong Kotlin

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

Đã giải quyết

91

not

10 câu hỏi đã được viết

1

안녕하세요 강사님!

 

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

 

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

 

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

 

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

 

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

java kotlin 객체지향

Câu trả lời 1

1

lannstark

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

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

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

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

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

 

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

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

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

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

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

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

 

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

0

not

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

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

수업노트

0

53

1

싱글톤과 스프링

0

71

2

get() = 3

0

49

2

강사님

0

74

1

강의 복습하면서 생긴 질문

1

94

1

Kotlin과 Java의 현업에서의 활용

0

124

2

data class와 자바의 Lombok을 이용한 DTO 클래스 차이 질문

0

74

1

코틀린에서 상속 시, 주의점에 대한 질문

1

95

3

내용 이해 질문

0

56

1

플랫폼 타입 설명 문의

2

76

2

널 아님 단언 관련 질문

0

83

1

강의 중 질문

0

79

2

범위 비교 질문

1

91

2

타입캐스팅 궁금한점 질문드립니다.

1

239

2

코틀린 val 질문

0

166

2

완강 후 Kotlin 이런저런 질문 드려봅니다!

3

408

2

확장함수 스타일 질문

0

139

2

확장 프로퍼티 질문

1

156

1

update 함수를 만든다는게 어떤 의미인지 예시가 궁금합니다!

1

283

1

java class의 NotNull 어노테이션 인식

1

262

1

[16강] 확장함수 관련 질문입니다!

1

131

2

리턴타입 사용시 any를 사용해도 괜찮은가요?

1

139

1

안녕하세요 scope function 에 receiver 가 없는 경우

1

169

1

코틀린 싱글톤 질문

1

219

1