본문 바로가기

Kotlin

(42)
공식 문서로 배우는 코틀린 - 18. Visibility modifiers 열여덟 번째, 가시성 수정자입니다. 클래스, 객체, 인터페이스, 생성자, 함수, 프로퍼티와 해당 세터 모두는 가시성 수정자(visibility modifier)를 가질 수 있습니다. Kotlin에는 다음과 같은 네 개의 가시성 수정자가 있습니다. private protected internal public 기본 가시성은 public입니다. 여기서는 범위(scope) 유형에 따라 수정자가 어떻게 다르게 적용되는지 알아 보겠습니다. 패키지 함수, 프로퍼티, 클래스, 객체, 인터페이스는 패키지안의 최상위 수준(top-level)에 직접적으로 선언될 수 있습니다. // file name: example.kt package foo fun baz() { ... } class Bar { ... } 가시성 수정자를 사..
공식 문서로 배우는 코틀린 - 17. Functional (SAM) interfaces 열일곱 번째, 함수형 인터페이스입니다. 단지 하나의 추상 메소드만을 갖는 인터페이스를 함수형 인터페이스(functional interface), 또는 단일 추상 메소드(Single Abstract Method, SAM)라고 부릅니다. 함수형 인터페이스는 다수의 추상적이지 않은 멤버를 가질 수 있지만, 추상 멤버는 단 하나입니다. Kotlin에서 함수형 인터페이스를 선언할 때는 fun 수정자를 사용합니다. fun interface KRunnable { fun invoke() } SAM 변환(conversion) 함수형 인터페이스를 위해 SAM 변환을 사용할 수 있습니다. SAM 변환은 람다 표현식을 사용하여 코드를 보다 간결하고 가독성 있게 만들어 줍니다. 함수형 인터페이스를 구현하는 클래스를 직접 만드는..
공식 문서로 배우는 코틀린 - 16. Interfaces 열여섯 번째, 인터페이스입니다. 코틀린에서 인터페이스는 추상 메소드의 선언과 메소드의 구현을 모두 포함할 수 있습니다. 추상 클래스와 다른 점은 인터페이스는 상태(state)를 저장하지 못한다는 것입니다. 인터페이스는 프로퍼티를 가질 수는 있지만, 해당 프로퍼티는 추상적이거나 접근자 구현을 제공해야 합니다. 인터페이스는 interface라는 키워드를 가지고 정의합니다. interface MyInterface { fun bar() fun foo() { // optional body } } 인터페이스 구현 클래스나 객체는 하나 이상의 인터페이스를 구현할 수 있습니다. class Child : MyInterface { override fun bar() { // body } } 인터페이스의 프로퍼티 인터페이스에..
공식 문서로 배우는 코틀린 - 15. Properties 열다섯 번째, 프로퍼티입니다. 프로퍼티 선언Kotlin 클래스에서 프로퍼티는 var 키워드를 사용하요 가변되게 선언하거나, val 키워드를 사용하여 읽기 전용으로 선언할 수 있습니다.class Address { var name: String = "Holmes, Sherlock" var street: String = "Baker" var city: String = "London" var state: String? = null var zip: String = "123456"} 프로퍼티 사용은 단순히 해당 이름을 사용하면 됩니다.fun copyAddress(address: Address): Address { val result = Address() // 코틀린에는 new 키워드..
공식 문서로 배우는 코틀린 - 14. Inheritance 열네 번째, 상속입니다. Kotlin의 모든 클래스는 공통 수퍼 클래스로 Any를 가지고 있습니다. Any는 어떠한 수퍼 타입도 선언돼 있지 않은 클래스로 모든 클래스의 기본적인 수퍼 클래스입니다. class Example // 묵시적으로 Any를 상속 Any는 equals(), hashCode(), toString()이라는 3개의 메소드를 가지고 있습니다. 그러므로, Kotlin의 모든 클래스에 이 세가지의 메소드가 정의됩니다. 기본적으로 Kotlin 클래스들은 모두 final 이어서 상속 될 수 없습니다. 클래스를 상속 가능하게 하려면 open 키워드를 붙입니다. open class Base // 클래스가 상속을 위해 열린(open) 상태입니다. 상속하는 명시적 수퍼 타입을 선언하기 위해서는 클래스 ..
공식 문서로 배우는 코틀린 - 13. Classes 열세 번째, 클래스와 객체 - 클래스입니다. Kotlin에서 클래스는 class 키워드를 사용하여 선언합니다. class Person { /*...*/ } 클래스 선언은 클래스 이름과 클래스 헤더(타입 매개변수, 주 생성자, 그 외의 것들을 명시하는 부분) 그리고, 중괄호로 둘러 쌓이는 클래스 몸체로 구성됩니다. 헤더와 몸체는 선택 사항입니다. 클래스의 몸체가 없는 경우 중괄호는 생략할 수 있습니다. class Empty 생성자 Kotlin에서 클래스는 주 생성자와 필요에 따라 하나 이상의 부 생성자를 갖습니다. 주 생성자는 클래스 헤더에 선언되는데, 클래스 이름과 (선택적인) 타입 매개변수 뒤에 위치합니다 (타입 매개변수는 추후 제네릭 부분에서 나옵니다). class Person constructor(..
공식 문서로 배우는 코틀린 - 12. Packages and imports 열두 번째, 패키지와 임포트입니다. 소스 파일은 패키지 선언으로 시작할 수 있습니다. package org.example fun printMessage() { /*...*/ } class Message { /*...*/ } // ... 소스 파일 안의 클래스, 함수 같은 모든 내용은 상단에 선언된 패키지에 포함됩니다. 그러므로, 상단의 코드에서 printMessage()의 전체 이름은 org.example.printMessage이고 Message의 전체 이름은 org.example.Message입니다. 패키지가 선언되지 않으면, 해당 파일의 내용은 이름이 없는 기본(default) 패키지에 속하게 됩니다. import 잘 아시는 것처럼 수입하다라는 뜻을 가진 단어입니다. 하지만, 수입 또는 가져옴이라는 ..
공식 문서로 배우는 코틀린 - 11. Control flow 열한 번째, 흐름 제어입니다. 조건과 루프 if 표현식 코틀린에서 if는 표현식으로서 값을 반환할 수 있습니다. 그래서, 코틀린에는 3항 연산자( 조건 ? 그러면 : 아닌경우)가 없습니다. 왜냐하면, 평범한 if 표현식이 3항 연산자를 대체할 수 있습니다. fun main() { val a = 2 val b = 3 var max = a if (a b) { max = a } else { max = b } // 표현식 max = if (a > b) a else b // 표현식에서 `else if` 사용 val maxLimit = 1 val maxOrLimit = if (maxLimit > a) maxLimit else if (a > b) a e..