본문 바로가기

전체 글

(67)
공식 문서로 배우는 코틀린 - 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..
공식 문서로 배우는 코틀린 - 10. Types - Type checks and casts 열 번째, 타입 검사와 캐스트입니다. 코틀린에서는 특정 객체의 타입을 확인하기 위해 타입 검사를 할 수 있습니다. 타입 캐스트는 객체를 특정한 타입으로 변환하는 것을 말합니다. 특별히 제네릭의 타입 검사와 캐스트를 공부하고 싶은 경우에는 제네릭 타입 검사와 캐스트를 보시면 됩니다. is 와 !is 연산자 특정 객체가 특정 타입인지 아닌지 식별하는 검사를 실행 시간에 수행할 때는 is 나 그 부정형인 !is 연산자를 사용합니다. if (obj is String) { print(obj.length) } if (obj !is String) { // !(obj is String) 과 같습니다. print("Not a String") } else { print(obj.length) } 스마트 캐스트 코틀린 컴파일..
공식 문서로 배우는 코틀린 - 9. Basic Types - Arrays 아홉 번째, 배열입니다. 배열은 같은 타입(해당 타입의 하위 타입도 가능)의 값들을 고정 수로 가지고 있는 자료 구조입니다. Kotlin에서 가장 일반적인 배열 형태는 Array 클래스로 나타내는 객체 타입 배열입니다. 객체 타입 배열에서 원시타입을 사용하는 경우 원시 타입은 상응하는 래퍼 클래스로 변경(box)되기 때문에 성능이 저하되는 문제가 있습니다. 이러한 오버헤드를 피하기 위해서는, (아래에 나오는) 원시 타입 배열을 사용합니다. 배열을 사용하는 경우 (When to use arrays) 코틀린에서 배열은 특별한 하위 수준(low level)의 요구 사항을 만났을 때 사용합니다. 예를 들어, 일반적인 애플리케이션에게 요구되는 것 이상의 성능이 요구된다거나, 맞춤화된 자료 구조를 만들어야 할 때 ..