04-01 클래스와 생성자
클래스 선언
- 코틀린에서 클래스는 class 키워드로 선언한다
- 예) class Uber { }
- 코틀린에서는 생성자는 contructor라는 키워드로 선언한다
- 예)
class User{
constructor(name:String)
}
- 코틀린에서는 객체를 생성할 때 new 키워드를 사용 하지 않는다
○ 예(java)) SomeClass sclass = new SomeClass(); 같이 new는 없음
○ 예(kotlin)) val user = User("kim")
User.someFun()
주 생성자
- 클래스에서 코틀린는 주 생성자와 보조 생성자로 구분한다
- 주 생성자 선언
○ class User constructor( ) { }
○ 주 생성자를 선언할 때 constructor 키워드 생략 가능
○ class User ( ) { }
- 만약 클래스의 주 생성자를 선언하지 않으면 compiler 자동으로 contructor를 만든다
○ class User{ }
주 생성자와 매개변수
- 주 생성자를 선언할 때 필요에 따라 매개변수를 선언 가능
- 예시1) (주 생성자의 매개변수)
class User{
constructor(name:String, count: Int)
}
- 객체를 생성할 때 매개변수의 타입과 개수에 맞는 인자를 전달해야한다
- 예시2) (예시1의 매개변수가 있는 생성자 호출)
val user = User("kkang",10)
주 생성자의 본문 - init 영역
- 주 생성자를 이용해 객체를 생성할 때 특정 로직을 수행 가능
- 하지만 밑에 예시처럼 하면 오류남
- 예시)
class User{
}
{
}
- 주 생성자에는 { } 를 추가할수 없다
§ 이유: 주 생성자 클래스 선언부에 있기 때문
§ 이럴때 init 키워드 사용해서 주 생성자오 본문을 구현 가능
- 코틀린의 클래스 안에서 init 키워드로 지정한 영역은 객체를 생성할 때 자동으로 실행
§ `init`영역은 보조 생성자로 객체를 생성할 때도 실행 됨
§ `init` 영역은 일반적으로 주 생성자의 본문을 구현하는 용도로 사용한다
- 예시)
class User{
init{
println("i am init...\n iam groot")
}
}
새성자의 매개변수를 클래스의 멤버 변수로 선언하는 방법
- 생성자의 매개변수는 기본적으로 생성자에서만 사용할 수 있는 지역 변수
▪ 예시1) (생성자의 매개 변수를 init 영역에서 사용하는 예)
class User(name: String, count: Int){
init{
println("name: $name, count: $count") //성공
}
fun someFun(){
println("name: $name, count: $count") //error
}
}
▪ 예시2) (생성자의 매개 변수를 다른 함수에서 사용하는 예)
class User(name: String, count: Int){
//클래스 멤버 변수 선언
var name: String
var count: Int
init{
this.name = name
this.count = count
}
fun someFun(){
println("name: $name, count: $count") //성공
}
}
fun main() {
var User = User("stef",10)
User.someFun()
}
=>결과: name: stef, count: 10
§ 설명:클래스의 멤버 함수 someFun()에서 생성자의 매개변수를 이용하고자 클래스의 멤버 변수를 선언하고 주 생성자의 본문인 init 영역에서 매개변숫값을 클래스 멤버 변수에 대입
- 예시2 방법 말고도 init 사용하는게 아니라 매개변수를 var나 val 키워드로 선언하면 멤버 변수가 된다
▪ 예시3)
class User(val name: String, val count: Int){
fun someFun(){
println("name: $name, count: $count") //성공
}
}
fun main() {
var User = User("stef",10)
User.someFun()
}
- 원래는 매개변수를 선언할 때 var 나 val 키워드를 추가할 수 없다
▪ 하지만 주 생성자에서만 var나 val 선언 가능