코틀린 입문 스터디 (5) Extensions

mook2_y2
4 min readFeb 19, 2019

--

스터디파이 코틀린 입문 스터디 (https://studypie.co/ko/course/kotlin_beginner) 관련 자료입니다.

코틀린 입문반은 Kotlin을 직접 개발한 개발자가 진행하는 Coursera 강좌인 “Kotlin for Java Developers” (https://www.coursera.org/learn/kotlin-for-java-developers) 를 기반으로 진행되며 아래는 본 강좌 요약 및 관련 추가 자료 정리입니다.

목차

(1) Introduction

(2) From Java to Kotlin

(3) Basics

(4) Control Structures

(5) Extensions

(6) 실습 : Mastermind game

(7) Nullability

(8) Functional Programming

(9) 실습 : Mastermind in a functional style, Nice String, Taxi Park

(10) Properties

(11) Object-oriented Programming

(12) Conventions

(13) 실습 : Rationals, Board

(14) Inline functions

(15) Sequences

(16) Lambda with Receiver

(17) Types

(18) 실습 : Game 2048 & Game of Fifteen

1. Extension Functions (5m) / 2. Examples from the Standard Library (10m)

  • Java에는 없지만 Kotlin에서 기본적으로 제공하는 대부분의 유용한 함수는 모두 Java의 Class에 대한 Extension (확장함수) 형태로 구현된 것입니다. (예시 : List (joinToString(), getOrNull(), withIndex()), Char (isLetter(), isLetterOrDigit()), String (trimMargin(), trimIndent(), toRegex()), Conversion to numbers (toInt(), toDouble(), toIntOrNull())
  • until, toinfix 키워드를 통해 infix notation 으로로 정의된 확장함수입니다. infix notation(중위 표기법)이란 함수에 들어가는 Parameter 사이에 함수명을 위치하도록 하여, 상황에 맞게 사용할 경우 가독성을 개선할 수 있는 표기법을 뜻합니다. (관련 링크 :코틀린 확장함수 #2 빠르게 살펴보기 중 중위표기법 부분

3. Sum as an extension function 예제와 답안 (5m + 1m)

  • 생략

4. Calling Extensions (4m)

  • Top-level에서 함수를 정의할 경우 Static으로 정의됩니다. 이에 따라 Top-level로 정의된 확장함수는 Static 메소드와 동일한 적용 범위를 가집니다. (관련 링크 : Kotlin의 Extension은 어떻게 동작하는가 part 1)
  • 한편 클래스 내부에 멤버 메소드 형태로 확장함수를 정의하는 경우 1) 해당 클래스 내부 멤버 메소드/필드, 2) 해당 클래스 확장함수, 3) Lambda with Recevier 파트에서 배우는 with 함수를 통한 접근시에만 접근이 가능합니다.

5. Importance of extensions (3m)

  • 확장함수는 Kotlin에서 가장 유용하고 사랑 받는 기능 중 하나라고 합니다. 확장함수의 설계 의도 중 하나는 Java와의 상호운용성 (Interoperability)으로 기존 Java 라이브러리의 객체에 대해 확장함수 형태로 추가 기능을 구현하여 사용할 수 있고, 이를 Java 코드에서도 사용할 수 있습니다.
  • 확장함수 설계의 또 다른 의도는 컴파일 속도 개선입니다. 기존 Java 코드를 그대로 사용하며 추가할 부분을 확장함수로 처리하는 방식으로 효율적인 Kotlin 컴파일이 가능합니다. (관련 링크 : 스칼라 vs 코틀린 : 더 나아진 자바를 목표로 경쟁하는 2개의 언어. [번역] 중 컴파일 속도 부분)
  • Java의 기본 Class 또는 외부 라이브러리에서 제공하는 Class에 대해 고유한 기능으로 동작하는 함수를 추가적으로 정의해야 할 경우 확장함수 형태로 정의하는 것이 권장됩니다. 해당 Class를 작성했을 때 자동완성 형태로 보여지므로 빠르게 사용할 수 있고, 다른 개발자가 해당 Class에 대해 보다 명확하게 이해하는 데에도 도움을 줄 수 있습니다.

--

--