일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- builderPattern
- 함수형프로그래밍
- a
- 옵저버 패턴
- F
- 디자인패턴
- 팩토리 메소드
- designPattern
- r
- 프로토타입 패턴
- ㅓ
- 디자인패턴 #
- 추상팩토리패턴
- factory method
- 싱글톤
- 추상 팩토리
- Observer Pattern
- 코틀린
- 빌터패턴
- Singleton
- Abstract Factory
- ㅋㅁ
- Kotlin
- Design Pattern
- Functional Programming
- PrototypePattern
- El
- Today
- Total
목록Kotlin in Action (36)
오늘도 더 나은 코드를 작성하였습니까?
루프와 같은 명령형 코드를 람다로 변경한다면 return 문제에 부딪칠 것 이다. 루프의 중간에 있는 return문의 의미는 이해가 쉽다. 하지만, 루프를 filter와 같이 람다를 호출하는 함수로 변경후 인자로 전달하는 람다 안에서 return을 사용하면 어떻게 될까? 람다 안의 return 문 fun lookForAlice(people: List){ for (person in people){ if(person.name == "Alice"){ println("Found!") return } } println("Alice is not founded") } fun lookForAlice(people: List){ people.forEach{ if(it.name == "Alice"){ println("Fou..
컬렉션에 작용하는 코틀린 표준라이브러리 성능을 알아보자. 코틀린 표준라이브러리 컬렉션 함수는 대부분 람다를 인자로 받는다. 표준라이브러리 함수를 사용하는 것과 직접 구현하여 사용하는 것 무엇이 효율적일까? data class Person(val name: String, val age: Int) fun main() { val people = listOf( Person("Alice", 29), Person("Bob",31)) println(people.filter { it.age < 30 }) val result = mutableListOf() for (person in people){ if (person.age < 30) result.add(person) } println(result) } 코틀린 filt..
코틀린의 람다 - 무명 클래스로 컴파일 되지만, 사용할때 마다 새로운 클래스가 생성되는것은 아님 - 람다함수 안에서 변수를 포획시, 람다가 생성되는 시점마다 새로운 무명클래스 객체가 생긴다. (실행시점 무명클래스 생성에 부가 비용) 반복되는 코드를 별도의 라이브러리 함수로 빼내되 컴파일러가 자바의 일반 명령문만큼 효율적인 코드를 생성하게 해보자 inline 키워드를 사용하면 그 함수의 본문이 인라인이 된다. 함수를 호출하는 바이트 코드 대신에 함수의 본문을 번역한 바이트 코드로 번역된다. 예제) 다중 스레드 환경에서 공유자원에 대한 동시접근을 막기 위한 코드 inline fun synchronized(lock: Lock, action: () -> T): T{ lock.lock() try { return ..
고차함수의 정의 - 다른 함수를 인자로 받거나 함수를 반환하는 함수. 함수타입 val sum = {x:Int, y: Int -> x+y} val action = {println(14)} val sum: (Int, Int) -> Int = {x:Int, y: Int -> x+y} val action: () -> Unit = {println(14)} *Unit은 값을 반환 하지 않는 함수의 반환타입인데, 일반적인 값을 반환하지 않는 함수는 정의할 때는 생략이 가능하지만, 함수타입을 선언 할때는 생략을 해서는 안된다. * 괄호에 주의하며 아래코드를 보면된다 // 반환값이 널값이될 수 있다. val canReturnNull: (Int, Int) -> Int? = {x , y -> null} // 함수자체가 널이..