일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 디자인패턴 #
- 추상 팩토리
- 추상팩토리패턴
- F
- 싱글톤
- El
- Kotlin
- 옵저버 패턴
- 코틀린
- 함수형프로그래밍
- PrototypePattern
- ㅓ
- Functional Programming
- 프로토타입 패턴
- builderPattern
- 팩토리 메소드
- 디자인패턴
- r
- ㅋㅁ
- designPattern
- a
- 빌터패턴
- Abstract Factory
- Singleton
- factory method
- Design Pattern
- Observer Pattern
- Today
- Total
목록Kotlin in Action/코틀린 답게 사용하기 (21)
오늘도 더 나은 코드를 작성하였습니까?
코틀린의 람다 - 무명 클래스로 컴파일 되지만, 사용할때 마다 새로운 클래스가 생성되는것은 아님 - 람다함수 안에서 변수를 포획시, 람다가 생성되는 시점마다 새로운 무명클래스 객체가 생긴다. (실행시점 무명클래스 생성에 부가 비용) 반복되는 코드를 별도의 라이브러리 함수로 빼내되 컴파일러가 자바의 일반 명령문만큼 효율적인 코드를 생성하게 해보자 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} // 함수자체가 널이..
위임 프로퍼티 컴파일 규칙 class C { var prop: Type by MyDelegate() } val c = C() 컴파일러는 MyDelegate 클래스의 인스턴스를 감춰진 프로퍼티에 저장하며 그 감춰진 프로퍼티를 라는 이름으로 부른다. 프로퍼티를 표현하기 위해 KProperty 타입의 객체를 사용한다. 이 객체를 라고 부른다. class C { private val = MyDelegate() var prop: Type get() = .getValue(this, ) set(value: Type) = .setValue(this, , value) } val x = c.prop -------> val x = . getValue(c, ) c.prop = x -------> . setValue( c, ,..
위임 프로퍼티 컴파일 규칙 class C { var prop: Type by MyDelegate() } val c = C() 컴파일러는 MyDelegate 클래스의 인스턴스를 감춰진 프로퍼티에 저장하며 그 감춰진 프로퍼티를 라는 이름으로 부른다. 프로퍼티를 표현하기 위해 KProperty 타입의 객체를 사용한다. 이 객체를 라고 부른다. class C { private val = MyDelegate() var prop: Type get() = .getValue(this, ) set(value: Type) = .setValue(this, , value) } val x = c.prop -------> val x = . getValue(c, ) c.prop = x -------> . setValue( c, ,..