Kotlin - Object

2023. 4. 23. 03:41·📘 Backend/Kotlin

💡 코틀린에서 Object 키워드를 다루는 법

목차

  • Companion Object
  • Singleton
  • Anonymous Class

💡 Companion Object

코틀린에서 Static 함수는 companion object(동반 객체)를 선언하여 사용한다.

하지만 자바의 Static과 companion object는 비슷해보이지만 근본적으로 다르다.


  • conpanion object는 하나의 객체로 간주된다
  • 이름을 붙일수도 있고 companiom 객체에 인터페이스 구현도 가능하다.
  • conpanion에 유틸성 함수도 넣을 수 있지만 최상단 파일을 활용하는게 더 좋다.

자바 코드 예시

// Java
public class JavaPerson {
    private static final int MIN_AGE = 1;

    public static JavaPerson newBaby(String name) {
        return new JavaPerson(name, MIN_AGE);
    }

    private String name;
    private int age;

    private JavaPerson(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

코틀린 코드 예시

static 변수인 MIN_AGE에 붙은 const는 상수인게 확실할때 사용하며,

기본타입과 String 타입에만 붙일 수 있다.

const 키워드를 안붙이면 런타임 시 변수가 할당되지만 붙이면 컴파일 시 변수가 할당된다.


companion에 Factory라는 이름을 부여하고 Log 인터페이스도 구현한 예시

// Kotlin
class Person private constructor(
    var name: String,
    var age: Int
) {
    companion object Factory : Log {
        private const val MIN_AGE = 1

        fun newBaby(name: String): Person {
            return Person(name, MIN_AGE)
        }

        override fun log() {
            println("대충 Log 인터페이스의 abstract 메서드 구현한 내용")
        }
    }
}

Companion 호출

코틀린 코드에서 @JvmStatic Annotation을 쓰면 자바에서 static 처럼 바로 사용이 가능.

fun main() {
    // 이름이 없는 Companion 호출
    Person.Companion.newBaby("A")

    // Factory라는 이름이 있는 Companion 호출
    Person.Factory.newBaby("A")
}

💡 Singleton

코틀린에서 싱글톤은 너무 간단해서 설명할게 거의 없다.

그냥 object키워드만 붙여주면 싱글톤 객체가 생성되며 사용법은 자바와 같다.


자바 코드 예시

public class JavaSingleton {
    private Java Singleton(){}
    private static final JavaSingleton INSTANCE = new JavaSingleTon();

    public static JavaSingleton getInstance() {
        return INSTANCE;
    }
}

코틀린 코드 예시

fun() {
    println(Singleton.a)
    Singleton.a += 10
    println(Singleton.a)
}

object Singleton {
    var a: Int = 0
}

💡 Anonymous Class

익명클래스란?

특정 인터페이스나 클래스를 상속받은 구현체를 일회성으로 사용할 때 쓰는 클래스


자바 코드 예시

자바의 익명 클래스 기본 구현 방법

// 익명 클래스 기본 구현 방법
함수(new 구현객체) {
    @Override
    메서드 구현(){}
}

Movable 인터페이스의 move(), fly()를 구현한 익명 클래스 구현 예시

public static void main(String[] args) {
    moveSomething(new Movable() {
        @Override
        public void move() { System.out.println("움직인다."); }

        @Override
        public void fly() { System.out.println("난다."); }
    });
}

private static void moveSomething(Movable movable) {
    movable.move();
    movable.fly();
}

코틀린 코드 예시

위의 자바 예시를 그대로 코틀린으로 변환한 코드 예시

fun main() {
    moveSomething(
        object : Movable {

            override fun move() {
                println("무브 무브")
            }

            override fun fly() {
                println("날다 날다")
            }
        }
    )
}

private fin moveSomething(Movable movable) {
    movable.move()
    movable.fly()
}
저작자표시 (새창열림)

'📘 Backend > Kotlin' 카테고리의 다른 글

Kotlin - Classes  (0) 2023.04.23
Kotlin - 중첩 클래스  (0) 2023.04.23
Kotlin - Extension Function  (0) 2023.04.23
Kotlin - Access Control  (0) 2023.04.22
Kotlin - Inheritance  (0) 2023.04.21
'📘 Backend/Kotlin' 카테고리의 다른 글
  • Kotlin - Classes
  • Kotlin - 중첩 클래스
  • Kotlin - Extension Function
  • Kotlin - Access Control
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      Lock #Thread #Concurrency
      GStreamer #Pipeline
      React #Markdown
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Kotlin - Object
    상단으로

    티스토리툴바