Y_Ding

클래스와 생성자 본문

TodayILearned/Android&Kotlin

클래스와 생성자

YJ_ILY 2023. 9. 19. 00:33

클래스

  • 생성자, 변수, 함수, 클래스로 구성
  • 코틀린에서는 클래스의 생성자를 본문이 아닌 선언부에 작성할 수 있음
  • 그렇기 때문에 본문이 없는 클래스도 의미가 있음
  • 클래스 안에 다른 클래스 선언 가능
  • 객체를 생성해 객체로 클래스의 멤버에 접근
val user = User("Ryu")
user.someFun()

* User("Ryu") : 객체 생성 구문
* 클래스 이름과 같은 함수로 객체를 생성

생성자(주 생성자 / 보조 생성자)

  • 주 생성자와 보조 생성자를 모두 선언한다면 반드시 생성자끼리 연결해주어야 함
  • 보조 생성자에서 주 생성자를 호출해주어야 함
  • 클래스 내에 주 생성자가 있다면 this() 구문을 이용해 주 생성자 호출
보조 생성자에서 주 생성자 호출
class User(name: String) {
	constructor(name: String, age: Int): this(name){
    	(......)
    }
}
fun main() {
	val user = User("Ryu", 20)
}



보조 생성자가 여러개일 때
class User(name: String) {
	constructor(name: String, age: Int): this(name){
    	(......)
    }
    
    constructor(name:String, age: Int, email: String): this(name, age){
    	(..........)
    }
}
fun main() {
	val user = User("Ryu", 20, "email@naver.com")
}

주 생성자

  • constuctor 키워드 사용
  • 한 클래스에 하나만 가능
  • 클래스의 주 생성자를 선언하지 않으면 컴파일러가 매개변수 없는 주 생성자를 자동으로 추가
  • 필요에 따라 매개변수 선언 가능
주 생성자의 매개변수
class User(name:String, age: Int) {
}
* 생성자의 매개변수는 기본적으로 생성자에서만 사용할 수 있는 지역변수


객체를 생성할 때 매개변수 타입과 개수에 맞는 인자 전달해야 함
val user = User("Ryu", 10)

init 키워드

  • 코틀린 클래스 안에서 init키워드로 지정한 영역은 객체를 생성할 때 자동으로 실행됨
  • 주 생성자의 본문을 구현하고 싶을 때 사용

생성자의 매개변수는 지역 변수이기 때문에 다른 함수에서는 사용할 수 없음! 사용하고 싶다면?

방법 1.

클래스의 멤버 변수를 선언하고 주 생성자의 본문인 init 영역에서 매개변숫값을 클래스의 멤버 변수에 대입

class User(name:String, age: Int) {
	//클래스 멤버 변수 선언
    var name: String
    var age: Int
    
    init {
    	//클래스 멤버 변수에 생성자 매개변숫값 대입
        this.name = name
        this.age = age
    }
    
    fun someInfo() {
    	println("name: $name, age: $age")
    }
}

fun main() {
	val user = User("Ryu", 20)
    user.someInfo()
}


실행 결과 : name : Ryu, age : 20

방법2.

  • 생성자의 매개변수를 클래스의 멤버 변수로 선언하는 방법 (조금 더 간단한 코드 작성)
  • 주 생성자의 매개변수는 생성자 안에서만 사용할 수 있는 지역 변수지만 매개변수를 var나 val 키워드로 선언하면 클래스의 멤버 변수가 됨
  • 원래 함수는 매개변수를 선언할 때 val,var 키워드 추가 불가능
  • 주 생성자에서만 유일하게 var, val 키워드로 매개변수 선언 가능 , 이렇게 하면 클래스의 멤버 변수가 됨
class User(val name: String, val age: Int) {
	fun someInfo() {
    	println("name: $name, age: $age")
    }
}

fun main() {
	val user = User("Ryu", 20)
    user.someInfo()
}

실행 결과: name: Ryu, age: 20

보조 생성자

  • 클래스의 본문에 constructor 키워드로 선언
  • 클래스 본문에 선언하므로 여러 개 추가 가능

 

'TodayILearned > Android&Kotlin' 카테고리의 다른 글

AlldayFit 팀프로젝트  (0) 2023.11.01
미세먼지 확인 앱 만들기  (0) 2023.09.18
코틀린 이해하기  (0) 2023.09.14
구글 지도앱 만들기  (2) 2023.09.14
사용자 위치 얻기  (0) 2023.09.14