본문 바로가기

Kotlin

(43)
공식 문서로 배우는 코틀린 - 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)의 요구 사항을 만났을 때 사용합니다. 예를 들어, 일반적인 애플리케이션에게 요구되는 것 이상의 성능이 요구된다거나, 맞춤화된 자료 구조를 만들어야 할 때 ..
공식 문서로 배우는 코틀린 - 8. Basic Types - Strings 여덟 번째, 문자열입니다. Kotlin에서 문자열은 String 타입으로 표현합니다. JVM에서 UTF-16으로 인코딩된 문자열을 담고 있는 String 객체는 글자당 대략 2 바이트를 사용합니다. 일반적으로 문자열은 큰따옴표로 묶은 (0개 이상의) 문자의 연속체입니다. val str = "abcd 123" 문자열의 요소들은 인덱스 연산자로 s[i] 식으로 접근할 수 있는 문자들입니다. 이 문자들은 다음과 같이 for 반복문으로 열거할 수 있습니다. fun main() { val str = "abcd" for (c in str) { println(c) } } /* 결과 a b c d */ 문자열은 불변입니다. 문자열을 한 번 초기화하면 값을 변경하거나 새로운 값을 할당할 수 없습니다. 문자열을 변경화는 ..
공식 문서로 배우는 Kotlin - 7. Basic Types - Characters 일곱 번째, 문자입니다. 문자는 Char 타입으로 나타냅니다. 문자 타입은 말 그대로 하나의 문자를 나타내며, 문자 리터럴은 '1' 같이 작은 따옴표로 묶습니다. JVM에서 문자는 16비트 유니코드로 표현되는 char 원시 타입에 저장됩니다. 특수 문자는 이스케이프 시키는 역슬래시로 시작합니다. 다음과 같은 특수 문자를 위한 이스케이스 시퀀스를 지원합니다. \t - 탭 \b - 백스페이스 \n - 새로운 줄(new line. LF) \r - 캐리지 리턴 (CR) \' - 작은 따옴표 \" - 큰 따옴표 \\ - 역슬래시 \$ - 달러 기호 이 외에 다른 문자를 인코딩하기 위해서는, ' \uFF00' 같은 유니코드 이스케이스 시퀀스 형태를 사용합니다. fun main() { val aChar: Char =..
공식 문서로 배우는 Kotlin - 6. Basic Types - Booleans 여섯 번째, 이러한 동작은 효율성을 위해 어떻게 보면 당연한 얘기이고 많은 프로그래밍 언어들이 이렇게 동작합니다만, Kotlin이 이렇게 동작한다는 것을 꼭 기억해 둬야 합니다. 프로그래밍 언어를 이해할 때 정확한 동작 방식을 이해하고 있어야 코딩할 때 정확하고 효율적인 코드를 작성할 수 있습니다. JVM에서 널 가능한 Boolean은 숫자 타입들과 마찬가지로 래퍼 클래스(java.lang.Boolean) 객체로 박스화(box)됩니다. 타입입니다. Boolean 타입은 true와 false 둘 중 하나의 진리값을 갖는 객체를 나타냅니다. 널 가능한 형태는 Boolean? 입니다. JVM에서 Boolean 타입은 전형적으로 8bit를 사용하는 boolean 원시 타입에 저장됩니다. 불리언 타입에 대한 내장..
공식 문서로 배우는 Kotlin - 5. Basic Types - Unsigned integer types 다섯 번째, 부호 없는 정수 타입입니다. 정수 타입에 더하여, Kotlin은 부호 없는 정수를 위한 타입을 다음과 같이 제공합니다. 타입 사이즈(bits) 최솟값 최댓값 UByte 8 0 255 UShort 16 0 65,535 UInt 32 0 4,294,967,295 (2^32 - 1) ULong 64 0 18,446,744,073,709,551,615 (2^64 - 1) 부호 없는 정수 타입들은 그에 대응하는 부호 있는 타입들이 제공하는 연산들 대부분을 지원합니다. 부호 없는 정수 타입은 해당 타입에 대응하는 같은 길이의 부호 있는 타입을 단일 저장 프로퍼티로 갖는 인라인 클래스로 구현됩니다. 부호 없는 타입과 부호 있는 타입 상호 간에 변환해야 한다면, (두 타입은 서로 다르므로) 모든 함수 호출..
공식 문서로 배우는 Kotlin - 4. Basic Types - Numbers 네번째는 Concepts 부분으로 넘어와서 기본 타입 - 숫자입니다. Kotlin에서는 어떤 변수든 멤버 함수와 프로퍼티를 호출할 수 있다는 면에서 모든 것이 객체입니다. 특정 타입들은 실행시에 내부적으로 원시 타입(숫자, 문자, 불리언 등)으로 최적화 되기는 하지만, 외형이난 사용면에서는 일반적인 클래스와 같습니다. 자연스러운 개념일 수도 있으나 언어 차원에서 원시 타입이 없이 모든 것을 객체로 본다는 개념은 기억하는 것이 좋습니다. 이 개념을 기본적으로 염두에 두고 있으면 추후 동반 객체 등을 이해할 때 도움이 됩니다. 꼭, 기억해 두시기 바랍니다. 타입(type) vs 형(形) 타입과 형(形) 모두 같은 말이지만, OOP에서 객체의 유형을 얘기할 때 보통 형보다는 타입이라는 말을 많이 쓰고, Kot..