Search

1조 멘토링 1주차 -3

분류
기타
담당멘토
양민욱
멘토링 요청시간
2023/06/30 20:00
멘토링 시간
2023/06/30 20:00-21:00
멘토링방
멘토링룸1
배정상태
해결완료
비용지급
지급완료
번호
0
신청팀
기초멘토링팀
소요시간
1
작성자
천성민/차지훈

질문(예시)

6월 30일
10_Constructor
1.
강의 중 77행 생성자정의에서 이런 형태의 생성자는 “딱 하나만 생성 할 수 있다”고 하셨는데 딱 하나의 개념이 무엇인가요?
2.
생성자에서 this의 개념과 목적, 동작원리가 무엇인가요?
특정한 상황을 방지하기 위한 목적도 있을까요?
3.
보조생성자를 통해 강제로 매개변수를 호출한다는 개념이 생각보다 쓸모가 많아보이는데 현업에서 어떤경우에 많이 사용되어지고 일반적이지 않은 경우에는 어떻게 사용되는지 궁금합니다
4.
처음에는 개념이 너무 복잡하게 느껴졌는데 개념을 채워 나갈수록 오히려 쉽게느껴지는 경향이 생깁니다 :) 그래서 한 편으로는 생성자문법을 사용 할 경우 실수를 많이 하게 될 것같은 생각도 드는데 생성자 사용 시 많은 사람들이 간과하거나 실수하는 것은 어떤부분들이 있는지 궁금합니다
어려운 부분
생성자, 상속
Kotlin의 형식이 헷갈려요.
ex) 생성자만 있는 클래스는 가로 형태로만 한다.
2주차 멘토링
7월 7일(금) 8시

멘토 답변

(질문) 강의 중 77행 생성자정의에서 이런 형태의 생성자는 “딱 하나만 생성 할 수 있다”고 하셨는데 딱 하나의 개념이 무엇인가요?
매개변수의 수, 타입이 동일한 생성자는 클래스 내에서 하나만 존재할 수 있습니다
class B { constructor(a1: Int) constructor(a2: Int) // x : 개수와 타입이 동일한 생성자가 같은 클래스 내에 정의되어 있기 때문에 선언 불가능 constructor(a3: Long) // o : 개수는 동일하지만 타입이 다르기 때문에 선언 가능 }
Kotlin
복사
(질문)생성자에서 this의 개념과 목적, 동작원리가 무엇인가요? 특정한 상황을 방지하기 위한 목적도 있을까요?
코틀린 문법에서 서브 생성자는 반드시 기본 생성자를 호출해야 한다. 생성자 문법에서 this는 기본 생성자를 의미한다.
class EmptyConstructor == class EmptyConstructor constructor() // 코틀린 문법에서 모든 클래스는 매개변수가 없는 기본 생성자를 기본으로 가지고 있는다. class EmptyConstructor { constructor(a1: Int): this() { ... //this는 매개변수 없는 기본 생성자를 의미 } constructor(a2: Long) { } // o : 매개변수가 없는 기본생성자는 생략이 가능하다. }
Kotlin
복사
class A(val a1: Int) { // Int Type 매개변수 하나를 주입 받는 기본 생성자 constructor(a1: Int): this(a1) { ... } }
Kotlin
복사
(질문) 보조생성자를 통해 강제로 매개변수를 호출한다는 개념이 생각보다 쓸모가 많아보이는데 현업에서 어떤경우에 많이 사용되어지고 일반적이지 않은 경우에는 어떻게 사용되는지 궁금합니다
개인적인 경험으로는 보조 생성자를 오히려 더 안쓰는 경향이 있는 것 같습니다. Kotlin의 디폴트 매개변수를 이용해서 선언하는 것이 더 가독성이 좋기 때문이예요
class A(val a1: Int, val a2: Int) { constructor(): this(100) { ... } constructor(a1: Int): this(a1, 200) { ... } } vs class A(val al: Int = 100, val a2: Int = 200) /** * 두 선언 방식의 차이점을 보면 동일한 기능을 수행하지만 전자의 경우, 코드를 이해하기 위해서 생성자를 타고 타고 내려가야 하기 때문에 * 생성자 수가 늘어날 수록 복잡성이 증가할 수 있습니다. * 후자의 경우, 간단히 정의할 수 있어 가독성이 증가해 많이 사용하는 방식입니다. */ // 물론 서브 생성자가 완전히 필요없는 것은 아닌데요. 기본 생성자와 다른 타입으로 객체를 생성하고 싶은 경우, 서브 생성자를 정의해야 합니다. class A(val a1: Int) { constructor(aString: String): this(a1String.toInt()) { ... } } //val a = A("1")
Kotlin
복사
추가로 생성자와 상속에 대해서 간단히 예제 코드를 들며 강의를 진행했습니다.

상속

// 상속: 부모 클래스의 자료를 쓰니까 생산성 // 1) 생산성: 중복 코드를 제거 // 2) 다형성
Kotlin
복사

Kotlin은 기본적으로 final class

// Java는 기본적으로 public : 상속이 가능한 // Kotlin 디폴트 final class open class A { open val a = "10" open fun printMyClassName() { //다양하게 여러 클래스에 변형해서 print("a") } }
Kotlin
복사

부모 클래스를 abstract와 open class으로 정의했을 때 차이점

// A 객체는 만들지 않고, 이 A를 상속한 클래스를 만들려고 한다. abstract class A(val a1: Int) class C(d: Int) : A(d) { val b: Int = 10 fun sample() { a1 } } // val a = A() // x open class B() // val b = B() // o
Kotlin
복사

abstract와 interface의 차이점

// interface // 다중 상속이 가능하다. interface Parent2 { } interface Parent3 { } class Child2: Parent2, Parent3
Kotlin
복사