55,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가 자동으로 붙는데.. 헷갈립니다 ㅜ
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
단순 선호도에 대한 궁금증 입니다!
6강을 듣고 있는데요...., down to 등등이 함수라고 하셨는데요.예를 들어 이렇게도 쓸 수도 있을것 같아요. IntRange(1, 3).step(3)자바를 오래 사용한 입장에서는 사실 함수로 직접 구현하는것이 조금 더 눈에 익숙하고, 왠지 모르게 심리적 안정감(?)을 주기도 하는데요.현업에서 코틀린을 사용할 때는 위처럼 함수를 직접 선언하는게 아닌 ..., step을 사용하는지 궁금합니다.
- 해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
run의 사용 방법에 대해 궁금한 점이 있습니다
안녕하세요 강사님. 완강하고 코틀린을 계속 공부하다가 궁금한 점이 생겨 질문 드립니다. run의 경우에는 아래와 같이 확장함수가 아닌 일반적인 메소드의 형태로 정의된 것이 있는 것을 발견했습니다.그래서 메소드를 작성할 때 run을 사용해서 작성할 수도 있겠다는 생각이 들더라구요. 예시로 Int의 확장함수로 거듭제곱을 수행하는 pow()라는 메소드를 작성할 때 보통은 다음과 같이 작성하겠죠.fun Int.pow(n: Int): Long { var result = 1L repeat(n) { result *= this } return result }그런데 위의 run을 사용해서 아래처럼 작성할 수도 있었고 두 경우 모두 같은 결과를 반환하는 것을 볼 수 있었습니다.fun Int.pow(n: Int) = run { var result = 1L repeat(n) { result *= this } result } 그러면 메소드를 작성할 때 두가지 방법 모두 사용할 수 있다고 생각되는데, 어느쪽을 사용하는 것이 좋은 방법일지 강사님의 의견을 듣고싶어서 질문 남겨봅니다.
- 해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
setOf,mutableSetOf 기본 구현체가 LinkedHashSet이면
HashSet은 순서를 보장하지않고LinkedHashSet은 node로 순서를 보장하는걸로 알고 있습니다. 코틀린에서 타고 들어가면@SinceKotlin("1.1") public actual typealias LinkedHashSet<E> = java.util.LinkedHashSet<E>이렇게 나와서 그대로 사용하는 거 같더라구요 그래서 setOf 나 mutableSetOf는순서를 보장하는 Set이라고 생각해도 될까요?
- 해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
switch의 기능인건 코틀린에서는 없나요?
fun judgeNumber5(grade: Int) { when (grade) { 3 -> { println("A의 권한을 갖습니다") } 2 -> { println("B의 권한을 갖습니다") } else -> { println("C의 권한을 갖습니다.") } } }public static void judgeNumber5(int grade) { switch (grade) { case 3 : System.out.println("A의 권한을 갖습니다."); case 2 : System.out.println("B의 권한을 갖습니다."); default: System.out.println("C의 권한을 갖습니다."); } }이렇게 할 경우에 코틀린은 early return으로 해당 구문만 실행하고 when 절을 나가게 되는데java의 switch 기능처럼 사용하는 방법이 있을까요?
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
안녕하세요. 람다에서 외부변수를 사용하는 Closure관련해 궁금해 질문드려요.
안녕하세요. 먼저 질좋은 강의 만들어주시고 제공해주셔서 감사드려요!강의중 Closure가 자바와 다르게 final이 아닌 var변수를 람다안에서 값을 변경가능한것까지 이해하였습니다. 다른 궁금증이 하나 생겨서요. Closure가 람다를 진입하기전 변수를 포획해서 진행한다고 하셨는데, 이는 동시성 문제로부터 자유롭나요?
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
12강 Movable 인터페이스
안녕하세요 ㅎㅎ코틀린 강의 잘 듣고 있습니다. 12강에 자바에서 Movable 인터페이스를 new Movable로 인스턴스화 시켰는데.. 인터페이스는 인스턴스 객체로 만들수 없는거 아닌가요?? 헷갈려서 질문드립니다. 감사합니다.
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
9강 실제 메모리에 존재하는 것과 무관하게 게터와 세터를 만들 수 있다
안녕하세요. 9강 마지막 요약 부분에서 '실제 메모리에 존재하는 것과는 무관하게 getter,setter를 만들 수 있다.' 라고 말씀해주신 부분에 대해서 질문 드립니다.쭉 이어서 설명해주신 것처럼, 코틀린으로 작성한 getter.setter가 byte코드 변환 시 함수로 생성되는데요. 그럼 실제 메모리에는 함수로 존재하는거 아닌가요?..아니면 코틀린에서 그부분은 캡슐화?.. 처럼 내부구현을 가려놔서 사용자인 개발자들은 메모리에 없는 것처럼 느낀다? 라고 말씀해주신 걸까요?? 궁금해서 질문드려봅니다!
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
맥에서 intelij 사용 단축키에 대해 알고싶습니다
안녕하세요, 주제와는 좀 다른 질문인데요.강의하시는거 보면 맥에서 intelij 를 상당히 잘 활용하신다고 느꼈습니다. 특히, 9강에서 ide 화면을 4분할로 빠르게 구성하는게 인상적이었는데, 혹시 그 방법과 단축키 알려주실수 있나요?
- 해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
유틸리티 클래스
유틸리티 클래스 예시 자바 코드가 아래처럼 되어 있는데요. 추상클래스이다 보니 상속도 안되고 생성자가 private이다보니 인스턴스도 만들수 없는데, isDirectoryPath 메소드를 사용할 수 있는 방법이 있을까요?isDiretoryPath 메소드가 static 메소드가 되어야하는게 아닐까 싶어서요!package com.lannstark.lec11; public abstract class StringUtils { private StringUtils() {} public boolean isDirectoryPath(String path) { return path.endsWith("/"); } }
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
main 함수 실행과 관련해서 질문드립니다.
안녕하세요. 좋은 강의 잘 듣고 있습니다.현재 인텔리제이에서 src/main/kotlin 폴더를 만들어서 강의를 따라가고 있습니다.2강 강의를 듣던 도중 println(str?.length) 를 실행해보려고 main 함수를 실행시켰더니 빌드가 되면서 에러가 발생합니다.lec12 패키지의 Lec12Main class에서error: package Person does not exist 가 발생합니다.Run Configuration에서 Run이 되기 전에 Build를 안 하게 옵션을 바꿔주면 함수가 실행은 되지만 str에 null을 넣었을 때도 길이가 3이 나오는 기이한 현상이 발생합니다.어떻게 해결하는 것이 좋을까요? (일단은 에러가 나는 부분을 주석처리하고 강의를 진행하고 있습니다!)
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
코루틴의 대한 질문이 있습니다.
강사님, 강의 내용에는 코루틴이 없어 학습중에 궁금한 점이 있어서 문의드립니다.아래 코드의 실행 순서를 제가 정리 해봤습니다.제가 코루틴의 suspend, resume을 잘 이해한게 맞나 궁금해서요.물어볼 곳이 없어서, 죄송스럽게도 강사님께 문의를 하게 되었습니다.강의 내용과는 관련이 없어 답변을 해주시면 감사하겠지만, 답변이 안달리다도 괜찮습니다.감사합니다. println("Coroutine Outer") 이 실행된다.A 코루틴에서 delay를 만나, B 코루틴으로 실행권을 넘겨간다.B 코루틴도 delay를 만나, A 코루틴으로 실행권을 넘겨준다.1초가 지나고 A코루틴의 println("Coroutine A, Si")을 실행한다.반복문에 의하여 A코루틴의 2번째 delay를 만나, 다시 B 코루틴으로 실행권을 넘겨준다.B 코루틴도 1초가 지난 상태여서, 바로 println("Coroutine B, Si")을 실행한다.반복문에 의하여 B코루틴의 2번째 delay를 만나, 다시 A 코루틴으로 실행권을 넘겨준다.그 다음 4~7을 반복문이 끝날 때 까지 반복 후 코루틴이 종료된다.fun main() = runBlocking { // A 코루틴 launch { repeat(5) { i -> delay(1000L) println("Coroutine A") } } // B 코루틴 launch { repeat(5) { i -> delay(1000L) println("Coroutine B") } } println("Coroutine Outer") } fun <T> println(msg: T) { kotlin.io.println("$msg [${Thread.currentThread().name}]") }
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
자바 유틸성 코드에 대한 질문입니다
11강 코틀린에서 접근 제어를 다루는 방법을 듣던 중 궁금한 점이 생겨 질문 남깁니다 :)[3.다양한 구성요소의 접근 제어 - 생성자] 부분에서 Java의 유틸성 코드를 만들 때 abstract class + private constructor를 사용해 인스턴스화를 막는다고 되어있습니다!public abstract class StringUtils { private StringUtils() {} public boolean isDirectoryPath(String path) { return path.endsWith("/"); } }추상클래스는 인스턴스화를 할 수 없다고 알고 있는데, 이미 인스턴스화가 막혀있는 상태에서 private constructor 가 필요한가?! 라는 궁금증이 들었습니다.질문은 정리하자면, abstract class 만으로 인스턴스화를 막을 수 있다고 생각하는데, private constructor까지 같이 사용하는 이유가 궁금합니다 !!강의 잘 듣고 있습니다. 재밌어요 ㅎㅎ 감사합니다 :)
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
람다정의 관련 질문입니다
질문을 해야 하나...하는 생가도 들었지만...람다는 함수인가요?
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
static 함수를 호출하는 부분에서 질문 드립니다.
안녕하세요. 12강 강의 중 companion object 내부에 있는 newBaby()를 호출할 때 @JvmStatic을 붙이지 않아도 호출이 가능하고, 오히려 IDEA에서 Companion을 제거하라는 힌트를 주더라구요. 혹시 코틀린 버전 차이일까요?
- 해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
안녕하세요. 대입문에 조건문이 들어갈 때, 변수 타입이 결정되는 방식에 대해서 질문이 있습니다.
안녕하세요. 강사님코틀린 질문이 있습니다. 코틀린은 정적타입 언어로 알고 컴파일 시점에 변수의 타입이 결정되는 것으로 알고 있습니다. 또 코틀린은 if-else문과 같은 조건을 표현식으로 사용하는 것으로 압니다.그래서 다음 처럼 조건식을 넣고 사용자 입력에 따라 정수/실수를 결정해서 할당하니 다음처럼 입력에 따라 정수일 수도 있고 실수일 수도 있습니다.마치 런타임 시점에 결정되는 듯이 보이는데, 내부적으로 어떻게 처리되는 것인지 궁금합니다.
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
불려시는 시점에 존재하는 정보를 포획해서 갖고 있는다 라는 의미 질문입니다.
람다가 불려지는 시점에서 존재하는 것을 포획해서 정보를 갖고 있는다고 하셨는데요 제가 이해한 바로면 아래와 같은 코드에서 계속 1 1 1 1 1 1 1 이 출력되어야 하는데 1 1 1 2 2 2 가 출력됩니다.포획해서 갖고 있는 다는 것의 정확한 의미가 무엇일까요?이거 의미 생각해보고 여러가지로 테스트해보느라 벌써 한시간 동안 해맸습니다 ㅠ질문1. 포획하는 시점이 runFilter가 호출될때일까요? runFilter내에서 filter가 호출되는 시점일까요? (강의에서 말씀하신 의미는 후자같긴합니다.)질문2(*). 제일 햇갈리는 부분입니다. 포획하는 지점이 어쨋든 간에 아래의 코드의 경우에는 obj1이 참조하고 있는 객체(obj.numberStr이 1인 것)일텐데 그럼 람다내에서는 계속 포획한 객체 obj1에 해당하는 값인 1이 출력되어야 될텐데(300ms뒤에 obj1의 레퍼런스참조가 obj2로 바뀐다고 하더라도).... 왜 포획을 했음해도 불구하고 출력이 2가 나오는 것일까요? 클로져에서 포획한다는 것의 의미를 잘 모르겠습니다.fun main(args: Array<String>) { var obj1 = Obj() obj1.numberStr = "1" var obj2 = Obj() obj2.numberStr = "2" Thread() { Thread.sleep(300) obj1 = obj2 }.start() runFilter { // 질문1. 포획하는 시점 이곳? println(obj1.numberStr) Thread.sleep(100) println(obj1.numberStr) Thread.sleep(100) println(obj1.numberStr) Thread.sleep(100) println(obj1.numberStr) Thread.sleep(100) println(obj1.numberStr) Thread.sleep(100) println(obj1.numberStr) } } fun runFilter(filter: () -> Unit) { filter() // 질문1. 포획하는 시점 이곳? } class Obj{ var numberStr :String? = null } 감사합니다.
- 미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
상위클래스의 생성자나 init블럭에서 final이 아닌 프로퍼티에 접근하지 말라 의미여
안녕하세요.derived클래스에서 number 0나오는 예제 있잖아여상위클래스의 생성자나 init블럭에서 final이 아닌 프로퍼티에 접근하면 안된다고 하셨는데 final이라고 해서 var이아닌 val인가? 처음에 생각했는데저 의미가 아니라정확히는 open키워드로 상속을 열어둬서 하위클래스에서 오버라이딩 될 수 있는 프로퍼티에 접근하지 말라는거죠?자바에선 메쏘드에 final 키워드를 붙이면 하위클래스에서 오버라이딩이 불가능 하니깐 사용하신 의미라 생각되는데 좀 햇갈려서요~ 감사합니다.