inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

9강. 코틀린에서 클래스를 다루는 방법

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

557

이용조

작성한 질문수 11

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")
}

oop java kotlin

답변 2

0

최태현

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

0

이용조

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같은 스코프 펑션 써서 해결하면 되겠꾼여...


 

0

최태현

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

 

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

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

수업노트

0

58

1

싱글톤과 스프링

0

74

2

get() = 3

0

52

2

강사님

0

75

1

강의 복습하면서 생긴 질문

1

97

1

Kotlin과 Java의 현업에서의 활용

0

129

2

data class와 자바의 Lombok을 이용한 DTO 클래스 차이 질문

0

75

1

코틀린에서 상속 시, 주의점에 대한 질문

1

100

3

내용 이해 질문

0

58

1

자바와 코틀린의 함수형 프로그래밍,

1

92

1

플랫폼 타입 설명 문의

2

78

2

널 아님 단언 관련 질문

0

86

1

강의 중 질문

0

81

2

범위 비교 질문

1

93

2

타입캐스팅 궁금한점 질문드립니다.

1

241

2

코틀린 val 질문

0

168

2

완강 후 Kotlin 이런저런 질문 드려봅니다!

3

411

2

확장함수 스타일 질문

0

140

2

확장 프로퍼티 질문

1

158

1

update 함수를 만든다는게 어떤 의미인지 예시가 궁금합니다!

1

283

1

java class의 NotNull 어노테이션 인식

1

264

1

[16강] 확장함수 관련 질문입니다!

1

134

2

리턴타입 사용시 any를 사용해도 괜찮은가요?

1

142

1

안녕하세요 scope function 에 receiver 가 없는 경우

1

172

1