본문 바로가기

Kotlin

Kotlin 익명 클래스 코틀린에서 익명 클래스를 만들 때에는 object 키워드를 이용하면 된다. object 키워드는 싱글턴 패턴을 구현할때 사용 키워드기도 하지만, 익명 클래스를 만드는 용도로도 사용할 수 있다. 인터페이스에 함수가 하나만 있을 경우 SAM( Single Abract Method) 또는 함수형 인터페이스(Functional Interface)라고 부르며) 이경우 object를 생략하고 람다식으로 익명 클래스를 만들수 있다. (반드시 fun interface 키워드로 인터페이스를 정의해야한다 !!) interface AA { fun aa() fun bb() } fun interface SAM{ //반드시 fun를 붙여줘야한다. fun sam(n : Int) : Boolean } fun main(){ val a.. 더보기
시스템 소프트웨어 시스템은 제작과 사용을 분리시켜야한다. 제작 : APP 에서 필요한객체를 제작하고 의존성을 서로 연결하는 과정 사용 : 그 이후에 실행하는 런타임 로직 /* Code 1-1 */ public Service getService() { if (service == null) service = new MyServiceImpl(...); // Good enough default for most cases? return service; } Lazy Initialization/Evaluation(게으른 초기화) - 장점 :실제 필요한 객체를 필요할떄까지 생성하지 않아 메모리 부하가 적어지고 앱 실행 속도도 그만큼 빨라진다. - 단점 :MyServiceImpl 객체에 대한 의존성을 가지게 되었고 MyServ.. 더보기
by lazy vs lateinit 1. by lazy public actual fun lazy(initializer: () -> T): Lazy = SynchronizedLazyImpl(initializer) public actual fun lazy(mode: LazyThreadSafetyMode, initializer: () -> T): Lazy = when (mode) { LazyThreadSafetyMode.SYNCHRONIZED -> SynchronizedLazyImpl(initializer) LazyThreadSafetyMode.PUBLICATION -> SafePublicationLazyImpl(initializer) LazyThreadSafetyMode.NONE -> UnsafeLazyImpl(initializer) } pu.. 더보기
JVM 언어 의 공변 1. 공변이란? 제네릭에서는 3가지 공변 성질을 제공한다. 공변(Variance) : A가 B의 하위 타입일 때, T 가 T의 하위 타입이면 T가 공변의 성질을 가지고 있다고 말한다. 반공변(Contravariance) : A가 B의 하위 타입일 떄, T가 T 의 하위 타입이면 T가 반공변의 성질을 가지고 있다고 말한다. 무공변(Invariance) A가 B의 하위 타입일 때, T와 T간의 아무 관계도 없다면 무공변이라고 말한다. 이러한 공변, 반공변, 무공변으로 메소드의 인자로 들어오는 파라미터의 타입에 제한을 걸수 있다. 공변의 경우 Java에서는 extends, Kotlin에서는 out이라는 키워드를 사용한다.(Producer패턴 : 해당 타입을 생산하는 패턴에 사용) 반공변의 경우 Java에서는 .. 더보기
코틀린 제네릭스 JVM 의 제네릭스는 보통 타입 소거를 사용해 구현한다. -> 타입 소거란 실행 시점(Run Time)에 타입 관련 정보가 소거되는 것을 의미한다. -> 이는 JAVA에서 처음부터 제네릭스를 지원하지 않았기 때문이다. (참고로 제네릭스는 2003년 발표된 JDK 1.5 버전부터 포함된 내용이다.) 하위호환성을 중요시 하는 자바인 만큼 JDK 1.5 전버전과의 호환성때문에 이렇게 만들것으로 추측된다. -> 런타임에 타입관련 정보가 없기 때문에 ClassCastException 등 타입으로 발생하는 비검사 예외가 발생할 여지가 있다. 코틀린에서는 실체화를 통해 타입 인자가 지워지지 않도록 하여 이러한 비검사 예외를 컴파일 시점에 체크할수 있도록 하는 장치가 있다. var intList = ArrayList .. 더보기