Kotlin/코틀린인액션요약
-
11장 - DSL 만들기Kotlin/코틀린인액션요약 2022. 9. 23. 00:01
11장에서 다루는 내용 영역 특화 언어 만들기 수신 객체 지정 람다 사용 invoke 관례 사용 기존 코틀린 DSL 예제 API에서 DSL으로 궁극적인 목표는 코드의 가독성과 유지 보수성을 좋게 유지하고자 합니다. 코틀린이 지원하는 간결한 구문들 - 확장 함수 - 중위 호출 - 연산자 오버로딩 - get 메서드에 대한 관례 - 람다를 괄호 밖으로 빼내는 관례 - 수신 객체 지정 람다 코틀린 DSL도 온전히 컴파일 시점에 타입이 정해져서 모든 정적 타입 지정 언어의 장점을 얻을 수 있습니다. 영역 특화 언어라는 개념 우리에 가장 친숙한 DSL을 SQL과 정규식입니다. 이런 DSL을 사용하게 되면 범용 언어를 사용하는 경우보다 특정 영역에 대한 연산을 더 간결하게 기술할 수 있습니다. 하지만 범용 애플리케이..
-
10 장 - 애노테이션과 리플랙션Kotlin/코틀린인액션요약 2022. 9. 22. 00:01
10장에서 다루는 내용 애노테이션 적용과 정의 리플렉션을 사용해 실행 시점에 객체 내부 관찰 코틀린 실전 프로젝트 예제 어떤 함수를 호출하려면 그 함수가 정의된 클래스의 이름과 함수 이름, 파라미터 이름등을 알아야 했습니다. 하지만 애노테이션과 리플랙션을 이용하면 그런 제약을 벗어나서 미리 알지 못하는 임의의 클래스를 다룰 수 있습니다. 애너테이션 선언과 적용 코틀린에서는 자바와 같은 방법으로 애노테이션을 사용할 수 있습니다. 예를 들어 JUnit 프레임워크를 사용한다면 테스트 메서드 앞에 @Test 애노테이션을 붙이면 됩니다. 흥미로운 예제로는 @Deprecated 애노테이션입니다. 의미론적으로는 자바와 동일하지만 코틀린에서는 replaceWith 파라미터를 통해 옛버전을 대신할 수 있는 패턴을 제시합..
-
9장 -제네릭스Kotlin/코틀린인액션요약 2022. 9. 20. 00:01
9장에서 다루는 내용 제네릭 함수와 클래스 정의하는 방법 타입 소거와 실체화한 타입 파라미터 선언 지점과 사용 지점 변성 코틀린에서 제네릭 클래스와 함수를 선언하고 사용하는 기본 개념은 자바와 비슷합니다. 실제로 제네릭스가 쓰였던 일부 예제에서도 괴리감이 느껴지지 않았습니다. 제네릭 타입 파라미터 타입 파라미터를 받을 때 받는 타입을 정의할 수 있습니다. 만약 문자열을 담는 리스트를 표현할 때 List 으로 표현합니다. 코틀린 컴파일러는 타입 인자도 추론할 수 있습니다. val authors = listOf("Dmitry", "Svetlana") listOf에 전달된 두 값이 문자열이므로 컴파일러는 List임을 추론합니다. 제네릭 함수와 프로퍼티 fun List.slice(indices: IntRange..
-
8장 - 고차 함수 : 파라미터와 반환 값으로 람다 사용Kotlin/코틀린인액션요약 2022. 9. 19. 00:01
8장에서 다루는 내용 - 함수 타입 - 고차 함수와 코드를 구조화할 때 고차 함수를 사용하는 방법 - 인라인 함수 - 비로컬 return과 레이블 - 무명 함수 고차 함수 정의 고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수입니다. 코틀린에서는 람다나 함수 참조를 사용해 함수를 값으로 표현할 수 있습니다. 예를 들어 표준 라이브러리 함수인 filter는 술어 함수를 인자로 받으므로 고차 함수입니다. list.filter{x > 0 } 간단한 고차 함수 정의하기 fun twoAndThree (operation : (Int, Int) -> Int){ val result = operation(2,3) println("The result is ${result}") } twoAnddThree{a,b ..
-
7장 - 연산자 오버로딩과 기타 관례Kotlin/코틀린인액션요약 2022. 9. 17. 00:01
7장에서 다루는 내용 연산자 오버로딩 관례 : 여러 연산을 지원하기 위해 특별히 이름이 붙은 메서드 위임 프로퍼티 Point 클래스를 예제로 알아보겠습니다. data calss Point(val x: Int, val y: Int) 산술 연산자 오버로딩 자바에서는 원시 타입에서만 산술 연산자를 사용할 수 있으며 추가로 String에 대해 + 연산자를 사용할 수 있습니다. 하지만 BigInteger 클래스를 다룬다면 add 메서드를 명시적으로 호출하기보다는 + 연산자를 사용하는 편이 좋습니다. 또한 컬렉션에 원소를 추가하는 경우에도 += 연산자를 사용할 수 있으면 더 좋습니다. 코틀린에서는 이런 일이 가능합니다. data class Point(val x: Int, val y: Int){ operator fu..
-
6장 - 코틀린 타입 시스템Kotlin/코틀린인액션요약 2022. 9. 16. 00:01
6장에서 다루는 내용 - null이 될 수 있는 타입과 null을 처리하는 구문의 문법 - 코틀린의 원시 타입 소개와 자바 타입과 코틀린 원시 타입의 관계 - 코틀린 컬렉션 소개와 자바 컬렉션과 코틀린 컬렉션의 관계 null 가능성 NPE를 피할 수 있게 돕는 코틀린 타입 시스템의 특성입니다. 컴파일 시점에 널이 될 수 있는 값들을 검사함으로 런타임 시점에 발생할 수 있는 예외의 가능성을 줄일 수 있습니다. 자바와의 가장 중요한 차이로 널이 될 수 있는 타입을 명시적으로 지원합니다. 물론 자바에서도 Optional을 사용하면 되지만 코틀린에서는 ?하나로 해결할 수 있습니다. Type? = Type 또는 null 안전한 호출 연산자 ?. // 엘비스 연산자를 활용해 null 다루기 fun main() { ..
-
5장 - 람다로 프로그래밍Kotlin/코틀린인액션요약 2022. 9. 13. 00:01
5장에서 다루는 내용 - 람다 식과 멤버 참조 - 함수형 스타일로 컬렉션 다루기 - 시퀀스 : 지연 컬렉션 연산 - 자바 함수형 인터페이스를 코틀린에서 사용 - 수신 객체 지정 람다 사용 자바 8을 사용했다면 람다식에 대해 어느 정도 알고 있을 거라 예상합니다. 무명 클래스/ 익명클래스를 통해 인터페이스를 구현하는 방법은 불필요한 코드가 생기게 됩니다. 이를 람다식을 활용하여 간결한 코드로 변환할 수 있지만 메서드가 하나뿐인 functional interface에서만 활용할 수 있습니다. 코틀린에서는 이를 SAM 인터페이스라고도 부릅니다. (Single Abstract Method) 만약 사람의 이름과 나이를 저장하는 Person 클래스에서 연장자를 찾고 싶다면 어떻게 해야 할까요? 람다를 활용해본 적 ..
-
4장 - 클래스, 객체, 인터페이스Kotlin/코틀린인액션요약 2022. 9. 12. 00:01
4장에서 다루는 내용 - 클래스와 인터페이스 - 뻔하지 않은 생성자와 프로퍼티 - 데이터 클래스 - 클래스 위임 - object 키워드 사용 클래스 계층 정의 코틀린에 새로 도입한 sealed 변경자는 클래스 상속을 제한합니다. 코틀린 인터페이스 코틀린의 인터페이스는 추상 메서드, 구현이 있는 메서드도 정의할 수 있습니다. 즉, 자바 8의 디폴트 메서드와 비슷합니다. 인터페이스 interface Clickable { fun click() //추상 메서드 fun showOff() = println("I'm clickable!") //디폴트 구현이 있는 메서드 } 자바와 달리 default를 붙일 필요가 없습니다. 단순한 인터페이스 구현 class Button : Clickable{ override fun ..