출처 : Tekhit Android App School / Soft campus 윤재성 강사님
🎉 생성자란 ?
- 클래스를 통해 객체를 생성하면 무조건 실행되는 요소
- 클래스를 통해 객체를 생상하면 무조건 동작해야 하는 코드가 있을 경우 생성자에 만들어줍니다.
- 생성자는 매개변수의 형태를 다르게 해 여러개를 만들 수 있지만 자동으로 호출되는 생성자는 무조건 한개 입니다
class TestClass2{
// 생성자
constructor(){
println("TestClass2의 매개 변수가 없는 생성자")
}
// 매개변수의 개수나 타입을 다르게 하면 여러개의 생성자를 제공할 수 있다.
constructor(a1:Int, a2:Int){
println("TestClass2의 매개 변수가 있는 생성자")
println("a1 : $a1")
println("a2 : $a2")
}
}
- 생성자를 작성하지 않은 클래스는 매개 변수가 없고 코드가 작성되어 있지 않은 기본 생성자가 자동으로 추가됩니다.
- 생성자를 만들면 기본 생성자가 자동으로 추가되지 않습니다.
class TestClass3{
var v1 = 0
var v2 = 0
constructor(a1:Int, a2:Int){
println("TestClass3의 생성자 호출")
v1 = a1
v2 = a2
}
}
🎉 Init Block
- 객체를 생성할 때 자동으로 동작하는 부분입니다.
- Java 코드로 변환 시 모든 생성자의 가장 윗부분에 코드가 삽입됩니다.
- 생성자 보다 먼저 동작합니다.
- 생성자를 여러개 만들어 제공할 경우 중복 방지를 위해 init 코드 블럭에 작성합니다.
class TestClass1{
// init 코드 블럭
init{
println("TestClass1의 init 코드 블럭")
println("객체가 생성될 때 자동으로 동작하는 부분입니다")
println("Java 코드로 변환될 때 모든 생성자의 상단에 삽입되는 코드입니다")
}
}
🎉 this
- 객체가 가진 멤버를 지칭하기 위해 사용합니다.
- 메서드나 생성자의 매개변수 이름과 객체의 멤버 변수의 이름이 같을 때 사용합니다.
- 같은 클래스 내의 다른 생성자를 호출하고자 할 때 사용합니다.
- 다른 생성자를 호출할 경우 다른 생성자를 먼저 수행하고 다른 생성자의 수행이 끝나면 본 호출한 생성자의 코드가 동작합니다.
class TestClass4{
var memberA1 = 0
var memberA2 = 0
constructor(memberA1:Int, memberA2:Int){
// 여기서 사용하는 memberA1과 memberA2는 매개변수를 지칭한다.
println("memberA1 : $memberA1")
println("memberA2 : $memberA2")
// 생성자나 메서드의 매개변수 이름과 맴버 변수의 이름이 같은 경우
// 맴버 변수를 사용하고자 한다면 this를 사용한다.
// this는 객체 자기 자신을 기르키는 키워드이다.
this.memberA1 = memberA1
this.memberA2 = memberA2
}
// 생성자에서 다른 생성자를 호출한다.
constructor():this(1000, 2000){
println("매개변수가 없는 생성자 호출")
}
}
🎉 주생성자
- 하나의 클래스에 생성자가 여러개 있을 경우 주 생성자를 지정할 수 있습니다.
- 주 생성자가 아닌 다른 생성자들은 모두 주 생성자를 반드시 호출해야 합니다.
- 아래 코드의 경우 생성자에 명시한 변수들은 멤버 변수로 정의됩니다.
- 매개 변수 3개를 가지고 있는 생성자가 자동으로 추가됩니다.
- TestClass6은 TestClass5와 같은 형태로 변환됩니다.
- 주 생성자 정의시 constructor는 생략 가능합니다.
class TestClass5{
var a1 = 0
var a2 = 0
var a3 = 0
constructor(a1:Int, a2:Int, a3:Int){
this.a1 = a1
this.a2 = a2
this.a3 = a3
}
}
// 주 생성자 사용
class TestClass6(var a1:Int, var a2:Int, var a3:Int)
- 주 생성자에 정의하지 않은 멤버 변수가 있을시 다른 생성자를 하나 만들어 주 생성자에 정의하지 않은 변수도 값을 넣어줄 수 있어야 합니다.
- 이 때, 추가적으로 작성한 생성자는 반드시 호출해줘야 하며 생성자( ) : this() 형태로 주 생성자를 반드시 호출 해줘야 합니다.
class TestClass7(var a1:Int, var a2:Int){
// 주 생성자에 정의하지 않은 맴버 변수
var a3:Int = 0
// 다른 생성자를 하나 만들어서 주생성자에 정의하지 않은 변수도 값을 넣어줄 수 있어야 한다.
// 이때, 추가 적으로 작성한 생성자는 반드시 주 생성자를 호출해야 한다.
// 생성자():this() 형태로 하여 주 생성자를 반드시 호출해줘야 한다.
constructor(a1:Int, a2:Int, a3:Int) : this(a1, a2) {
this.a3 = a3
}
}
'TEKHIT ANDROID SCHOOL' 카테고리의 다른 글
[TEKHIT] Abstract & Interface (0) | 2024.01.05 |
---|---|
[TEKIT] 지연 초기화와 오버라이딩 (0) | 2024.01.05 |
[TEKHIT] 상속과 프로퍼티 (0) | 2024.01.05 |
[TEKHIT] 객체 지향 프로그래밍 (0) | 2024.01.02 |
[TEKHIT] 기본 문법 (0) | 2023.12.28 |