지난 시간에는 코틀린의 기초적인 코딩 방법과 타이머 기능을 구현하는 방법에 대해 알아보았습니다. 이번 포스팅부터는 본격적으로 코틀린과 자바의 차이점을 중점적으로 다뤄보려고 합니다. 특히 자바에 익숙한 개발자들이 코틀린으로 넘어올 때 가장 생소하게 느끼는 부분 중 하나가 바로 클래스 생성 방식입니다. 저 역시 자바와는 다른 문법 때문에 초기에 꽤나 고생했던 기억이 납니다.
![[Kotlin][7]코틀린에서 클래스 생성 및 생성자 만드는 방법 init() - 코틀린 클래스[1] 1 코틀린 클래스 만드는 방법](https://pormula.com/wp-content/uploads/2026/01/Kotlin7코틀린에서-클래스-생성-및-생성자-만드는-방법-init-8211-코틀린-클래스1_001.jpg)
코틀린은 자바와 비교했을 때 클래스 생성자와 내부 변수를 정의하는 방식이 매우 독특합니다. 이는 코틀린 언어의 철학인 ‘간결성’을 가장 잘 보여주는 부분입니다. 처음에는 조금 어색할 수 있지만, 익숙해지면 자바보다 훨씬 간결하고 편리하게 코드를 작성할 수 있다는 장점이 있습니다.
1. 코틀린에서의 클래스 생성 방법
class Test() { }
코틀린에서 클래스를 생성하는 기본 문법은 간단합니다. 다른 언어들과 마찬가지로 class 키워드 뒤에 이름을 적어주면 됩니다. 특징적인 점은 코틀린의 기본 접근 제한자(Scope)가 public이므로, 클래스 앞에 별도로 public을 명시할 필요가 없다는 점입니다.
![[Kotlin][7]코틀린에서 클래스 생성 및 생성자 만드는 방법 init() - 코틀린 클래스[1] 2 코틀린 클래스 상속 방법](https://pormula.com/wp-content/uploads/2026/01/Kotlin7코틀린에서-클래스-생성-및-생성자-만드는-방법-init-8211-코틀린-클래스1_002.jpg)
만약 다른 클래스를 상속받고 싶다면 클래스명 뒤에 콜론(:)을 붙이고 상속받을 클래스 이름을 적어주면 됩니다.
![[Kotlin][7]코틀린에서 클래스 생성 및 생성자 만드는 방법 init() - 코틀린 클래스[1] 3 코틀린 인터페이스 구현 방법](https://pormula.com/wp-content/uploads/2026/01/Kotlin7코틀린에서-클래스-생성-및-생성자-만드는-방법-init-8211-코틀린-클래스1_003.jpg)
인터페이스를 추가할 때에는 클래스 이름(또는 상속받은 클래스명) 뒤에 콤마(,)를 사용하여 나열합니다.
class Test() : JLabel(), EventListener { }
위의 코드는 상속과 인터페이스를 동시에 적용한 예시입니다. 부모 클래스의 생성자 호출은 상속 선언 시 괄호 안에 매개변수를 넣어줌으로써 자동으로 이루어집니다.
2. 코틀린에서 매개변수 생성 방법
코틀린은 클래스에 전달될 매개변수를 클래스 이름 바로 옆의 괄호 () 내부에 정의할 수 있습니다. 이를 ‘주 생성자(Primary Constructor)’라고 합니다.
![[Kotlin][7]코틀린에서 클래스 생성 및 생성자 만드는 방법 init() - 코틀린 클래스[1] 4 코틀린 매개변수 생성 예시](https://pormula.com/wp-content/uploads/2026/01/Kotlin7코틀린에서-클래스-생성-및-생성자-만드는-방법-init-8211-코틀린-클래스1_004.jpg)
이 방식으로 변수를 선언하면, 객체를 생성할 때 전달받은 매개변수를 클래스 내부 변수로 옮겨 담는 별도의 코드를 작성할 필요가 없습니다. 자바에서는 필드를 선언하고 생성자에서 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;
}
}
자바는 생성자 내부에 추가적인 코드를 작성해야 하므로 번거롭고 코드의 길이가 길어지지만, 코틀린은 훨씬 간결하게 동일한 기능을 수행합니다.
![[Kotlin][7]코틀린에서 클래스 생성 및 생성자 만드는 방법 init() - 코틀린 클래스[1] 5 매개변수의 생명 주기 설명](https://pormula.com/wp-content/uploads/2026/01/Kotlin7코틀린에서-클래스-생성-및-생성자-만드는-방법-init-8211-코틀린-클래스1_005.jpg)
만약 클래스 매개변수 앞에 var나 val을 붙이지 않는다면, 해당 변수는 클래스의 프로퍼티가 아니라 생성자 내부에서만 사용할 수 있는 지역 변수가 됩니다.
![[Kotlin][7]코틀린에서 클래스 생성 및 생성자 만드는 방법 init() - 코틀린 클래스[1] 6 범위를 벗어난 매개변수 사용 시 오류](https://pormula.com/wp-content/uploads/2026/01/Kotlin7코틀린에서-클래스-생성-및-생성자-만드는-방법-init-8211-코틀린-클래스1_006.jpg)
위의 이미지를 보면, init 블록이 아닌 일반 함수에서 해당 변수를 호출하려고 할 때 오류가 발생하는 것을 확인할 수 있습니다. 이처럼 선언 방식에 따라 변수의 생명주기를 유연하게 결정할 수 있습니다.
3. 코틀린에서의 생성자 init()
코틀린은 클래스 이름과 동일한 이름의 함수로 생성자를 만들지 않습니다. 대신 init 블록을 사용하여 초기화 로직을 구현합니다. 이 블록은 주 생성자를 통해 전달받은 매개변수를 즉시 사용할 수 있습니다.
![[Kotlin][7]코틀린에서 클래스 생성 및 생성자 만드는 방법 init() - 코틀린 클래스[1] 7 코틀린 init 블록 사용법](https://pormula.com/wp-content/uploads/2026/01/Kotlin7코틀린에서-클래스-생성-및-생성자-만드는-방법-init-8211-코틀린-클래스1_007.jpg)
init은 그 자체로 예약어이기 때문에 별도의 반환 타입이나 수식어가 필요 없습니다. 객체가 생성되는 시점에 가장 먼저 실행되어야 하는 초기화 작업들을 이곳에 정의하면 됩니다.
다만, init 블록은 주 생성자와 함께 실행되는 기본 초기화 구문입니다. 만약 다양한 매개변수를 받는 다중 생성자(오버로딩)가 필요하다면 constructor 키워드를 사용해야 합니다. 이 상세한 내용은 다음 포스팅에서 이어서 다루도록 하겠습니다.
이번 포스팅에서는 코틀린의 클래스 구조와 기본적인 생성 방식에 대해 알아보았습니다. 자바에서 코틀린으로 전환할 때 가장 먼저 마주치는 고비이기도 하지만, 원리를 이해하면 코드의 양을 획기적으로 줄여주는 유용한 기능입니다.
오늘 배운 내용이 도움이 되셨기를 바라며, 다음 시간에는 constructor 키워드를 활용한 보조 생성자 활용법으로 찾아뵙겠습니다. 긴 글 읽어주셔서 감사합니다.
다른 글 읽기
이 글의 저작권은 전적으로 작성자인 P_Emblem에게 있으며, 허락 없는 무단 도용 및 복제를 금합니다.