Sam Story

Kotlin 기본 생성자 오버로딩 본문

Kotlin

Kotlin 기본 생성자 오버로딩

Sam H 2024. 4. 20. 19:23

 

오늘은 코틀린의 기본 생성자를 오버로딩 하는 방법에 대해서

 

간단하게 포스팅 해보려 한다.

 

 

이글을 포스팅 하는 이유는

 

MVVM 패턴을 공부하는 중에 텍스트뷰의 초기값을 설정해주고 싶은데

 

이미 레이아웃xml 파일에서 데이터 바인딩을 이용해 뷰모델로 값을 호출해서

 

지정해 주었기 때문에 초기값 설정을 어떻게 할까하는 생각에서 찾아보게 되었고

 

기본 생성자를 이용해서 초기화 해주면 되겠다 까지 생각이 도달하여

 

유용할것 같아서 포스팅을 남기게 되었다.

 

1. 생성자란 ?

객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 메서드의 일종이다.

 

메서드의 일종으로 분류하긴 했지만 일반적으로 사용하는 메서드와는 엄연히 다르다.

 

이러한 생성자중에서 기본 생성자는

 

별다른 매개변수 없이 그 클래스의 객체를 초기화 해줄때 호출되는 생성자다.

 

 

 

2. 오버로딩 이란?

메서드나 클래스의 이름은 같고 매개변수의 유형과 개수가 다르도록 하는것을 의미한다.

 

※리턴값만을 다르게 갖는 오버로딩은 작성할 수 없다.

 

간단히 말하면 기존에 없던 새로운 생성자나 메서드를 정의하는 것이다.

 

 

 

3. 기본 생성자 오버로딩이란?

오늘 포스팅할 주제인 기본 생성자 오버로딩은

 

간단히 말하면 객체를 만들었을때 그 객체가 갖고있는

 

변수들을 초기화 해주거나, 객체내 메서드들을 호출할 수 있는 방법이다.

 

글로만 풀었을 때에는 이해하는데 어려움이 있으니

 

예제 코드를 보며 간단히 이해 해보도록 하자.

 

 

 

4. 예제

이번 예제는 안드로이드 스튜디오를 사용한다.

 

텍스트 뷰에 간단하게 학생의 정보를 띄워주는 예제다.

 

예제를 통해 기본생성자를 어떻게 사용하는지 알아보자.

 

 

Student 클래스

package com.example.defaultconstructorexample

class Student {

    var name: String?
    var age: Int
    var hobby: String?

    // 기본 생성자가 호출 되었을때 값이 초기화
    init {

        name = "Sam"
        age = 19
        hobby = "숨쉬기 운동"

    }

}

 

여기서 쓰이는 init의 내용이 기본 생성자가 호출되었을때 일어난다.

 

원래의 경우라면 각 변수들을 선언해줬을때 초기화 해주는게 일반적이지만

 

기본 생성자를 이용해서도 초기화 할 수 있다는걸 보여주기 위해서 이번 예제를 만들었다.

 

만약 이코드에서 init의 내용을 지워보면 변수들의 값을 초기화 하라는 에러가 발생할 것이다.

 

 

메인 액티비티 레이아웃

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <!-- 이름 -->
    <TextView
        android:id="@+id/nameTextView"
        android:layout_weight="1"
        android:gravity="center"
        android:textSize="30sp"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>

    <!-- 나이 -->
    <TextView
        android:id="@+id/ageTextView"
        android:layout_weight="1"
        android:gravity="center"
        android:textSize="30sp"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>

    <!-- 취미 -->
    <TextView
        android:id="@+id/hobbyTextView"
        android:layout_weight="1"
        android:gravity="center"
        android:textSize="30sp"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>

</LinearLayout>

 

레이아웃 코드에서 각 텍스트뷰에 별도의 text 값을 지정해주지 않았다.

 

각 텍스트뷰들의 text의 값은 메인 액티비티에서 할당하기 때문이다.

 

 

메인 액티비티

package com.example.defaultconstructorexample

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

class MainActivity : AppCompatActivity() {

    // textView 선언
    lateinit var nameTextView: TextView
    lateinit var ageTextView: TextView
    lateinit var hobbyTextView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // textView 초기화
        nameTextView = findViewById(R.id.nameTextView)
        ageTextView = findViewById(R.id.ageTextView)
        hobbyTextView = findViewById(R.id.hobbyTextView)

        // student 객체 생성 및 초기화
        val student = Student()

        // 텍스트뷰에 student 객체의 변수 할당
        nameTextView.text = student.name
        ageTextView.text = student.age.toString()
        hobbyTextView.text = student.hobby

    }

}

 

 

 

이제 실행결과를 보도록 하자.

 

실행결과

실행 결과

 

 

실행결과에서 볼 수 있듯이 

 

기본 생성자가 호출 되었을때 초기화 해준 변수들이

 

각 텍스트뷰에 할당되는걸 볼 수 있다.

 

 

오늘 예제로만 봤을때는 왜 이런 불필요한 과정을 사용해야

 

라는 생각이 들수도 있지만

 

MVVM 패턴에서 데이터바인딩을 사용할때 초기값을 지정해줄때

 

유용하게 쓸 수 있는 예제라고 생각한다.

 

 

오늘 예제 깃허브 주소

nam-su/DefaultConstructorExample (github.com)

 

GitHub - nam-su/DefaultConstructorExample

Contribute to nam-su/DefaultConstructorExample development by creating an account on GitHub.

github.com

 

'Kotlin' 카테고리의 다른 글

Kotlin 조건문  (0) 2024.02.02
Kotlin 변수와 자료형  (0) 2024.02.01