본문 바로가기

Dev Book/Kotlin IN ACTION

(21)
CH3(3.4~3.6). 함수 정의와 호출(2) 1. 컬렉션 처리 - 가변 인자 함수 정의하기: 코틀린의 가변 길이 인자는 파라미터 앞에 vararg 변경자를 붙이면 된다. fun listOf (vararg values:T): List {...} 또한 코틀린에서는 자바처럼 배열을 그냥 넘기는 것이 아닌, 배열을 명시적으로 풀어서 배열의 각 원소가 인자로 전달되게 해야 한다. 이를 스프레드 연산자가 해주는데, 실제로는 전달하려는 배열 앞에 *를 붙이면 된다. - 값의 쌍 다루기: 중위 호출과 구조 분해 선언 val map = mapOf(1 to "one", 2 to "two") - 여기서 to 라는 단어는 코틀린 키워드가 아닌, 중위 호출을 이용해 to 라는 일반 메소드를 호출한 것이다. 1.to("one") // to 메소드를 일반적인 방식으로 호출 ..
CH2(2.4~2.5). Iteration과 예외처리 1. while과 for 루프 - while 루프의 경우 자바와 동일 - for 루프: 코틀린에서는 자바의 for 루프와 대응하는 요소가 없다. 대신 범위를 사용한다. 코틀린의 범위는 양끝을 포함하는 구간이다. - 수에 대한 iteration fun fizzBuzz(i: Int) = when{ i % 15 == 0 -> "Fizzbuzz" i % 3 == 0 -> "Fizz" i % 5 == 0 -> "Buzz" else -> "$i " } >>> for (i in 1..100) { ... print(fizzBuzz(i)) ...} 1 2 Fizz 4 Buzz Fizz 7 8 ... - 증가값을 사용하려면 step을, 끝 값을 포함하지 않으려면 until을 사용한다. downTo를 사용하면 역방향 수열을..
CH3(3.1~3.3). 함수 정의와 호출(1) 3.1 코틀린에서 컬렉션 만들기 - 코틀린은 자신만의 컬렉션 기능을 제공하지 않는다. 자바 컬렉션과 똑같은 클래스를 사용한다.(상호호환성!) 3.2 함수를 호출하기 쉽게 만들기 - 만약 자바 컬렉션이 제공하는 디폴트 출력 형식과 다르게 원소를 출력하고 싶다면 어떻게 해야 할까? joinToString()함수를 구현하여 이 문제를 해결할 수 있다. fun joinToString( collection: Collection, separator: String, prefix: String, postfix: String ): String { val result = StringBuilder(prefix) for((index, element) in collection.withIndex()){ if(index > 0) ..
CH2(2.1~2.3). 코틀린 기초 2.1 함수와 변수 - 코틀린 함수의 기본 정의 fun max(a: Int, b: Int): Int{ return if (a>b) a else b } - 식이 본문인 함수: 본문이 중괄호로 둘러싸인 함수를 블록이 본문인 함수라 부르고, 등호와 식으로 이뤄진 함수를 식이 본문이 함수라고 부른다. 코틀린에서는 식이 본문인 함수가 자주 쓰인다. 코틀린에서는 if, when, try 등이 결과를 만드는 식으로서 함수 본문 식에 자주 사용된다. 이 경우 굳이 사용자가 반환타입을 적지 않아도 컴파일러가 함수 본문 식을 분석해서 식의 결과 타입을 함수 반환 타입으로 정해준다.(타입 추론. 식이 본문인 함수의 반환 타입만 생략 가능하다!) - 변수: 코틀린에서는 키워드로 변수 선언을 시작하는 대신 변수 이름 뒤에 타입..
CH1. 코틀린이란 무엇이며, 왜 필요한가? 코틀린이란? 코틀린은 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어이다. 서버 개발, 안드로이드 앱 개발 등의 기존 자바 코드가 사용되었던 분야에 코틀린을 사용할 수 있다. 1. 코틀린 맛보기 data class Person(var name:String, val age: Int? = null) fun main(args: Array) { var persons = listOf(Person("영희"), Person("철수", age=29)) var oldest = persons.maxByOrNull(it.age ?: 0) println("나이가 가장 많은 사람: $oldest") } 결과: 나이가 가장 많은 사람: Person(name=철수, age=29) - name과 age가 들어간 데이터 클래스를 정의..