Kotlin (42) 썸네일형 리스트형 공식 문서로 배우는 코틀린 - 42. Scope functions 마흔두 번째, 범위 함수입니다. ※ scope는 프로그래밍 언어에서 특정 대상이 효력이 있는 범위를 얘기할 때 사용되는 단어입니다. 그래서, 보통 '변수의 유효 범위' 식으로 유효 범위로도 많이 얘기합니다. 본 연재에서도 범위나 유효 범위를 혼용하여 사용하고 있습니다. 그리고, 범위 함수는 범위 지정 함수라고 하는 경우도 많고, 그냥 영어 그대로 스코프 함수라고 얘기하는 경우도 많을 겁니다. Kotlin 표준 라이브러리에는 오로지 객체의 문맥 내에서 코드 블록을 실행하기 위한 목적을 가진 몇몇 함수가 포함돼 있습니다. 이런 함수에 람다 표현식을 제공하면 객체에 대해서 호출할 때는, 임시적인 범위를 만듭니다. 이 범위 내에서는 객체를 이름 없이 접근할 수 있습니다. 이런 함수들을 범위 함수(scope fu.. 공식 문서로 배우는 코틀린 - 41. Reflection 마흔한 번째, 리플렉션입니다. 리플렉션(reflection)은 실행 시간에 프로그램 구조를 살펴볼 수 있게 해 주는 언어와 라이브러리의 기능 집합입니다. Kotlin에서 함수와 프로퍼티는 일급 시민(first-class citizens)이고, 함수형이나 반응형 스타일을 사용할 때, 이들의 내부를 살펴볼 수 있는 능력(예: 실행 시간에 프로퍼티나 함수의 이름이나 타입을 아는 것)은 필수입니다. ※ Kotlin/JS는 제한적인 리플렉션 기능을 제공합니다. 자세한 내용은 여기를 참고하세요. ※ 리플렉션은 명사지만, 현업에서는 '리플렉션 하다' 같이 내부를 살펴보는 행위를 나타내는 동사로도 사용합니다. JVM 의존성 JVM 플랫폼에서 Kotlin 컴파일러 배포판은 리플렉션 기능을 사용하는 필요한 별도의 실행 시.. 공식 문서로 배우는 코틀린 - 40. Destructuring declarations 마흔 번째, 구조 분해 선언입니다. 때때로 객체를 구조 분해하여 얼마간의 변수에 할당하는 것은 편리합니다. 예를 들면 다음과 같습니다. val (name, age) = person 이러한 구문을 구조 분해 선언(destructuring declaration)이라고 합니다. 구조 분해 선언은 한 번에 복수의 변수를 만듭니다. 위와 같이 하면, name, age 두 개의 변수가 선언되고, 각각을 독립적으로 사용할 수 있습니다. println(name) println(age) 구조 분해 선언은 다음과 같은 코드로 컴파일 됩니다. val name = person.component1() val age = person.component2() component1()과 component2() 함수는 Kotlin에서 폭.. 공식 문서로 배우는 코틀린 - 39. Annotations 서른아홉 번째, 어노테이션입니다. 어노테이션은 코드에 메타데이터를 추가하는 방법입니다. 어노테이션을 선언하기 위해서는 클래스 앞에 annotation 수정자를 붙입니다. annotation class Fancy 어노테이션의 추가적인 속성은 다음과 같은 메타 어노테이션을 정의하는 어노테이션에 추가하는 방식으로 지정할 수 있습니다. @Target : 어노테이션이 붙을 수 있는 (클래스, 함수, 프로퍼티, 표현식 같은) 대상의 종류를 지정합니다 @Retention : 어노테이션은 컴파일된 클래스 파일 안에 저장되는지 여부와 실행 시간에 리플렉션을 불 수 있는지 여부를 지정합니다(기본 값은 둘 다 true입니다). @Repeatable : 하나의 대상에 여러 번 사용할 수 있게 해 줍니다. @MustBeDocu.. 공식 문서로 배우는 코틀린 - 38. This expressions 서른여덟 번째, this 표현식입니다. 현재 수신자를 나타내기 위해서 this 표현식을 사용할 수 있습니다. 클래스의 멤버에서 this는 클래스의 현재 객체를 나타냅니다. 확장 함수나 수신자가 있는 함수 리터럴에서 this는 마침표의 왼쪽 부분으로 지정되는 수신자 매개변수를 나타냅니다. this에 한정자(qualifier)가 없으면 가장 깊은 단계로 감싸고 있는 유효 범위(scope)를 나타냅니다. 다른 유효 범위(scope)의 this를 나타내개 위해서는 라벨 한정자를 사용합니다. 한정된 this (Qualified this) 바깥 범위(클래스나 확장 함수나 라벨이 있는 수신자 있는 함수 리터럴)의 this를 접근하기 위해서는 this@label 를 사용합니다. @label 부분은 this의 유효범위 .. 공식 문서로 배우는 코틀린 - 37. Equality 서른일곱 번째, 동등성입니다. Kotlin에는 두 가지 유형의 동등성이 있습니다. 구조적 동등성 ( == ) - equals() 함수를 사용한 검사 참조적 동등성( === ) - 두 개의 참조가 같은 객체를 가리키고 있는지 검사 동일성 vs 동등성 보통 두 대상이 같은지 비교하는 데는 참조적으로 같은 동일성과 구조적으로 같은 동등성을 얘기합니다. 이와 관련해서 동일성 쪽에는 identity를 동등성 쪽에는 equality라는 단어를 사용하는 경우가 국내 및 영어권에 많이 있습니다. 하지만, 보통 equality 한데 이게 어떤 식으로 equality 하냐고 정의하는 경우도 많습니다. 예를 들어 Java 언어 명세에 보면 == 연산자를 단순히 equality operator라고 있습니다. 이 걸 우리말로 .. 공식 문서로 배우는 코틀린 - 36. Null safety 서른여섯 번째, 널 안전성입니다. 널 안전성에서는 ALGOL W에서 널 참조 개념을 고안한 토니 호어가 (바로 아래 언급되는) 십억 달러의 실수라고도 언급한 문제를 언어 차원에서 해결하기 위한 Kotlin의 방법을 설명합니다. Java를 사용하다 Kotlin을 쓰게 됐을 때 처음에는 많은 불편을 느끼게 되는 부분이기도 합니다. 하지만, 좀 익숙해 지면 불편함은 사라지게 되고 NPE의 위험으로부터 벗어나서 좀 더 안전한 프로그램을 작성할 수 있음을 느끼게 됩니다. Kotlin 사용 초기에 반드시 익숙해져야 할 내용입니다. 널 가능한(nullable) 타입과 가능하지 않은(non-nullable) 타입 Kotlin의 타입 체계는 십억 달러의 실수라고도 알려져 있는 null 참조의 위험성을 제거하는 것을 목표.. 공식 문서로 배우는 코틀린 - 35. Using builders with builder type inference 서른다섯 번째, 빌더 타입 추론과 함께 빌더 사용하기입니다. Kotlin은 빌더 타입 추론(또는 빌더 추론)을 지원하는데, 이는 제네릭 빌더와 함께 사용할 때 유용합니다. 빌더 추론은 람다 인수 안의 다른 호출에 대한 타입 정보에 기반하여 빌더 호출의 타입 인수를 추론할 수 있도록 컴파일러를 돕습니다. buildMap()의 사용 예를 살펴 보겠습니다. fun addEntryToMap(baseMap: Map, additionalEntry: Pair?) { val myMap = buildMap { putAll(baseMap) if (additionalEntry != null) { put(additionalEntry.first, additionalEntry.second) } } } 정규적인 방법으로 타입 인수.. 이전 1 2 3 4 ··· 6 다음