본문 바로가기

코틀린53

[Kotlin in Action] 4.1 클래스 계층 정의 코틀린의 클래스와 인터페이스는 자바 클래스, 인터페이스와는 약간 다르다. 예를 들어 인터페이스에 프로퍼티 선언이 들어갈 수 있다.코틀린 선언은 기본적으로 final이며, public이다. 게다가 중첩 클래스는 내부 클래스가 아니다. 즉, 코틀린 중첩 클래스는 외부 클래스에 대한 참조가 없다.  코틀린 인터페이스 안에는 추상 메소드뿐 아니라 구현이 있는 메소드도 정의할 수 있다(자바8의 디폴트 메소드와 비슷). 다만 인터페이스는 아무런 상태(필드)도 들어갈 수 없다. 4.1.1 코틀린 인터페이스// 간단한 인터페이스 선언interface Clickable { fun click()}// 인터페이스 구현class Button : Clickable { override fun click() = prin.. 2025. 3. 15.
[Kotlin in Action] 3.6 코드 다듬기: 로컬 함수와 확장 코틀린에서는 함수에서 추출한 함수를 원 함수 내부에 중첩시킬 수 있다. 그렇게 하면 문법적인 부가 비용을 들이지 않고도 깔끔하게 코드를 조직할 수 있다. class User(val id: Int, val name: String, val address: String) fun saveUser(user: User) {   if (user.name.isEmpty()) {     throw IllegalArgumentException(   "Can't save user ${user.id}: Empty Name"   ) }   if (user.address.isEmpty()) {     throw IllegalArgumentException(   "Ca.. 2025. 3. 14.
[Kotlin in Action] 3.5 문자열과 정규식 다루기 코틀린 문자열은 자바 문자열과 100% 같다. 3.5.1 문자열 나누기코틀린에서는 split 함수에 String, regex 타입을 확실하게 각각 받게끔 설계되어있다. 따라서 전달하는 값의 타입에 따라 정규식(regex)이나 일반 텍스트(String) 중 어느 것으로 문자열을 분리하는지 쉽게 알 수 있다. 3.5.2 정규식과 3중 따옴표로 묶은 문자열// String 확장 함수를 사용해 경로 파싱하기fun parsePath(path: String) { val directory = path.substringBeforeLast("/") val fullName = path.substringAfterLast("/") val fileName = fullName.substringBeforeLast(.. 2025. 3. 14.
[Kotlin in Action] 3.4 컬렉션 처리: 가변 길이 인자, 중위 함수 호출, 라이브러리 지원 3.4에서는 컬렉션을 처리할 때 쓸 수 있는 코틀린 표준 라이브러리 함수 몇 가지를 설명한다. 그 과정에서 다음과 같은 코틀린 언어 특성을 설명한다.vararg 키워드를 사용하면 호출 시 인자 개수가 달라질 수 있는 함수를 정의할 수 있다.중위(infix) 함수 호출 구문을 사용하면 인자가 하나뿐인 메소드를 간편하게 호출할 수 있다.구조 분해 선언(destructuring declaration)을 사용하면 복합적인 값을 분해해서 여러 변수에 나눠 담을 수 있다.3.4.1 자바 컬렉션 API 확장앞에서 자바의 기본 리스트 클래스 함수 뿐만 아니라, 코틀린에서만 지원하는 함수(last, max)가 있었다. 이 코드들은 모두 확장 함수다. 3.4.2 가변 인자 함수: 인자의 개수가 달라질 수 있는 함수 정의리.. 2025. 3. 14.
[Kotlin in Action] 3.3 메소드를 다른 클래스에 추가: 확장 함수와 확장 프로퍼티 확장 함수를 만들려면 추가하려는 함수 이름 앞에 그 함수가 확장할 클래스의 이름을 덧붙이기만 하면 된다.클래스 이름을 수신 객체 타입(receiver type)이라 부르며, 확장 함수가 호출되는 대상이 되는 값(객체)을 수신 객체(receiver object)라고 부른다. 일반 메소드의 본문에서 this를 사용할 때와 마찬가지로 확장 함수 본문에도 this를 쓸 수 있다. 그리고 일반 메소드와 마찬가지로 확장 함수 본문에서도 this를 생략할 수 있다.package stringsfun String.lastChar(): Char = get(length - 1) // 수신 객체 멤버에 this 없이 접근 가능.하지만 확장 함수가 캡슐화를 깨지는 않는다. 즉, private, protected 멤버에 사용할 .. 2025. 3. 14.