[Kotlin][7]코틀린에서 클래스 생성 및 생성자 만드는 방법 init() – 코틀린 클래스[1]

지난 시간에는 코틀린의 기초적인 코딩 방법과 타이머 기능을 구현하는 방법에 대해 알아보았습니다. 이번 포스팅부터는 본격적으로 코틀린과 자바의 차이점을 중점적으로 다뤄보려고 합니다. 특히 자바에 익숙한 개발자들이 코틀린으로 넘어올 때 가장 생소하게 느끼는 부분 중 하나가 바로 클래스 생성 방식입니다. 저 역시 자바와는 다른 문법 때문에 초기에 꽤나 고생했던 기억이 납니다.

코틀린 클래스 만드는 방법

코틀린은 자바와 비교했을 때 클래스 생성자와 내부 변수를 정의하는 방식이 매우 독특합니다. 이는 코틀린 언어의 철학인 ‘간결성’을 가장 잘 보여주는 부분입니다. 처음에는 조금 어색할 수 있지만, 익숙해지면 자바보다 훨씬 간결하고 편리하게 코드를 작성할 수 있다는 장점이 있습니다.

1. 코틀린에서의 클래스 생성 방법

class Test() { }

코틀린에서 클래스를 생성하는 기본 문법은 간단합니다. 다른 언어들과 마찬가지로 class 키워드 뒤에 이름을 적어주면 됩니다. 특징적인 점은 코틀린의 기본 접근 제한자(Scope)가 public이므로, 클래스 앞에 별도로 public을 명시할 필요가 없다는 점입니다.

코틀린 클래스 상속 방법

만약 다른 클래스를 상속받고 싶다면 클래스명 뒤에 콜론(:)을 붙이고 상속받을 클래스 이름을 적어주면 됩니다.

코틀린 인터페이스 구현 방법

인터페이스를 추가할 때에는 클래스 이름(또는 상속받은 클래스명) 뒤에 콤마(,)를 사용하여 나열합니다.

class Test() : JLabel(), EventListener { }

위의 코드는 상속과 인터페이스를 동시에 적용한 예시입니다. 부모 클래스의 생성자 호출은 상속 선언 시 괄호 안에 매개변수를 넣어줌으로써 자동으로 이루어집니다.

2. 코틀린에서 매개변수 생성 방법

코틀린은 클래스에 전달될 매개변수를 클래스 이름 바로 옆의 괄호 () 내부에 정의할 수 있습니다. 이를 ‘주 생성자(Primary Constructor)’라고 합니다.

코틀린 매개변수 생성 예시

이 방식으로 변수를 선언하면, 객체를 생성할 때 전달받은 매개변수를 클래스 내부 변수로 옮겨 담는 별도의 코드를 작성할 필요가 없습니다. 자바에서는 필드를 선언하고 생성자에서 this.variable = variable 식의 할당 과정이 필요했지만, 코틀린은 이 과정을 생략할 수 있어 매우 편리합니다.

코틀린과 자바의 코드를 비교해보면 그 차이가 극명하게 드러납니다.

[코틀린 예시]

class Test(
    private var num: Int,
    private var name: String
)

[자바 예시]

public class Test {
    private int num;
    private String name;

    public Test(int num, String name) {
        this.num = num;
        this.name = name;
    }
}

자바는 생성자 내부에 추가적인 코드를 작성해야 하므로 번거롭고 코드의 길이가 길어지지만, 코틀린은 훨씬 간결하게 동일한 기능을 수행합니다.

매개변수의 생명 주기 설명

만약 클래스 매개변수 앞에 varval을 붙이지 않는다면, 해당 변수는 클래스의 프로퍼티가 아니라 생성자 내부에서만 사용할 수 있는 지역 변수가 됩니다.

범위를 벗어난 매개변수 사용 시 오류

위의 이미지를 보면, init 블록이 아닌 일반 함수에서 해당 변수를 호출하려고 할 때 오류가 발생하는 것을 확인할 수 있습니다. 이처럼 선언 방식에 따라 변수의 생명주기를 유연하게 결정할 수 있습니다.

3. 코틀린에서의 생성자 init()

코틀린은 클래스 이름과 동일한 이름의 함수로 생성자를 만들지 않습니다. 대신 init 블록을 사용하여 초기화 로직을 구현합니다. 이 블록은 주 생성자를 통해 전달받은 매개변수를 즉시 사용할 수 있습니다.

코틀린 init 블록 사용법

init은 그 자체로 예약어이기 때문에 별도의 반환 타입이나 수식어가 필요 없습니다. 객체가 생성되는 시점에 가장 먼저 실행되어야 하는 초기화 작업들을 이곳에 정의하면 됩니다.

다만, init 블록은 주 생성자와 함께 실행되는 기본 초기화 구문입니다. 만약 다양한 매개변수를 받는 다중 생성자(오버로딩)가 필요하다면 constructor 키워드를 사용해야 합니다. 이 상세한 내용은 다음 포스팅에서 이어서 다루도록 하겠습니다.


이번 포스팅에서는 코틀린의 클래스 구조와 기본적인 생성 방식에 대해 알아보았습니다. 자바에서 코틀린으로 전환할 때 가장 먼저 마주치는 고비이기도 하지만, 원리를 이해하면 코드의 양을 획기적으로 줄여주는 유용한 기능입니다.

오늘 배운 내용이 도움이 되셨기를 바라며, 다음 시간에는 constructor 키워드를 활용한 보조 생성자 활용법으로 찾아뵙겠습니다. 긴 글 읽어주셔서 감사합니다.

다른 글 읽기


이 글의 저작권은 전적으로 작성자인 P_Emblem에게 있으며, 허락 없는 무단 도용 및 복제를 금합니다.

위로 스크롤