55,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
[20강] run 질문
run은 아래와 같이 T에 대한 확장 함수를 받는데public inline fun <T, R> T.run(block: T.() -> R): R { return block() }personReopository의 save를 메서드 레퍼런스로 호출할 때 person 객체 즉 this 를 넘겨야하는데,위의 run의 구현부를 봤을 때 는 파라미터로 아무 것 도 넘겨 주지 않고 어떻게 this를 받아서 아래 와같이 사용이 될수있는지 궁금합니다.val person= Person(name: "최태현", age: 100).run(personRepository::save)
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
[3강] as {클래스} 형 변환의 Nullable 건에 대하여
안녕하세요! 강의 잘보고있습니다! 3강을 보다 질문? 의문? 같은게 들었습니다.fun printAgeIfPerson(obj: Any?) { val person = obj as Person println(person.age) } 아래 코드에서 매개변수 obj의 값으로 null이 들어온 경우 제 생각으로는 val person: Person? 형태로 추론이 되어 person.age 부분에서 ide가 처음부터 오류를 표시해주는게 맞다고 생각이 되었습니다ㅜ. 선생님께서는 어떻게 생각하시는지 궁금합니다.
- 해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
20강. 코틀린의 scope function 수강 중 질문
안녕하세요. 최태현님 오늘자로 해당 강의 다 수강완료하였습니다. 먼저 좋은 강의 제공해주셔서 감사하다는 말씀 드립니다.작은 질문을 하나 드리고자 하는데요. 강의 내용과는 다소 무관한 질문입니다.20강. 코틀린의 scope function 강의 중 11:25에 나오는 코드인데요.val person = personRepository.save(Person("최태현", 100))찾아보니 이러한 방식으로 Repository를 통해 저장한 인스턴스를 받아와 쓰는 형태의 코드를 꽤 작성하시는 거 같습니다. 다만 제가 의문인 것은 만약 JPA를 사용한다고 한다면 엔티티 매니저에 의해 영속화된 Person("최태현", 100)엔티티나 personRepository.save()를 통해 반환된 엔티티나 완전히 동일한 객체일탠데 왜 굳이 이렇게 코드가 작성되는지 궁금합니다. 🙂 val person = Person("최태현", 100) val person2 = personRepository.save(person) println(person.equals(person2)) // trueperson이나 person2나 엔티티 매니저에 의해 같은 객체일 것 같은데 말이죠. 한 줄로 간결한 코드를 만들기 위함일까요?너무 강의와 무관한 질문이라 결례를 범하는지는 모르겠습니다만 최태현님의 의견이 궁금하여 질문 남깁니다. 감사합니다.
- 해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
Java 코드를 Kotlin 코드로 가져올 때 Wrapping 한다는게 무슨 뜻일까요?
안녕하세요. 16:52초에 Java 코드를 보며, 맥락을 확인하고 Java 코드를 가져오는 지점을 Wrapping 한다고 설명을 해주셨는데 이 때 Wrapping에 대하여 좀 더 설명을 해주실 수 있을까요?코틀린으로 코드를 짜려고 하면 아무래도 자바로 짠 자료들이 많아서 자바 코드를 코틀린 코드로 옮길 때 컬렉션 타입을 어떻게 해야할 지 조금 고민이 되는 경우가 많아서 질문 드려봅니다!
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
protected, private 필드들의 getter...
선생님, 안녕하세요 10강 코틀린 상속 편 보다가 질문 드립니다.예제로 아래 JavaAnimail 클래스를 주셨고,public abstract class JavaAnimal { protected final String species; protected final int legCount; public JavaAnimal(String species, int legCount) { this.species = species; this.legCount = legCount; } abstract public void move(); public String getSpecies() { return species; } public int getLegCount() { return legCount; } }이와 동일한 코드로 아래 코틀린으로 변환했는데요,package com.lannstark.lec10; abstract class Animal( protected val species: String, protected val legCount: Int, ) { abstract fun move() } 위의 자바 코드는 getter들이 public 으로 열려있어서 외부에서 인스턴스 생성 시 cat.getSpecies(), cat.getLegCount()등이 호출되나, 아래 코틀린에서 자동생성되는 getter의 경우 protected로 cat.species, cat.legCount 에 대해 가시성이 없습니다. 그러면...클래스의 필드를 public으로 다 열고 a. val 는 더 이상 해줄 수 있는 것이 없음(어차피 생성자 초기화만 가능)class Animal2(val species: String, val legCount: Int)b. var는 private setter을 둔다.class Animal3(species: String, legCount: Int) { var species = species private set var legCount = legCount private set } 필드를 protected, private 으로 두고 별도의 public getter를 내부에 다시 만든다..(getter만 열 수도 없고, public으로 override도 안 되는 것 같습니다..!)class Animal4(species: String, legCount: Int) { private val species = species public get // ❌Getter visibilty 는 필드와 일치해야 함 override public get // ❌'override' is not applicable to 'getter' private val legCount = legCount fun getSpecies() = this.species; fun getLegCount() = this.legCount; } 😔...흠 어떻게 하는게 맞을까요.jpa 엔티티에서의 사용까지 생각하면 1-b가 가장 나을까요? 엔티티 필드들은 거의 var이기도 할테고요...자바에서 사용하는 스타일로 마음이 가장 안심(?)인 건 2번인데, 이렇게 하면 코틀린의 코드 간결성과 편리함을 엔티티 내부에서는 거의 사용하지 못하는 것 같아서 그나마 코틀린스럽게 코드를 사용할 수 있는 옵션이 1-b 인 것 같다고 생각했는데요...더 좋은 방법이 있는지... 어떻게 하는 것이 best practice인지, 또 선생님은 실무에서 어떻게 하시는지 궁금합니다!!
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
강의 내용 수정 요청드립니다.
안녕하세요~ 수강생입니다 강의 정말 잘 듣고있습니다^^다름이 아니라18강 6:08 에서 lastOrNull 설명이 "첫번째" -> "마지막" 으로 변경되어야 할 것 같습니다. 감사합니다~!
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
Custom Getter 에 대해 질문이 있습니다.
안녕하세요 태현님! 이 강의 덕분에 코틀린을 재미있게 학습하고 있습니다. Custom Getter 에 대해 질문이 있어서 질문드립니다. name 을 대문자로 만드는 것을 예시로 Custom Getter 를 사용하는 것과, 프로퍼티로써 사용하는 것에 대해 설명해주셨는데요, 제가 잘 이해하지 못했는지.. 두 방법에 대해 차이가 있는것 같습니다. Custom Getter 를 사용할 경우fun main() { val personTest = PersonTest("abc", 10) println(personTest.name) } class PersonTest ( name: String, var age: Int ) { init { if (age <= 0) { throw IllegalArgumentException("나이는 ${age}일 수 없습니다." ) } println("초기화 블록") } val name = name get() = field.uppercase() }위의 경우 ABC가 출력이 됩니다.생성자를 통해 name 값이 "abc"로 객체가 생성되었으나, custom getter 를 통해 uppercase 되어서 ABC 로 출력되는 것을 볼 수 있습니다. 프로퍼티를 사용하는 경우fun main() { val personTest = PersonTest("abc", 10) println(personTest.name) println(personTest.uppercaseName) } class PersonTest ( val name: String, var age: Int ) { init { if (age <= 0) { throw IllegalArgumentException("나이는 ${age}일 수 없습니다." ) } println("초기화 블록") } val uppercaseName: String get() = this.name.uppercase() }위의 경우는 그대로 "abc" 가 출력이 됩니다.당연히 personTest 객체를 통해 프로퍼티인 upppercaseName을 출력하면 ABC가 출력이 되지만요.. 강의에서 태현님께서 backing field 를 사용하지 않고, 프로퍼티를 통해 사용한다고 하셨는데.. 둘의 작동이 다른 것 같아서요! 제가 짐작컨데, 말씀하신 내용이backing field 처럼 사용되는 경우가 많지 않다.주로 getter 로 값을 가져오는 경우에는 값 자체를 가져오는 경우가 많으므로 프로퍼티를 통해 값을 가져오도록 한다.라고 이해해도 되는 것일까요?
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
코틀린 단에서 리스트 필터링과 DB에서 필터링 후 조회
안녕하세요. 궁금한 점이 하나 있습니다!강사님은 아래 두 가지 중 어떤 기준으로 하나를 선택하시나요?코틀린 단에서 리스트를 람다로 필터링해서 클라이언트에게 응답DB에서 조회할 때 WHERE절 필터링하여 조회한 리스트를 클라이언트에게 응답
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
해당 강의를 모두 듣고 코루틴 강의를 먼저 들어야 할까요?
안녕하세요. 강사님해당 강의를 모두 듣고 다음 커리큘럼이 궁금합니다.코루틴 강의코틀린 고급편코틀린과 부트로 도서관리 애플리케이션 개발하기이 셋중 순서를 어떻게 진행하는게 가장 효과적일까요?
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
Enum Class와 Sealed Class에 대한 질문입니다.
안녕하세요.JAVA만 꽤 오래 사용하다가, 이번에 이직하면서 코틀린을 하게 되어 강사님 강의를 들으며 공부하고 있습니다.많이 부족하지만 너무 자세히 설명해주시고 친절하게 설명해주셔서 덕분에 잘 따라가고 있습니다. 궁금한 내용은 아래와 같습니다.Enum과 static (Companion) 의 차이가 무엇일까, 언제 다르게 사용할까 라는 궁금증이 생겼습니다. 자바를 사용하다가 코틀린 강의를들으면서 가장 인상깊었던 부분인 when 부분입니다. enum과 sealed를 어떻게 실무에서 dto와 사용하는지 예시를 알고 싶습니다.Sealed를 어떤 경우에 사용해야할지 감이 안잡히네요. 혹시 조금 만 더 자세하게 설명을 해주실 수 있을까요? 바쁘실텐데 감사합니다. ps. 강사님 발음에 매번 취하고 있습니다.. :)
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
안녕하세요 강사님 질문이 있습니다,.
1강에서 객체 인스턴스화하여 사용할 때 가변변수로 선언을 하셨는데 불변변수로 사용안하신 이유가 따로 있을까요!?
- 해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
18강 map 질문
val values = fruits.filter { fruit -> fruit.name == "사과" } .mapNotNull { fruit -> fruit.nullOrValue() } nullable한 List에서 null이 아닌 element만 가지고 오는 mapNotNull중에서.. nullOrValue()는 임의로 만드신 확장함수인가요?
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
생성자 파라미터 콤마
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. class JavaHouse( private val address: String, private val livingRoom: LivingRoom, ) {생성자 파라미터 넣을시에address: String,livingRoom: LivingRoom 콤마를 넣으셨는데요콤마를 안넣어도 되는것 같은데요 굳이 넣는 이유가 무엇인지요?
- 해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
isAdult() 함수를 custom getter를 활용한 프로퍼티 변환
안녕하세요. 강의 정말 잘 듣고 있습니다!isAdult() 함수를 custom getter를 활용한 프로퍼티 변환에 대한 부분인데요..fun isAdult(): Boolean { return age >= 20 } fun isAdult2() = age >= 20 val isAdult5 get() = this.age >= 20 var isAdult6 get() = this.age >= 20 set(value) {} var isAdult7 = false get() = this.age >= 20isAdult() 함수를 변환하는 여러가지 방법들을 시도해 보았는데요. 다 동일한 결과를 얻더라구요.isAdult2() 는 return 하는게 단일값 이면 block 을 없애고 반환 타입도 생략한 방법이고isAdult5는 수업시간에 보여주신 custom getter를 활용한 방법입니다. Q1. isAdult를 val 이 아닌 var로 바꿔봤고 아래 코드처럼 써보니 빨간줄이 뜨더라구요.var isAdult8 get() = this.age >= 20val은 getter만 있어야 되지만, var은 setter도 있어야 하는건가 싶어서 isAdult6처럼 custom setter도 명시를 하니까 빨간줄이 사라지더라구요.그래서.. 'var로 프로퍼티를 선언했고, custom getter를 명시했다면, custom setter를 반드시 명시해줘야 하는건가?' 라고 이해하려 했는데, isAdult7의 경우 따로 custom setter를 명시해주지 않아도 빨간줄이 뜨지 않더라구요.어떤 방식으로 이해해야 할지 감이 안오네요.요약: isAdult8는 왜 안되고 isAdult6과 isAdult7은 왜 되는건가요?Q2.val person2 = Person("KIM", 10) println(person2.isAdult5) // false person2.age = 20 println(person2.isAdult5) // true 제가 지금까지 이해하기로는 val은 자바에서 final 같은거라 한번 값이 초기화되면 값을 변경 못해야 될것 같은데,, isAdult5 처럼 val로 선언했을때 isAdult5가 false를 한번 가리키게 되면 계속 false만 가리키고 있어야할것 같은데, Person의 age 값을 10에서 20으로 변경하면 val로 선언한 isAdult5이 true로 변경이 되네요. 물론 성인 여부를 확인해야 되는 기능상 age가 바뀌면 그에 따라 결과도 바뀌는것이 당연히 자연스러운것이긴 한데, 문법적으로 val 프로퍼티의 값이 어떻게 변경될 수 있는지 의아합니다.요약: val 프로퍼티 인데도 왜 값이 변경될 수 있나요? final 개념으로 이해하면 안되는 건가요감사합니다.
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
kotlin closure 는 별도의 메모리 공간에 데이터를 복사해서 가지고 있는게 맞을까요?
Java 에서 Final 만 사용할 수 있는게 외부 변수가 메모리에서 해제 되었을 경우, 가비지를 참조할 수 있는 것을 방지하기 위해서로 알고 있는데 코틀린은 이게 가능한게 아예 메모리를 통째로 떠와서 그런걸까요? ㅎㅎ강의 영상에서 포획한다 라고 표현하신게 그런 의미 같아요!
- 해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
Kotlin 에서는 함수형 인터페이스가 필요 없어진걸까요?
함수가 1급객체가 되어버려서 functional interface가 필요없어진 것처럼 보여요
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
java 코드와 같이 빌드하였더니 오류 발생
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.kotlin 폴더 아래에 Main.kt JavaMoney.java 를 만들어 서 빌드하니 아래의 오류가 납니다. 여기 저기 뒤져봐도 해결을 못해서요. 어떻게 하면 좋을지요? 개발 환경 인텔리제이이며, kotlin 코드 만으로는 빌드 및 실행이 잘됩니다. 결과 : java: error: invalid flag: a=cJavaMoney.java import org.jetbrains.annotations.NotNull;import java.util.Objects;public class JavaMoney implements Comparable<JavaMoney> {private final long amount; public JavaMoney(long amount) {this.amount = amount; }public JavaMoney plus(JavaMoney other) {return new JavaMoney(this.amount + other.amount); }@Override public int compareTo(@NotNull JavaMoney o) {return Long.compare(this.amount, o.amount); }@Override public boolean equals(Object o) {if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; JavaMoney javaMoney = (JavaMoney) o; return amount == javaMoney.amount; }@Override public int hashCode() {return Objects.hash(amount); }@Override public String toString() {return "JavaMoney{" +"amount=" + amount +'}'; }}Main.kt fun main(args: Array<String>) {val money = JavaMoney(1_000);}
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
코틀린 Companion object
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 선생님! 수업을 잘 듣고있는 백엔드 취준생 입니다!자바를 공부하다가 코틀린도 공부하면 좋을꺼 같아서 같이 공부하고있는데요..혹시 좀더 코틀린을 딥하게 파보고 싶은데 추천하시는 사이트 혹시 있으실까요??
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
구조 분해는 componentN으로 순서에 의존하는거같은데 이 의존을 없앨 수 없나요?
구조분해가 순서에 의존하는 것 같은데, 이러한 순서에 대한 의존성을 제거할 수는 없는 것인가요? data class Foo( var a:String, var b:Int, var c:Long, var d:String ) fun main(){ val foo = Foo("hello", 33, 44L, "Bye") //기존 방식 val (a, b, c, d) = foo //원하는 방식 val (c, a) = foo }
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
선생님 이상한 곳에서 헷갈립니다 ㅜㅜ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 코틀린은 자바와 달리 getter setter가 기본적으로 존재하는데자바와 코틀린을 같이 사용하는 경우면 몰라도, 코틀린만 사용하는 경우 필드에 private을 붙이는 게 의미가 있나요?어차피 public이던 private이던 getter가 자동으로 붙는데.. 헷갈립니다 ㅜ