묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨코틀린 고급편
지식공유자님 inline에 대해서의 질문과 추가적인 질문 1가지가 있습니다!
먼저 강의 정말 감사합니다.. 질문 폭탄을 드려서 매번 죄송할따름입니다..1번 질문// inline 프로퍼티 class InLinePropertyPerson(val name: String) { inline val uppercaseName: String get() = this.name.uppercase() // 가능 // get() = field.uppercase() // 불가능 }위의 코드처럼 inline 프로퍼티의 경우 this로의 접근은 가능한 반면, backing field 사용시에는 불가능하더라구요!이렇게 되는 이유or원리가 궁금합니다 2번 질문inline 사용의 경우 디버깅이 어렵다는 말을 어느 컨퍼런스의 코틀린 주제 네트워킹 세션때 들은 것 같습니다그런 경우 강의에서 나온 대로 invoke를 유발할 수 있는 함수 파라미터의 경우 noinline을 붙이면 해결되는 부분일지, 아니면 inline을 제외한 일반 함수로 만들어서 디버깅으로 문제점을 찾고 다시 inline fun으로 만드는게 나은지 궁금합니다(어떤 경우 차라리 메서드 콜스택을 만드는 편이 진입점을 파악하기 좋으니깐요!) 3번 질문inline 키워드와는 관계 없는 질문이긴하지만..!// 1번 listOf(1, 2, 3) .map { num -> val result = num + 1 result } // 2번 listOf(1, 2, 3) .map { num -> val result = num + 1 return@map result }위와 같은 코드에서 보면 map의 중간연산에 최종적으로 result가 반환될거야 라고 명시적으로 나타내는 2번 방식과kotlin의 특징인 scope { } 의 최종 line 값을 반환하는 자동기능이 쓰인 1번 방식이 있는데코틀린을 처음 접하거나 모르는 사람이 보면 저기 왜 뜬금없이 쓰이지도 않는 변수인 result가 있지? 이상하군! 이렇게 생각할수도있을것같아요(그냥 예시 중 하나.. 아마 이렇게 생각하시는 분은 없다고 예상)오히려 2번 방식에서 아 여기 map에서의 최종연산 결과는 result구나 하고 map라벨링을 달고 리턴하는게 좀 더 가독성이 있어보이는데요!2번 방식은 라벨링을 해서 jump를 하는 방식이라 안티패턴으로 봐야하는지? 아니면 그렇지 않은지?가 궁금합니다 강의 잘 보고있습니다! 감사합니다 :)
-
해결됨코틀린 고급편
안녕하세요 JMH 설정 관련 팁을 드릴까 합니다! (24년 12월 16일 기준)
jmh { threads = 1 fork = 1 warmupIterations = 1 iterations = 1 } JVM/JDK toolchain: 21kotlin { jvmToolchain(21) }.gradle 버전: 8.8kotlin 버전: 2.0(컴파일러, 언어, API) 위 세 버전 기준으로는id("me.champeau.jmh") version "0.7.2"버전으로 하고$ ./gradlew jmh 실행이 에러없이 잘 작동하고실행결과는 build/reports/jmh/results.txt의 경로가 아닌build/results/jmh/results.txt 경로에 파일이 생긴 것을 확인했습니다
-
해결됨코틀린 고급편
Generic Func 질문이 있습니다
강사님 Generic Func에서// origin fun <T> List<T>.hasIntersection(other: List<T>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() } // error fun <T> List<T: Any>.hasIntersection(other: List<T>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() } // error fun <T> List<T>.hasIntersection(other: List<T : Any>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() } // error fun <T> List<T: Any>.hasIntersection(other: List<T : Any>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() } // ok fun <T : Any> List<T>.hasIntersection(other: List<T>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() }이렇게 되더라구요! 맨 앞에 <T>가 반환타입(List<T>)과 인자타입(other: List<T>) 까지 함께 선언해주는 declaration-site variance의 형태를 띄고 있어서 그런건가요?생각해보면 들어갈 수 있는 타입은 nullable인데 반환타입은 not null이거나 그 반대가 되면 헷갈릴 것 같아요. 그것을 막아둔것같기도 하구요!이렇게 제네릭 메서드를 만드는 경우에도 generic 제약을 줄 수 있는거죠!?좀 더 실 사용에 가깝게 타입가드까지 하려면fun <T : Number> List<T>.hasIntersection2(other: List<T>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() }이런 느낌으로 쓰일것같은데.. 맞나요? 코틀린 고급편 잘 듣고있습니다 ~_~
-
미해결코틀린 고급편
2강부터 영상 재생이 안되네요ㅠㅠ
2강부터 영상 재생이 안되네요ㅠㅠ
-
해결됨[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
다트 변수 연산 질문
안녕하세요 강의 잘 듣고 있습니다!! 근데 영상 예제 말고 추가적으로 코드를 입력해보고 있는데 이해가 안되는 에러가 발생해서 질문 드립니다void main() { int number = 2; // doble로 변경하면 문제 없이 동작됨 왜? print(number); // 2 print(number = number + 2); // 4 print(number = number - 2); // 2 print(number = number * 2); // 4 print(number = number / 2); // 에러 발생 왜??? 4 / 2면 2가 나와야 하는 거 아닌가? print('-----------여기까지는 기본적인 사칙연산 네 가지-----------'); print(number % 2); // number 나누기 2의 나머지 0 print(number % 3); // number 나누기 2의 나머지 2 print(number); // 많은 연산을 진행했지만 값은 변하지 않았음 }지금 위 코드에서 이해가 안되는 게 print(number = number / 2); 이 부분에서 Error: A value of type 'double' can't be assigned to a variable of type 'int'. print(number = number / 2); //2 위와 같이 double 타입을 int 타입 변수에 저장할 수 없다는 에러가 발생합니다 근데 4 /2의 결과는 2인데 왜 이런 에러가 발생하는지 모르겠습니다 알려주시면 감사하겠습니다!! 강의 잘 듣고 있습니다 항상 감사합니다 좋은 하루 보내세요!
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
다트 변수 이름 규칙 질문입니다
안녕하세요! 좋은 강의 잘 듣고 있습니다 궁금한 게 C언어 같은 경우는 변수 이름 규칙에 특수 문자 사용 불가, 숫자로 시작 불가, 공백 금지 등 변수 이름의 표기법이 아닌 정말 문법적으로 반드시 지켜야 하는 규칙이 있는데 다트 언어도 문법적으로 반드시 지켜야 하는 규칙이 있는지 궁금합니다..! 구글링을 통해 정보를 얻어보려고 했으나 제 서칭 능력이 부족한 건지 원하는 결과를 얻지 못해서 질문드립니다! 좋은 강의 감사합니다! 좋은 하루 보내세요 ㅎㅎ
-
미해결함수형 프로그래밍과 JavaScript ES6+ 응용편
클로저와 같은 함수형 프로그래밍 공부
좋은 강의 감사합니다! 다음 단계를 어떻게 나아가야 할지 고민을 하고 있는데,, 클로저와 같은 함수형 프로그래밍 언어를 공부하면 좋을까요..?
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
4강애싱크 프로그래밍에서 12:46에서
4강애싱크 프로그래밍에서 12:46에서 addnumber함수는 비동기함수가 아니라 동기함수 아닌가요?그럼 위에 addnumber()가 끝나고(2초기다리는거까지 하고)나서 밑에 addnumber()가 실행돼야하는거 아닌가요??왜 위 addnumber의 2초를 기다리지 않고 밑에 addnumber를 실행하죠?Addnumber의 반환타입이 Future<void>가 아니라 그냥 void니까 동기함수 아닌가요??
-
미해결자바스크립트로 알아보는 함수형 프로그래밍 (ES5)
안녕하세요. 유인동님 함수형 프로그래밍 2편을 구매했는데
함수형 프로그래밍 강의 2편을 구매 해두었지만 오랜 시간 방치를 해두었다가 드디어 시작을 하게 되었습니다.1편, 2편, 3편을 완독 한 후에 유인동님의 저서 함수형 프로그래밍 저서까지 보면 함수형 프로그래밍 종결인가요?
-
미해결퀀트 투자를 위한 파이썬 트레이딩룸 만들기 - Part 1
StockListing 함수 직접 만들기 (22년 1월 이후 FinanceDataReader의 StockListing 함수 결과값이 달라짐) 강의편에서 크롤링 함수 오류가 납니다.
알려주신대로,def StockListing() : import requests import pandas as pd import json try : from pandas import json_normalize except importError: from pandas.io.json import json_normalize data = {'bld':'dbms/comm/finder/finder_stkisu', 'locale':'ko_KR',} r = requests.post('http://data.krx.co.kr/comm/bldAttendant/getjsondata.cmd', data=data) jo = json.loads(r.text) df = json_normalize(jo,'block1') df_info = df[['short_code', 'codeName']] df_info.columns = ['Symbol','Name'] return df_infodf = StockListing()JSONDecodeError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_3876\2969629370.py in <module> 19 df_info.columns = ['Symbol','Name'] 20 return df_info ---> 21 df = StockListing() ~\AppData\Local\Temp\ipykernel_3876\2969629370.py in StockListing() 13 14 r = requests.post('http://data.krx.co.kr/comm/bldAttendant/getjsondata.cmd', data=data) ---> 15 jo = json.loads(r.text) 16 df = json_normalize(jo,'block1') 17 df_info = df[['short_code', 'codeName']] ~\anaconda3\lib\json\__init__.py in loads(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw) 344 parse_int is None and parse_float is None and 345 parse_constant is None and object_pairs_hook is None and not kw): --> 346 return _default_decoder.decode(s) 347 if cls is None: 348 cls = JSONDecoder ~\anaconda3\lib\json\decoder.py in decode(self, s, _w) 335 336 """ --> 337 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 338 end = _w(s, end).end() 339 if end != len(s): ~\anaconda3\lib\json\decoder.py in raw_decode(self, s, idx) 353 obj, end = self.scan_once(s, idx) 354 except StopIteration as err: --> 355 raise JSONDecodeError("Expecting value", s, err.value) from None 356 return obj, end JSONDecodeError: Expecting value: line 16 column 3 (char 36)이런 오류가 나는데, 어떻게 해결해야 할까요?
-
미해결비전공자를 위한 자바
super 키워드
강사님 궁금한게 있습니다main( ) 메서드 에서 클래스를 만들고 부모 클래스에 있는 인스턴스를 . 을 이용해서 가져올때 부모와 자식 클래스에 이름이 같은 변수 를 가져올 때 main() 메서드 에서는 super 키워드 를 사용할수 있나요 ?
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
쿠폰발급이 안되네요 ;;
별 5개 평점 남기고9363-87b86b17809c이 코드로 할인 받으려는데 되지않네요;;디스코드도 안됩니다
-
미해결함수형 프로그래밍과 JavaScript ES6+
take 함수의 성능적면에서의 이점
비동기가 없을 시에 불필요한 프로미스 객체를 생성하지 않고 동기일 땐 배열을 프로미스가 있을 때만 프로미스를 반환하기 때문에 async await를 사용하는거 보다 성능면에서 우위를 가질 수 있는건가요?async를 사용하면 무조건 동적인 값이여도 promise를 반환하기 때문에 성능에 좋지 않다라고 이해했는데 맞는건가요?
-
미해결함수형 프로그래밍과 JavaScript ES6+ 응용편
fx.js
fx.js를 불러다가 쓰고 싶은데 영상처럼 dist 파일도 없고 그<script src="https://unpkg.com/fxjs/dist/fx.js"></script> 를 해봐도 안되네요ㅠ 어떻게 해야지 불러올 수 있나요
-
해결됨자바스크립트로 알아보는 함수형 프로그래밍 (ES5)
_go함수 _pipe.apply(null, fns) 사용하는 이유
질문1. go 함수에서 apply의 쓰임 제가 알고 있는 apply는 this바인딩 때문에 사용하는것으로 알고 있습니다. 여기서는 array-like를 array로 바꿔주는 것으로 쓰이는것 같아요?? 물어보고싶은것은 apply의 기능 1. this바인딩 때문에 사용 호출함수에서 array-like를 array로 기능하도록해준다이렇게 두 가지 기능을 한다 라고 정의를 하면 될까요??
-
해결됨코틀린 고급편
by lazy 블럭 안에서 suspend 함수의 결과값을 받는게 가능한가요?
강의에서 Thread.sleep 한것 처럼 runblocking으로 Thread를 blocking 해야만 값을 기다렸다가 받을 수 있는지 아니면CoroutineScope의 async나 launch로도 가능한지궁금합니다 ㅠ
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
밑에 질문 사진첨부해서 다시 질문드려요~
아이돌로 설명할때 ...클래스 안에서 함수 넣을때 처음엔 앞에 void를 넣으셨는데 뒤에 강의에서는 TimesTwo클래스에서는 void 를 안쓰고 바로 int 를 쓰시더라구요 void는 에러가 저렇게 나네요 왜 그런거죠...?
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
클래스안에서 함수 넣을때 요
아이돌로 설명할때 ...클래스 안에서 함수 넣을때 처음엔 앞에 void를 넣으셨는데 뒤에 강의에서는 TimesTwo클래스에서는 void 를 안쓰고 바로 int 를 쓰시더라구요 void는 에러가 저렇게 나네요 왜 그런거죠...?
-
미해결Kevin의 알기 쉬운 RxJava 1부
Single과 관련해 여쭤보고 싶은 부분이 있습니다!
안녕하세요 선생님! 틈틈이 강의 잘 듣고 있습니다.강의 수강 도중, 궁금한 점이 있어 질문드립니다! Single은 전통적인 client - server 방식의 요청을 처리하는 데 사용한다고 말씀해주셨습니다.실제로 회사에서 single.blocking() 이런 방식으로 처리하는 코드를 본 적이 있는데, single을 해당 의도처럼 사용할 경우, 동기처리 방식에 비해 얻는 이점이 있을까요??제가 아직 생각하기로는 코드는 리액티브이지만 비동기 방식으로 처리하는 것이 아닌 거 같아서요! 또한 강의 영상 3분 정도에서 보여주신 SingleCreateExample 코드에서, 발행자인 Single의 create 메소드의 파라미터인 SingleOnSubscribe<T>가 구현하고 있는 subscribe가 아래 구독자가 구독하는 subscribe() 와 같은 함수가 맞을까요?코드적으로는 둘이 연관이 있어 보여서, SingleObserver<T>와 SingleEmitter<T> 사이의 같은 부모가 있는지 확인 해보았는데 그것두 아니더라구요 ㅠ... 둘이 아예 다른 메소드 인가요??4. 코드를 살펴보다가 RxJavaHooks 라는 유틸성 클래스를 발견하게 되었는데, 함수형 인터페이스들이 막 정의되어 있는 것은 알겠는데 어떻게 해석해야 할 지가 감이 안 잡히더라구요 ㅠㅠ... 혹시 코드를 해석하는데 조언을 주실 수 잇으실까요?..항상 깊게 답변 해주셔서 감사드립니다 :)
-
미해결코틀린 고급편
DSL 만들기
안녕하세요 강사님. 내용을 몇번 더 봐야 더 잘 알겠지만막히는 부분이 있어서 질문올립니다. 18강 내용중에서 service(name = "db") { image { "mysql" } env("USER").`is`("myuser") env("PASSWORD").`is`("mypassword") port(host = 9999, container = 3306)} env("USER").`is`("myuser") 이 DSL은 어떻게 만들수 있을지 감이 오지 않습니다. ㅜㅜ