강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của yyjcafe5263
yyjcafe5263

câu hỏi đã được viết

Hướng dẫn dành cho người mới bắt đầu sử dụng Java và Kotlin

Bài 9. Cách xử lý class trong Kotlin

부 생성자와 정적 팩토리 질문드립니다.

Viết

·

544

2

부생성자 부분에서 조금 햇갈리는게 생겨서 문의드립니다.

그리고 정적팩토리도 말씀해주셨는데 제가 생각한게 맞나 문의드립니다.

코드는 아래와 같습니다.

아래 주석에 질문 있습니다.

constructor (alien: Alien) : this()<- 이부분에서 this를 좀 나중에 호출하고 싶은지 문의드립니다. 밑에 if를 처리하여 호출하고 싶거든요. 불가능한게 맞을까요?

fun main(args: Array<String>) {
    var alien = Alien("에얼리언", AlienType.AType)

    //부생성자로 person 생성
    var personFromSubConstructor = Person(alien)
    println("부생성자로 만든 person의 나이 : ${personFromSubConstructor.age}")

    //정적 팩토리로 person생성
    val personFromStaticFactory = Person.createPersonFromAlien(alien)
    println("주생성자로 만든 person의 나이 : ${personFromStaticFactory.age}")
}

class Person(
    val name: String,
    var age: Int
){
    //에어리언의 타입이 A면 10살, B면 20살
    constructor (alien: Alien) : this(alien.name, 0){ //질문1. 일단 임의값으로 주생성상자를 만들어서 객체를 초기화 한 다음에 바꿀수 밖에 없는 것인지 궁금합니다.
        if(alien.type == AlienType.AType)
            this.age = 10
        else
            this.age = 20
    }

    //질문2. 아래와 같은 코드를 정적 팩토리맞을까요?
    companion object{
        fun createPersonFromAlien(alien: Alien) : Person
        = if(alien.type == AlienType.AType) Person(alien.name, 10) else Person(alien.name, 20)
    }
}

class Alien(
    val name: String,
    val type: AlienType
)

enum class AlienType(type: String){
    AType("AType"), BType("BType")
}
oopjavakotlin

Câu trả lời 2

0

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

좋은 질문 남겨주셔서 감사드립니다!! 🙏 (대댓글로 두 번째 질문에 대해서 남겨두었어요~) 혹시라도 또 궁금하신 점 생기시면 편하게 질문 남겨주세요! 감사합니다!! 🙏

0

yyjcafe5263님의 프로필 이미지
yyjcafe5263
Người đặt câu hỏi

constructor (alien: Alien) : this(alien.name, if(alien.type == AlienType.AType) 10 else 20)
constructor (alien: Alien) : this(alien.name, alien.type.let{
    if(it == AlienType.AType)
        10
    else
        20
})

첫번째 질문은 위와같이 익스프레션이나 let같은 스코프 펑션 써서 해결하면 되겠꾼여...


 

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

안녕하세요 용조님!! 😊😊 아이고~ 네네 맞습니다! 말씀해주신 두 가지 방법으로 name을 처리할 수 있습니다! 다만 개인적으로는 두 번째 방법은 age 를 가변 변수 (var)로 열어야 하다보니 불변 변수 (val) 를 쓸 수 있는 첫 번재 방법을 선호합니다!

 

그리고 질문 주신 두 번째 내용에 대한 답변도 이어 드리자면, 네네 맞습니다!!

Kotlin에서는 static 키워드 대신 companion object 를 활용해 정적인 함수, 정적인 변수를 표현하고 있습니다! 그래서 companion object 안에 객체를 생성하는 코드를 작성하면 정적 팩토리 메소드인 것이 맞습니다!!! ㅎㅎㅎㅎ

Hình ảnh hồ sơ của yyjcafe5263
yyjcafe5263

câu hỏi đã được viết

Đặt câu hỏi