코틀린 생성자 vs 자바 생성자코틀린은 자바에 비해 생성자가 여러 개 필요한 경우가 적다.자바에서 필요한 오버로드 생성자는 코틀린의 기본 생성자와 이름 붙인 인자 문법으로 해결이 가능하다.이름 붙인 인자함수나 생성자 호출시 파라미터의 이름을 명시적으로 지정하여 값을 전달하는 방식fun formatMessage(name: String, age: Int, location: String) { // ... }을 호출시에formatMessage(location = "Seoul", age = 30, name = "Alice") 혹은 formatMessage(name = "Alice", age = 30, location = "Seoul")인자가 무엇을 의미하는지 명확하게 전달이 가능하다.부 생성자가 필요한 경우프레임..
코틀린에서 인터페이스의 경우 추상 프로퍼티를 포함할 수 있다.인터페이스를 구현하는 클래스가 해당 프로퍼티에 대한 구현을 제공해야 한다.추상 프로퍼티 선언 예시interface User { val nickname: String } //주 생성자에서 프로퍼티를 직접 선언한다. class PrivateUser(override val nickname: String) : User { /*User 의 추상 프로퍼티를 override 키워드로 구현*/ } // 커스텀 게터를 사용한다. class SubscribingUser(val email: String) : User { /*이메일 주소에서 별명을 계산하여 반환하는 커스텀 게터 사용*/ override val nickname: String get() = email...
주 생성자(Primary Constructor)클래스 이름 뒤에 오는 괄호로 둘러싸인 코드를 주 생성자라고 함생성자 인자 지정인자에 의해 초기화되는 프로퍼티를 정의할 때 사용주 생성자의 명시적 선언class User(_nickname: String) { val nickname: String init { nickname = _nickname } }init 키워드로 초기화 블럭을 시작한다.객체가 생성될 때 실행된다.주 생성자의 간결한 선언class User(val nickname: String)val 키워드를 생성자 파라미터 앞에 추가함으로 프로퍼티 정의하고 초기화 가능프로퍼티 정의와 초기화를 한 줄로 간략하게 표현한다.생성자 인자 디폴트값class User(val nickname: String, val i..
[KOTLIN] 봉인된 클래스(sealed class) : 클래스 계층의 확장 제한기본sealed 클래스클래스 계층을 정의할 때 계층 확장을 제한하는 방법 제공함.하위 클래스는 모든 가능한 하위 타입을 제한적으로 나열할 수 있게 함.when 식에서 else 분기 없이도 완전성을 보장한다.예제 : 식(Expression) 계층interface Expr class Num(val value: Int) : Expr class Sum(val left: Expr, val right: Expr) : Expr fun eval(e: Expr): Int = when (e) { is Num -> e.value is Sum -> eval(e.right) + eval(e.left) else -> throw IllegalArgu..
코틀린 인터페이스 기본자바 8 의 인터페이스와 유사함인터페이스 내에 추상 메서드 + 구현이 있는 메서드( 자바 디폴트 메서드 ) 도 포함이 가능하다.하지만, 인터페이스에는 상태를 나타내는 필드를 포함할 수 없음.인터페이스 정의 및 구현interface Clickable { fun click() }click 이라는 추상 메서드를 가진 Clickable 인터페이스를 정의함.해당 인터페이스를 구현하는 모든 클래스는 click 메서드에 대한 구현을 제공해야함class Button : Clickable { override fun click() { println("I was clicked") } }Button 클래스는 Clickable 인터페이스를 구현하고 click 메서드를 오버라이드코틀린에서는 override ..
중복 제거의 중요성DRY(Don't Repeat Yourself) 원칙을 따르는 것이 중요코틀린의 로컬 함수함수 내부에 로컬 함수를 중첩시켜 코드를 깔끔하게 조직로컬 함수를 사용해 코드 중복 줄이는 법class User(val id: Int, val name: String, val address: String) fun saveUser(user: User) { fun validate(value: String, fieldName: String) { if (value.isEmpty()) { throw IllegalArgumentException("Can't save user ${user.id}: empty $fieldName") } } validate(user.name, "Name") validate(user..