상속! 악마의 속삭임, 그 속에 숨겨진 문제점, Kotlin에서는 Delegation을 활용해 보자.

Java에서 설계할 때 매우 익숙하게 하는 게 있다. 바로 Base를 상속 구조로 만드는 것.

상속은 매우 쉽게 생각할 수 있고, 공통 작업을 분리할 때 매우 유용하게 사용할 수 있다.

Kotlin에서는 상속보다는 Delegation을 사용하라고 하는데, 상속 대신 Delegation을 사용할 때의 장점을 알아본다.

이 내용도 결국 Effective Java 3판에 잘 나오는데 아래 내용을 참고하면 좋다.

  • 아이템 18 : 상속보다는 컴포지션(Composition)을 사용하라
  • 아이템 19 : 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라


이 글에서 알아볼 내용

  • 상속을 알아보고, 상속의 단점을 알아보다.
  • Composition을 알아본다.
  • Kotlin의 Delegation을 알아본다.

Read More

Kotlin Delegation을 알아보고, Delegated Properties와 class에서의 Delegation을 알아본다.

Kotlin은 Delegation을 제공하고, 매우 유용하게 사용할 수 있다.

매우 흔하게 볼 수 있는 by lazy {}를 통해 Delegated Properties을 알아보고, class에서 활용할 수 있는 Delegation을 알아본다.


이 글에서 알아볼 내용

  • Delegation을 알아본다.
  • Delegated Properties를 알아본다.
  • Lazy를 사용하는 property를 알아본다.
  • class에서 간단하게 사용할 수 있는 Delegation을 알아본다.

Read More

Java value는 언제나 null이다. 이를 Kotlin에서 활용 시 주의할 점을 알아본다.

Java 변수는 언제나 null을 허용하고, Kotlin 변수는 null을 허용치 않는다. 그래서 타입 정의에서 항상 null을 허용할지 말지를 직접 정의해야 한다.

// null 허용
val name: String? = null

// NonNull
val name: String = null // 문법 오류

Kotlin은 null을 허용하려면 ?을 추가해 null 임을 알려야 한다. 코틀린 만 사용한다면 별다른 문제는 없다. 하지만 Kotlin은 언제나 Java를 활용할 수 있고, 안드로이드 개발에선 Java SDK를 활용한다.

어떤 경우에 null을 허용하고, 어떨 때 null을 허용치 않아야 하는지 명확하지 않을 수 있다.

이 글에서는 자바와 함께 사용할 때 null 관련 어노테이션의 중요성을 알아본다.


이 글에서 알아볼 내용

  • Java는 항상 null 임을 알아본다.
  • Android SDK 사용 시에는 Nullable로 처리해야 할까?
  • Java에서 Kotlin의 값을 호출 시에는 null에 주의해야 하는데 알아본다.

Read More

Kotlin과 Java의 Nested and Inner Classes를 알아보고, Nested classes를 왜 사용해야 하는지 알아본다.

Kotlin은 class 안에 class(중첩 클래스)를 정의할 때 기본 Nested classes 룰을 사용한다.

inner classes가 아닌 이유를 찾기엔 자바를 이해하는 편이 가장 좋다. 이 글에서는 Java의 inner classes와 Nested classes를 통해 코틀린의 Nested classes 이유를 알아본다.


이 글에서 알아볼 내용

  • Java Inner classes와 Nested classes를 알아본다.
  • Kotlin의 Inner classes와 Nested classes를 알아본다.
  • Java의 어떤 문제로 코틀린은 Nested classes가 기본인지를 살펴본다.

Read More

Kotlin interface에는 왜 상수를 정의할 수 없을까?

Kotlin의 interface에서는 상수를 정의할 수 없다. 상수를 허용하지 않는 이유는 Java에서 이유를 찾는 게 빠르다.

이 글에서는 Java의 interface에서 왜 상수를 정의하지 않는 게 좋은지에 대해 알아본다.

수정. java 7이 아닌 java 8에서 interface의 default/static이 추가되어 수정합니다.


이 글에서 알아볼 내용

  • Java interface의 상수를 알아보고, 문제점을 알아본다.
  • kotlin interface의 상수 정의가 왜 없는지를 Java를 통해 알아본다.
  • Java 8의 interface에 추가된 default/static 사용에 대해 알아보고, 코틀린의 default 함수도 알아본다.

Read More