본문 바로가기

TEKHIT ANDROID SCHOOL

[TEKHIT] Constructor

출처 : 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
    }
}

 

Git Hub

 

GitHub - chanho0908/tekit_android_app_school

Contribute to chanho0908/tekit_android_app_school development by creating an account on GitHub.

github.com

 

'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