fun saveUser(user: User) { if (user.name.isEmpty()) { throw IllegalArgumentException("Can't save user ${user.id}: empty Name") } if (user.address.isEmpty()) { throw IllegalArgumentException("Can't save user ${user.id}: empty Address") } // Save user to the database } fun main() { val user = User(1, "John", 25, "Main St.") saveUser(user) }에서 이름과 주소의 유효성 검사가 중복된다.해당 부분을 로컬 함수로 개선해보자fun saveUser(us..
인터페이스 정의 및 구현 인터페이스 정의 interface Clickable { fun click() } click은 추상 메서드임. 인터페이스 구현 interface Clickable { fun click() } class Button : Clickable { override fun click() = println("I was clicked") } fun main() { Button().click() } I was clicked extends 와 implements 대신 콜론 (: ) 을 사용하여 클래스의 확장과 인터페이스의 구현을 처리한다. override 키워드는 상위 클래스나 인터페이스의 메서드를 오버라이딩할때 필수적으로 사용됨. 디폴트 구현과 다중 인터페이스 구현 디폴트 구현을 인터페이스에 제공..
확장 프로퍼티 정의읽기 전용 확장 프로퍼티val 키워 사용 게터 구현이 필요함변경 가능한 확장 프로퍼티var 키워드를 사용하여 정의하고, 게터와 세터를 모두 구현해야함사용읽기 전용 확장 프로퍼티fun String.lastChar(): Char = this.get(this.length - 1) fun main() { val lastChar = "Kotlin".lastChar println("lastChar = $lastChar"); } //lastChar = n변경 가능한 확장 프로퍼티var StringBuilder.lastChar: Char get() = get(length - 1) set(value: Char) { this.setCharAt(length - 1, value) } fun main() { ..
가변 인자 함수의 정의함수의 매개변수 타입 앞에 vararg 키워드 사용사용fun args(args: Array) { val argumentsList = listOf("args: ", *args) println(argumentsList) } fun main() { args(arrayOf("1", "2", "3")) } //[args: , 1, 2, 3]*args 는 배열의 각 원소를 개별 인자로 함수에 전달함중위 호출(Infix Call)to 함수는 중위 호출 방식ㅇㅁ함수 호출 시 수신 객체와 유일한 메서드 인자 사이에 메서드 이름을 넣어 호출하는 방식1 to "one" == 1.to("one") 와 동일함to 함수to 함수는 Pair 의 인스턴스를 반환함val (number, name) = 1 to "..
코틀린에서의 문자열자바의 문자열과 동일하다자바의 문자열에 API 추가적인 확장 함수 제공그냥 좀더 편하게 쓸 수 있다곤하는데 체감은 안됨문자열 나누기String.split 은 실제 정규식을 씀.split(”.”) 은 마침표 . 를 정규식의 모든 모든 문자를 나타내는 와일드 카드로 해석함fun main() { val split = "12.345-6".split(".", "-") println("split = ${split}"); } split = [12, 345, 6]정규식의 사용toRegex 확장 함수를 통해 문자열을 정규식으로 변환한다.fun main() { val toRegex = "[.\\-]".toRegex() val split = "12.345-6.A".split(toRegex) println(..
코틀린에서의 예외 처리 특징체크 예외 와 언체크 예외 구분이 없다고 함모든 예외가 언체크 예외로 처리됨..예외를 명시적으로 선언하거나 잡을 필요가 없다고 한다.예외 처리의 방식try 블록에서 예외가 발생할 수 있는 코드를 작성하고, catch 블록에서 예외를 잡아서 처리한다.finally 블록에서 정리 코드 수행요 부분은 자바랑 동일하다.그런데 왜 코틀린에서 언체크 예외의 구분이 없을 수 있는 것일까?결론은 단순했다.개발자가 더 명확하고 간결한 코드를 작성하도록 돕는 것이 철학이다일단 체크 예외의 문제점이 존재한다.1 .만약 함수가 새로운 예외를 던지는 경우해당 함수를 호출하는 모든 메서드가 예외를 처리해야하는 막대한 짐을 등에 얹게 된다.과도한 예외 처리 케이스개발자들이 예외를 try-catch 로 적..