람다 7

[Kotlin] SAM 을 익명 객체 VS 람다로 구현 & fun interface (feat. 우테코)

블랙잭 미션을 진행하면서, 크루원 중 한명이 SAM 인터페이스와 코틀린 fun interface 를 잘 모르겠다고 했다. 나도 코드에 이것을 잘 사용하는 것이 항상 어려웠다. 그래서 다시 공부해서 스터디 시간에 발표하려고 한다. 먼저 익명 객체와 람다부터 알아보자. 익명 객체(Anonymous Object) 코틀린에서 익명 객체(anonymous objects)는 객체 지향 프로그래밍에서 유용한 개념 중 하나이다. 익명 객체는 이름이 없는 클래스 인스턴스를 만들어내는 방법으로, 주로 인터페이스나 추상 클래스의 인스턴스를 만들 때 사용된다. 코틀린에서는 익명 객체를 선언하고 초기화하는 방법이 간단하고 직관적이다. 코틀린 vs 자바 에서 익명 객체 구현 코틀린에서 익명 객체 구현 val thread = Th..

Kotlin 2024.03.22

[Kotlin] 고차 함수 안에서 흐름 제어

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. filter 와 함께 람다 안에서 return 을 사용하는 등의 예제를 살펴보자. 람다 안의 return 문: 람다를 둘러싼 함수로부터 리턴(non-local return) 일반 루프 안에서 `return` 사용하기 data class Person(val name: String, val age: Int) fun lookForAlice(people: List) { for (person in people) { if (person.name == "Alice") { println("Found!") return } } println("Alice is not found") } val people = ..

Kotlin 2024.01.30

[Kotlin] 고차함수

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 고차함수(high order function): 람다를 인자로 받거나 리턴하는 함수 고차함수로 코드를 더 간단히 하고, 중복을 없애고 더 나은 추상화 구축 가능 함수형 프로그래밍 먼저 함수형 프로그래밍의 정의를 찾아보자. 함수형 프로그래밍(functional programming): 자료 처리를 수학적 함수의 계산으로 취급하고, 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임 중 하나이다. - 위키백과 부수 효과가 없는 순수 함수를 1급 객체(시민)로 간주하여 패러미터로 넘기거나 리턴값으로 사용할 수 있다. 또 참조 투명성을 지킬 수 있다. 1급 객체는 아래 특징을 가진다. 일급 객체는 ..

Kotlin 2024.01.26

[Kotlin] 수신 객체 지정 람다, 스코프 함수: with, apply, run, let, also

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 자바에는 없는 코틀린 람다의 독특한 기능이 있다. 바로 수신 객체를 명시하지 않고 람다의 본문 안에서 수신 객체의 메서드를 호출할 수 있도록 하는 것이다. 그런 람다를 수신 객체 지정 람다(lambda with receiver)라고 한다. Scope function(스코프 함수) 대표적인 수신 객체 지정 람다 함수를 알아보기 전 Scope function(스코프 함수)에 대해 먼저 알아보자. 코틀린 공식 문서에서는 스코프 함수를 이렇게 설명한다. 코틀린 stlib 에는 객체의 컨텍스트 내에서 코드 블록을 실행하는 것만을 목적으로 하는 여러 함수가 있다. 람다 식이 제공된 객체에서 이러한 함..

Kotlin 2024.01.17

[Kotlin] 자바 함수형(SAM) 인터페이스 활용

kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린으로 개발을 할 때 대다수의 API 는 코틀린이 아닌 자바로 작성된 API 일 것이다. 그런데 코틀린 람다를 자바 API 에 사용해도 아무 문제가 없다. 코틀린에서는 자바 메서드에 람다를 넘길 수 있다. 안드로이드 개발시 많이 사용하는 `Button` 클래스는 `setOnClickListener` 메서드를 사용하여 버튼의 리스너를 설정한다. public class Button { public void setOnClickListener(OnClickListener l) { ... } } 여기서 `OnClickListener` 인터페이스는 `onClick` 이라는 메서드만 선언된 인터페이..

Kotlin 2024.01.16

[Kotlin] 람다를 인자로 받는 컬렉션 함수형 API

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 함수형 프로그래밍 스타일을 사용하면 컬렉션을 다룰 때 편하다. 컬렉션을 다루는 코틀린 표준 라이브러리를 몇가지 살펴보자. `filter` 와 `map` 함수, 그 함수를 뒷받침하는 개념으로부터 시작된다. filter & map 함수 대부분의 컬렉션 연산을 `filter` 와 `map` 함수를 통해 표현할 수 있다. filter 함수 `filter` 함수는 컬렉션을 iteration 하면서 주어진 람다에 각 원소를 넘겨서 람다가 `true` 를 리턴하는 원소만 모아서 `List` 로 리턴한다. val list = listOf(1, 2, 3, 4) assert( list.filter { it ..

Kotlin 2024.01.12

[Kotlin] Lambda 식(람다 식) & 람다의 캡처 & Member Reference(멤버 참조)

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. lambda expression(람다 식) 또는 lambda(람다)는 다른 함수에 넘길 수 있는 작은 코드 조각이다. 코틀린 표준 라이브러리는 람다를 아주 많이 사용하며, 특히 컬렉션 처리에서 많이 사용한다. 람다 소개 일련의 동작을 변수에 저장하거나 다른 함수에 넘겨야 하는 경우가 자주 있다. 자바에서는 익명 내부 클래스를 통해 이를 구현했다. 하지만, 이는 꽤 번거롭다. 함수형 프로그래밍에서는 함수를 값처럼 다룬다. 그래서 함수를 직접 다른 함수에 전달할 수 있다. 자바 코드 - 버튼에 액션을 추가하는 리스너(익명 내부 클래스로 구현) public void setListener(Butt..

Kotlin 2024.01.11