본문 바로가기

코틀린53

[Kotlin in Action] 5.2 컬렉션 함수형 API 5.2.1 필수적인 함수: filter와 mapfilter 함수는 컬렉션을 이터레이션하면서 주어진 람다에 각 원소를 넘겨서 람다가 true를 반환하는 원소만 모은다.>>> val list = listOf(1, 2, 3, 4)>>> pritln(list.filter { it % 2 == 0 }) // 짝수만 남는다.[2, 4] map함수는 주어진 람다를 컬렉션의 각 원소에 적용한 결과를 모아서 새 컬렉션을 만든다.>>> val list = listOf(1, 2, 3, 4)>>> println(list.map { it * it }[1, 4, 9, 16] 5.2.2 all, any, count, find: 컬렉션에 술어 사용어떤 사람의 나이가 27살 이하인지 판단하는 술어 함수 canBeInClub27이 있다.. 2025. 3. 18.
[Kotlin in Action] 5.1 람다 식과 멤버 참조 5.1.1 람다 소개: 코드 블록을 함수 인자로 넘기기// 무명 내부 클래스로 리스너 구현하기/* 자바 */button.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { /* 클릭 시 수행할 동작 */ }}무명 내부 클래스를 선언하느라 코드가 번잡스러워졌다. 이와 비슷한 작업을 많이 수행해야하는 경우 그런 번잡함은 난잡함으로 변해 개발자를 괴롭힌다.코틀린에서는 위 코드를 아래와 같이 간단하게 표현 가능하다.button.setOnClickListener { /* 클릭 시 수행할 동작 */ } 5.1.2 람다와 컬렉션data class Person(val name: String.. 2025. 3. 18.
[Kotlin in Action] 4.4 object 키워드: 클래스 선언과 인스턴스 생성 코틀린에서는 object 키워드를 다양한 상황에서 사용하지만 모든 경우 클래스를 정의하면서 동시에 인스턴스를 생성한다는 공통점이 있다.객체 선언은 싱글턴을 정의하는 방법 중 하나다.동반 객체(companion object)는 인스턴스 메소드는 아니지만 어떤 클래스와 관련 있는 메소드와 팩토리 메소드를 담을 때 쓰인다. 동반 객체 메소드에 접근할 때는 동반 객체가 포함된 클래스의 이름을 사용할 수 있다.객체 식은 자바의 무명 내부 클래스(anonymous inner class) 대신 쓰인다. 4.4.1 객체 선언: 싱글턴을 쉽게 만들기코틀린은 객체 선언 기능을 통해 싱글턴을 언어에서 기본 지원한다. 객체 선언은 클래스 선언과 그 클래스에 속한 단일 인스턴스의 선언을 합친 선언이다.object Payroll.. 2025. 3. 16.
[Kotlin in Action] 4.3 컴파일러가 생성한 메소드: 데이터 클래스와 클래스 위임 4.3.1 모든 클래스가 정의해야 하는 메소드코틀린에서도 자바처럼 직접 toString(), equals(), hashCode() 등을 생성해줄 수도 있지만, 코틀린에서는 이런 메소드들을 알아서 생성해주는 기능이 있다. (근데 사실 지금은 자바도 record 클래스가 나오긴 했다) 4.3.2 데이터 클래스(data class): 모든 클래스가 정의해야 하는 메소드 자동 생성data class Client(val name: String, val postalCode: Int) 인스턴스 간 비교를 위한 equalsHashMap과 같은 해시 기반 컨테이너에서 키로 사용할 수 있는 hashCode클래스의 각 필드를 선언 순서대로 표시하는 문자열 표현을 만들어주는 toString데이터 클래스와 불변성: copy().. 2025. 3. 16.
[Kotlin in Action] 4.2 뻔하지 않은 생성자와 프로퍼티를 갖는 클래스 선언 코틀린은 주 생성자와 부 생성자를 구분한다. 또한 코틀린에서는 초기화 블록을 통해 초기화 로직을 추가할 수 있다. 4.2.1 클래스 초기화: 주 생성자와 초기화 블록아래의 세 가지 User 선언은 모두 같다.class User constructor(_nickname: String) { // 파라미터가 하나만 있는 주 생성자 val nickname: String init { // 초기화 블록 nickname = _nickname }}class User(_nickname: String) { val nickname = _nickname}class User(nickname: String)하지만 마지막 선언이 가장 간결하다. 함수 파라미터와 마찬가지로 생성자 파라미터에도 .. 2025. 3. 15.