Kotlin/Class and Interface

    [Kotlin] abstract class 란 무엇인가?

    abstract class란 무엇인가? abstract class는 그 자체로 인스턴스화 될 수 없는 클래스이다. abstract class는 abstract class를 여러 클래스에서 공통으로 쓰는 프로퍼티와 메서드를 모아놓는 용도로 쓴다. abstract class란여러 클래스의 추상적인 부분(=공통적인 부분)을 모아놓은 클래스인데 그 자체로는 인스턴스화 할 수 없는 클래스이다. 프로그래밍 언어들에서는 abstract class를 abstract type을 가진다고 하고 abstract type은 그 자체로 인스턴스화(객체를 만드는 작업)를 할 수 없는 타입이다. 반대의 단어로는 concrete type이 있는데 concrete type은 그 자체로 인스턴스화 할 수 있는 타입을 뜻한다. Kotli..

    [Kotlin] Kotlin object 이용한 무명 객체(Anonymous Object) 생성 : 익명 클래스(Anonymous Class)의 구현과 활용 방법

    무명 객체란 무엇인가? 무명 객체란 익명 클래스로부터 생성되는 객체를 뜻한다. 익명 클래스는 다른 클래스들과 달리 이름을 가지지 않는 클래스다. 정리하면 이름을 가지지 않는 익명 클래스로부터 무명 객체를 생성할 수 있다. Kotlin에서는 이를 object라는 하나의 키워드를 통해 구현할 수 있다. 먼저 무명 객체가 왜 필요한지 살펴본 후, 무명 객체를 어떻게 구현하는지 확인하도록 하자. 무명 객체가 필요한 이유 무명 객체는 클래스가 한 번만 활용되어야 하는 경우에 매우 유용하다. 만약 한 번만 활용되어야 하는데 매번 클래스를 생성하면 너무 클래스가 많아지는 불편함이 있기 때문이다. 예를 들어 아래와 같은 인터페이스가 있다. interface ButtonClickListener { fun onButton..

    [Kotlin] object 를 이용한 싱글톤 패턴 구현

    개발을 하다보면 객체에 대한 하나의 인스턴스만 필요할 때, 하나의 인스턴스를 재사용하기 위해 싱글톤 패턴을 구현해야 할 일이 생긴다. *싱글톤 패턴 : 객체의 인스턴스를 1개만 생성하여 계속 재사용 하는 패턴 Java에서의 싱글톤 기존 자바에서는 싱글톤 패턴을 구현하기 위해 많은 코드를 작성해야 했다. 보통은 다음과 같은 방식으로 싱글톤 패턴을 구현하였다. public class SingletonClass { // 1. static으로 선언된 객체를 담는 변수(instance) private static SingletonClass instance; public String sampleString = "Sample String"; // 싱글톤에 집중하기 위해 public으로 설정 private Single..

    [Kotlin] Kotlin sealed class란 무엇인가?

    sealed class의 등장 배경 여러 자식 Class들이 하나의 부모 Class를 상속 받았다고 했을 때 컴파일러는 부모 Class를 상속 받은 자식 Class들이 있는지 알지 못한다. 예를 들어보자. 우리가 사용자의 런닝 운동을 기록해주는 앱을 만들고 있다. 이때 우리는 사람의 상태를 클래스로 만들고자 한다. 상태의 종류는 3가지로 뛰는 상태(Running), 걷는 상태(Walking), 쉬는 상태(Idle)가 있다. 이는 다음과 같이 코드로 만들어질 수 있다. abstract class PersonState class Running : PersonState() class Walking : PersonState() class Idle : PersonState() 코드1. class 상속 예제 각 P..

    [Kotlin] enum class의 사용하기

    목표 enum class의 사용법을 이해한다. enum class에 대한 함수 만들기 class Task { var state: State = State.WAITING fun printState() = when(state){ State.WAITING -> println("Waiting..") State.PROCESSING -> println("Processing..") State.DONE -> println("Task done") } enum class State { WAITING, PROCESSING, DONE } } 앞의 글에서 위의 코드를 보았다. 하지만, 이 코드는 문제가 있다. 특정한 state가 추가될 때마다 when의 분기에 무조건 print를 위한 처리 로직을 넣어주어야 한다. 공통 함수 ..