일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 안드로이드 스튜디오 tts
- 안드로이드 스튜디오 custom dialog
- 리사이클러뷰 아이템 재사용
- apache란
- recyclerview item recycle
- 변수
- AAC
- savedinstancestate
- LifeCycle
- 다른 객체 리스트의 비교
- 아파치란
- 안드로이드 스튜디오 style
- java thread 예제
- 객체지향 프로그래밍 5가지 원칙
- 아파치 엔진엑스
- 이중for문 사용 안하기
- 안드로이드 스튜디오 커스텀 다이얼로그
- 안드로이드 디자인패턴
- java
- Kotlin
- Thread
- 안드로이드 스튜디오 반복되는 레이아웃 코드
- 안드로이드 스튜디오 인터넷 연결 확인
- 안드로이드 스튜디오 인터넷 연결 안되어 있을 때
- apache nginx
- edittext 연결
- 자바 스레드 예제
- dagger error
- 디자인 패턴 예제
- hilt error
- Today
- Total
Sam Story
Kotlin 기본 생성자 오버로딩 본문
오늘은 코틀린의 기본 생성자를 오버로딩 하는 방법에 대해서
간단하게 포스팅 해보려 한다.
이글을 포스팅 하는 이유는
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' 카테고리의 다른 글
코루틴 (Coroutine) (1) | 2025.02.05 |
---|---|
늦은 초기화 lateinit var , by lazy (0) | 2024.11.04 |
Kotlin 조건문 (0) | 2024.02.02 |
Kotlin 변수와 자료형 (0) | 2024.02.01 |