프로그래밍 노트/Kotlin

컬렉션을 처리할 때 쓸 수 있는 코틀린 표준 라이브러리 함수 vararg 키워드를 사용하면 호출 시 인자 개수가 달라질 수 있는 함수를 정의할 수 있다. 중위(infix)함수 호출 구문을 사용하면 인자가 하나뿐인 메소드를 간편하게 호출할 수 있다. 구조 분해 선언(destructuring declaration)을 사용하면 복합적인 값을 분해해서 여러 변수에 나눠 담을 수 있다. 1. 자바 컬렉션 API 확장 코틀린 컬렉션은 자바의 클래스보다 더 확장된 API를 제공한다. >>> val strings:List = listOf("first", "second", "fourteenth") >>> strings.last() fourteenth >>> val numbers:Collection = setOf(1, 1..
변환하지 못한 기존 자바 코드를 사용하기 위해서, 자바 API를 재작성하지 않고도 코틀린이 제공하는 여러 편리한 기능을 사용할 수 있는데 이것이 확장 함수(extenstion function) 가 해주는 역할이다. 확장 함수는 어떤 클래스의 멤버 메소드인 것처럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수다. 문자열의 마지막 문자를 돌려주는 메소드를 추가해보자. package strings fun String.lastChar(): Char = this.get(this.length - 1) fun String.lastChar(): Char = get(length - 1) // this 없이 수신 객체에 접근 가능 확장 함수는 어떤 클래스의 멤버 메소드인 것처럼 호출할 수 있지만 그 클래스의 밖에 선언된..
컬렉션의 원소를 element; element; element .. 로 출력하는 함수를 만들어보자. fun joinToString( collection: Collection, // 제네릭 separator: String, prefix: String, postfix: String ): String { val result = StringBuilder(prefix); for((index, element) in collection.withIndex()){ if(index > 0) result.append(separator) result.append(element) } result.append(postfix) return result.toString() } fun main() { var list = listOf(..
val set = hashSetOf(1, 7, 53) val list = arrayListOf(1, 7, 53) val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") // to는 특별한 키워드가 아니라 일반 함수이다. >> println(set.javaClss) // javaClass는 자바 getClass()와 같다 class java.util.HashSet >> println(list.javaClass) class java.util.ArrayList 코틀린 컬렉션은 자바 컬렉션과 똑같은 클래스다. 하지만 코틀린에서는 자바보다 더 많은 기능을 쓸 수 있다. >> var strings = listOf("first", "secord", "f..
2.4 대상을 이터레이션: while과 for 루프 while 루프는 자바와 동일하므로 패스, for 는 자바의 for-each 루프에 해당하는 형태만 존재 2.4.2 수에 대한 이터레이션: 범위와 수열 코틀린에서는 자바의 for 루프에 해당하는 요소가 없다. 이런 루프의 가장 흔한 용례인 초깃값, 증가 값, 최종 값을 사용한 루프를 대신하기 위해 코틀린에서는 범위(range)를 사용한다. // 범위는 기본적으로 두 값으로 이뤄진 구간이며 .. 연산자로 시작 값과 끝 값을 연결해서 범위를 만든다. val oneToTen = 1..10 fun fizzBuzz(i: Int) = when { i % 15 == 0 -> "FizzBuzz" i % 3 == 0 -> "Fizz " i % 5 == 0 -> "Buz..
2.3 선택 표현과 처리: enum과 when when 은 자바의 switch를 대치하되 훨씬 더 강력하며, 앞으로 더 자주 사용할 프로그래밍 요소이다. 2.3.1 enum 클래스 정의 enum class Color{ RED, ORAGNE, YELLOW, GREEN, BLUE, INDIGO, VIOLET } 코틀린에서 enum은 소프트 키워드(soft keyword)라 부르는 존재다. 반면 class는 키워드다. enum은 특별한 의미를 지니지만 다른 곳에서 사용할 수 있는 반면, class라는 이름은 다른곳에서 사용할 수 없다. 자바의 마찬가지로 enum 클래스 안에도 프로퍼티나 메소드를 정의할 수 있다. enum class Color(val r: Int, val g: Int, val b: Int){ ..
2.2 클래스와 프로퍼티 Java Bean 은 프로퍼티(필드)가 늘어나면 생성자의 본문에서 파라미터를 이름이 같은 필드에 대입하는 대입문의 수도 늘어난다. ex) Peron(String name) public class Person{ private final String name; public Person(String name){ this.name = name; } public String getName(){ return name; } } 코틀린에서는 그런 필드 대입 로직을 훨씬 더 적은 코드로 작성할 수 있다. class Person(val name:String) 이런 유형의 클래스(코드가 없이 데이터만 저장하는 클래스)를 값 객체(value object)라 부르며, 다양한 언어가 값 객체를 간결하게 ..
기본 요소: 함수와 변수 Hello, World! fun main(args:Array){ println("Hello, world!") } 함수를 선언할 때 fun 키워드를 사용 파라미터 이름 뒤에 파라미터의 타입을 쓴다. 함수를 최상위 수준에 정의할 수 있음 (클래스 안에 함수를 넣어야 할 필요가 없다.) 배열도 일반적인 클래스와 마찬가지다. 세미콜론을 붙이지 않는다. 함수 fun max(a: Int, b: Int): Int{ return if (a > b) a else b }fun 함수이름(파라미터 목록) : 함수의 반환 타입 { return 함수본문 } 코틀린 if는 문장이 아니고 결과를 만드는 식(expression)이라는 점이 흥미롭다. 문장(statement)과 식(expression)의 구분 ..
자바가 사용 중인 곳이라면 거의 대부분 코틀린을 활용할 수 있다. 코틀린 맛보기 data class Person(val name:String, val age: Int? = null) // name과 age라는 프로퍼티(property)가 들어간 간단한 데이터 클래스(data class) 정의 fun main(args: Array) { val persons = listOf(Person("성현1"), Person("성현2", age=31)) val oldest = persons.maxBy{ it.age ?: 0} // it 이라는 이름을 사용하면 람다 식의 유일한 인자 사용 가능 // 엘비스 연산자라고 불리는 ?: 는 age가 null인 경우 0을 반환하고, 그렇지 않은 경우 age를 반환 println("..
깡냉쓰
'프로그래밍 노트/Kotlin' 카테고리의 글 목록 (3 Page)