🤍 클래스와 생성자
✅ 클래스 선언
- 클래스는 class 키워드로 선언
- 클래스는 본문에 입력하는 내용이 없다면 {} 생략
- 클래스의 멤버를 생성자, 변수, 함수, 클래스로 구성
- 생성자는 constructor라는 키워드로 선언하는 함수
- 객체를 생성해 사용하며 객체로 클래스의 멤버에 접근
- 객체를 생성할 때 new 키워드를 사용하지 않음
// 클래스
class ClassBasic{
// 클래스의 멤버
// 변수
var name = "sik"
// 함수
fun some(){
print("name : ${name}")
}
// 생성자
constructor(name:String){
this.name = name
}
// 내부 클래스
class innerClass{}
// 생성자
// 주 생성자와 보조 생성자로 구분
// 주 생성자는 필수는 X, 한 클래스에 하나만 생성 가능
// 주 생성자 선언방법 1 - constructor 키워드 선언
class Tester constructor(){}
// 주 생성자 선언방법 2 - constructor 키워드 생략
class Tester2(){}
// 주 생성자 선언방법 3 - 매개변수가 없는 주 생성자 자동 선언
class Tester3{}
}
✅ 주 생성자
- 생성자를 주 생성자와 보조 생성자로 구분
- 주 생성자는 constructor 키워드로 클래스 선언부에 선언함
- 주 생성자 선언은 필수는 아니며, 한 클래스에 하나만 가능함
- constructor 키워드는 생략 가능
주 생성자의 본문 - init 영역
- init 키워드를 이용해 주 생성자의 본문을 구현할 수 있음
- init 키워드로 지정한 영역은 객체를 생성할 때 자동으로 실행
class User(name: String, count: Int){
// init 키워드 - 주생성자 본문 구현
// 객체가 생성될 때 자동으로 실행
init {
println("I am init")
}
}
fun main(){
val user = User("you", 10)
}
생성자의 매개변수를 클래스의 멤버 변수로 선언하는 방법
- 생성자의 매개변수는 기본적으로 생성자에서만 사용할 수 있는 지역 변수
class User(name: String, count: Int){
init {
println("객체 생성시 자동으로 실행 : ${name}, ${count}")
}
}
매개변수를 var나 val 키워드로 선언하면 클래스의 멤버 변수
class User(name: String, count: Int){
var name2 = name
var count2 = count
fun test(){
// 생성자 매개변수를 함수에서 사용 1
// 함수 내부에서 지역변수를 선언하여, 생성자 매개변수를 할당하여 사용
println("테스트 함수에서 생성자의 매개변수 호출 : ${name2}, ${count2}")
}
}
// 생성자 매개변수를 함수에서 사용 2
// 생성자 매개변수 val 키워드를 사용하여 선언
class User2(val name: String, val count: Int){
fun test2(){
println("생성자 매개변수 출력 : ${name}, ${count}")
}
}
✅ 보조 생성자
- 보조 생성자는 클래스의 본문에 constructor 키워드로 선언하는 함수
- 여러 개를 추가할 수 있음
// 보조 생성자
// 보조 생성자 생성 - 클래스 내부에서 constructor 키워드를 사용
// 여러개를 생성 가능
class User3{
constructor(name: String){
println("보조 생성자 1: ${name}")
}
constructor(name: String, count: Int){
println("보조 생성자 2: ${name}, ${count}")
}
}
보조 생성자에 주 생성자 연결
- 보조 생성자로 객체를 생성할 때 클래스 내에 주 생성자가 있다면 this() 구문을 이용해 주 생성자를 호출
- 역순으로 실행
// 보조 생성자 - 주 생성자 연결
class User4(name: String){
init {
println("name: ${name}")
}
// 보조 생성자로 객체 생성시
// 클래스 내에 주 생성자가 있다면, this()구문을 이용해서 생성자를 호출
constructor(name: String, count: Int):this(name){
println("보조 생성자, 주 생성자 연결 1 : ${name}, ${count}")
}
constructor(name: String, count: Int, email: String):this(name, count){
println("보조생성자1, 보조생성자2 연결 : ${name}, ${count}, ${email}")
}
}