| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Functional Programming
- 디자인패턴
- 안드로이드 디자인시스템
- Design Pattern
- Abstract Factory
- 추상팩토리패턴
- 옵저버 패턴
- ㅋㅁ
- designPattern
- 싱글톤
- builderPattern
- Singleton
- 프로토타입 패턴
- Coroutines
- android designsystem
- 팩토리 메소드
- Kotlin
- 디자인패턴 #
- Observer Pattern
- ㅓ
- 함수형프로그래밍
- 추상 팩토리
- 코틀린
- compose
- PrototypePattern
- material3
- 빌터패턴
- define
- factory method
- 코루틴
- Today
- Total
목록전체 글 (338)
오늘도 더 나은 코드를 작성하였습니까?
제네릭스를 깊이 다루면서, 실체화된 타입 파라미터(reified type parameter) - 실체화된 타입 파라미터를 사용하면 인라인 함수 호출에 있어 타입 인자로 쓰인 구체적인 타입을 실행 시점에서 알수있다.(일반적인 클래스나 함수의 경우 타입 인자 정보가 실행 시점에 사라져버리기 때문에 이런것이 불가능하다.) 선언 지점 변성(declaration-site variance) - 선언 지점 변성을 사용하면 기저 타입은 같지만 타입 인자가 다른 두 제네릭 타입 Type Type가 있을때, 타입인자 A B 상위/하위 타입 관계에 따라 두 제네릭 타입의 상위/하위 타입관계 어떻게 되는지 지정할 수 있다. 예를 들면 List를 인자로 받는 함수에게 List타입의 값을 전달할 수 있을지 여부는 선언 지점 변성..
루프와 같은 명령형 코드를 람다로 변경한다면 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 ..
