2024.02.05 - [언어/Kotlin] - [Kotlin] 클래스의 기본구조
[Kotlin] 클래스의 기본구조
1. 기본구조 클래스란 '값'과 그 값을 사용하는 '기능'들을 묶어놓은 것이다. 우리가 지금까지 배운 여러 가지 자료형들 역시 Kotlin 내부에서는 모두 클래스로 이루어져 있다고 한다. 클래스 = 속
goharry.tistory.com
앞서서 코틀린 클래스의 기본 구조에 대해서 알아보았는데 이번에는 생성자에 대해서 알아볼 것이다.
그리고 마지막으로 상속에 대해서 공부해 보면 다시 클래스를 전부 정리할 수 있을 것 같다.
목차
- 주생성자
- 보조생성자
1. 주생성자 (Primary Consturctior)
앞의 글에서 사용했던 클래스를 가져와서 분석해보겠습니다.
class Person(var name:String, var birthYear:Int, var job:String){
fun introduce(){
println("저는 ${birthYear}년생 ${name} 입니다. \n제 직업은 ${job} 입니다. ")
}
}
클래스 이름 옆에 괄호로 둘러싸인 코드를 주 생성자라고 부릅니다.
즉 (var name:String, var birthYear:Int, var job:String) 이 부분이 주 생성자이다.
주 생성자는 생성자 파라미터를 지정하고 그 생성자 파라미터에 의해 초기화되는 프로퍼티를 정의하는 두 가지 목적에 쓰이는데 코틀린의 클래스는 하나의 주생성자와 다수의 부생성자를 가질 수 있다.
좀 더 간략하게 해서 살펴보는 게 좋을 것 같아서 정리해 봤습니다.
//1번
//클래스명 옆에 constructor()를 붙이고 init 블록을 사용하는 경우
class Person constructor(_name:String){
val name : String
init{
name = _name
}
}
//2번
//생성자 매개변수로 값을 받아 클래스 내의 멤버에 대입시켜 사용하는 경우
//자바에서도 자주 볼 수 있는 방식이다.
class Person(_name:String){
val name = _name
}
//3번
//가장 간단하게 사용하는 방법
class Person(val name:String)
1,2,3번은 모두 같은 생성자를 정의하는 것입니다.
이 중에서 3번의 방식이 제일 간단하고, 함수 파라미터처럼 생성자 파라미터에도 아래와 같이 디폴트 값을 정의할 수 있습니다.
또 클래스의 인스턴스를 만들 때에는 자바와 달리 new 키워드 없이 생성자를 직접 호출하면 됩니다.
var A = Person("유재석")
2. 부생성자(Secondary constructor)
주생성자가 있다면 부생성자도 있을 것이다.
보조생성자는 constructor라는 키워드를 사용하는데 init처럼 constructor라는 이름의 함수를 만들고 괄호 안에 필요한 파라미터를 추가해줘야 한다.
중요한 점은 반드시 기본생성자를 통해서 속성을 초기화해주어야 한다.
양세찬과 지석진은 name과 birthYear만 넘겨주고 job은 개그맨으로 고정해서 초기화하도록 만들어보자.
그리고 중괄호 안에 println이 잘 나오는지 확인까지 해보겠습니다.
fun main() {
var A = Person("유재석",1972,"개그맨")
var B = Person("김종국",1976,"가수")
var C = Person("송지효",1981,"배우")
var D = Person("양세찬",1986 )
var E = Person("지석진", 1966)
}
class Person(var name:String, var birthYear:Int, var job:String){
init{
println("저는 ${birthYear}년생 ${name} 입니다. \n제 직업은 ${job} 입니다. ")
}
constructor(name:String, birthYear:Int) : this(name, birthYear, "개그맨"){
println("보조 생성자가 사용되었습니다.")
}
}
코드를 보면 (:)을 확인할 수 있는데 이것은 코틀린에서 상속을 의미한다.
여기선 기본생성자를 상속받았다는 뜻이다.
왜냐하면 부생성자로 만든 생성자들은 반드시 기본생성자가 갖고 있는 매개변수들을 갖고 있어야 한다.
위 코드에서 주생성자를 없애보면 this 밑에 빨간 밑줄이 생기며 에러가 나온다.
짜잔! 이건 결과이다.
기본생성자로 만들었던 인스턴스 외에 보조생성자를 사용한 인스턴스 2개는 따로 추가해 줬던 내용이 더 추가되는 것을 볼 수 있습니다.
기본생성자와 보조생성자는 클래스를 사용하는 사람에게 다양한 방법으로 인스턴스를 생성하는 방법을 제시함으로써 편의를 제공하는 기능임을 기억하라고 배웠던 것이 생각난다!
상속은 다음시간에 공부해 보겠습니다.
끝!
'코틀린' 카테고리의 다른 글
[Kotlin] ArrayList 정의 / 특징 / 사용법 (0) | 2024.04.04 |
---|---|
[Kotlin] 클래스 상속(Inheritance) (0) | 2024.02.12 |
[Kotlin] 클래스의 기본구조 (1) | 2024.02.05 |
[Kotlin] 반복문 (1) | 2024.01.31 |
[Kotlin] 조건문 (0) | 2024.01.30 |