코틀린

코틀린은 주(primary) 생성자와 부(secondary) 생성자를 구분한다. 또한 코틀린에서는 초기화 블록(initializer block)을 통해 초기화 로직을 추가할 수 있다. 주 생성자 : 주로 사용하는 간략한 생성자로, 클래스 본문 밖에서 정의 부 생성자 : 클래스 본문 안에서 정의 클래스 초기화: 주생성자와 초기화 블록 class User(val nickname: String) 이렇게 클래스 이름 뒤에 오는 괄호로 둘러싸인 코드를 주 생성자(primary constructor)라고 부른다. 주 생성자는 생성자 파라미터를 지정하고 그 생성자 파라미터에 의해 초기화되는 프로퍼티를 정의하는 두 가지 목적에 쓰인다. 실제로는 아래와 같은 일이 벌어진다. class User constructor(_n..
가시성 변경자(visibility modifier): 기본적으로 공개 코트린에서는 아무 변경자도 없는 경우 선언은 모두 공개(public)이 된다. 코틀린에서는 패키지 전용(package-private)은 없다. 코틀린은 패키지를 네임스페이스를 관리하기 위한 용도로만 사용한다. 그래서 패키지를 가시성 제어에 사용하지 않는다. 변경자 클래스 멤버 public(기본 가시성) 모든 곳에서 볼 수 있다. internal 같은 모듈 안에서만 볼 수 있다.(모듈은 한꺼번에 컴파일되는 코틀린 파일들을 의미) protected 하위 클래스 안에서만 볼 수 있다. private 같은 클래스 안에서만 볼 수 있다. internal open class TalkativeButton: Focusable{ private fun ..
코틀린 인터페이스 코틀린 인터페이스 안에는 추상 메소드뿐 아니라 구현이 있는 메소드도 정의할 수 있다. (자바8 디폴트 메소드처럼) interface Clickable{ fun click() } class Button: Clickable{ override fun click() = println("I was clicked") } >> Button().click() I was clicked 자바에서는 extends와 implements 키워드를 사용하지만, 코틀린에서는 클래스 이름 뒤에 콜론(:)를 붙이고 인터페이스와 클래스 이름을 적는 것으로 클래스 확장과 인터페이스 구현을 모두 처리한다. 코틀린에서는 override 변경자를 꼭 사용해야 한다. interface Clickable{ fun click() ..
코틀린에서는 함수에서 추출한 함수를 원 함수 내부에 중첩시킬 수 있다. 그렇게 하면 문법적인 부가 비용을 들이지 않고 깔끔하게 코드를 조직할 수 있다. (DRY. Don't Repeat Yourself) 흔히 발생하는 코드 중복을 로컬(local)함수를 통해 어떻게 제거할 수 있는지 살펴보자. 사용자를 데이터베이스에 저장하는 함수가 있다. 이때 데이터베이스에 사용자 객체를 저장하기 전에 각 필드를 검증해야 한다. class User(val id: Int, val name: String, val address: String) fun saveUser(user: User){ if(user.name.isEmpty()){ throw IllegalArgumentException("Can't save ..
1. 문자열 나누기 코틀린에서는 자바의 split 대신에 여러 가지 다른 조합의 파라미터를 받는 split 확장 함수를 제공함으로써 혼동을 이야기하는 메소드를 감춘다. 정규식을 파라미터로 받는 함수는 String이 아닌 Regex 타입의 값을 받는다. >>> println("12.345-6.A".split("\\.|-".toRegex())) // 정규식을 명시적으로 만든다. [12, 345, 6, A] 코틀린에서는 toRegex 확장 함수를 사용해 문자열을 정규식으로 변환할 수 있다. >>> println("12.345-6.A".split(".", "-")) // 여러 구분 문자열을 지정한다. [12, 345, 6, A] // 문자열 대신 문자를 인자로 넘겨도 마찬가지 결괄르 볼 수 있다. 2. 정규식과..
컬렉션을 처리할 때 쓸 수 있는 코틀린 표준 라이브러리 함수 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 Page)