묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
FilterExampleEx2의 또 다른 답안 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 정보]질문 내용의 위치:3. 함수형 인터페이스.pdf _ 문제와 풀이 _ 문제1 - FilterExampleEx2제가 작성한 소스코드: https://inf.run/GQrVP질문 요약: 1) Predicate 말고도 추가적으로 filter() 메서드도 BiFunction 함수형 인터페이스로 대체했는데, 이 정도까지 (메서드까지) 대체하는 것은 너무 과한 행동인지 궁금합니다.2) BiFunction.apply()를 호출하여 필터링 하는 방식은 filter() 메서드로 필터링하는 방식보다 직관성이 떨어지기 때문에 권장되지 않는지 또는 그냥 사용해도 되는지 궁금합니다. [질문 내용]안녕하세요. 기존 FilterExampleEx2의 모든 부분을 자바가 제공하는 함수형 인터페이스로 대체하는 문제로 잘못 이해해서 filter(리스트, Predicate) 메서드까지 BiFunction<리스트, Predicate, 리스트> 함수형 인터페이스로 대체를 했습니다. 이때 제가 생각했을 때는 크게 두 가지 부분이 문제가 될 수도 있겠다고 생각을 했는데, 실제로도 문제가 될 위험이 있는지 궁금해서 질문드립니다. (필터링 결과는 동일합니다.) (제가 추측한) 문제 상황1. 너무 과한 대체메서드까지 함수형 인터페이스로 대체하는 것은 너무 과하다. (제가 추측한) 문제 상황2. 직관성의 저하(영한님 답안의 경우) filter() 메서드를 호출하는 방식의 경우 메서드명이 filter로 직관적이다.(제 답안의 경우) BiFunction.apply()를 호출하는 방식의 경우 apply()라는 메서드명만 보고는 "필터링한다"라는 느낌을 받을 수 없어 직관적이지 못하다.제가 작성한 소스코드는 [질문 정보] 부분에 구글 드라이브 링크를 첨부했으나, 혹시 몰라 질문글에도 작성해봅니다.package lambda.ex3; import java.util.ArrayList; import java.util.function.BiFunction; import java.util.function.Predicate; import java.util.List; // 내 풀이 public class FilterExample { public static void main(String[] args) { List<Integer> numbers = List.of(-3, -2, -1, 1, 2, 3, 5); System.out.println("원본 리스트: " + numbers); // predicate까지 parameter로 받으면 더 유연하다. BiFunction<List<Integer>, Predicate<Integer>, List<Integer>> listFilter = (numberList, predicate) -> { ArrayList<Integer> filteredList = new ArrayList<>(); for (Integer number : numberList) { if (predicate.test(number)) filteredList.add(number); } return filteredList; }; // 조건 1. 음수(negative)만 골라내기 Predicate<Integer> isNegative = n -> n < 0; List<Integer> negatives = listFilter.apply(numbers, isNegative); System.out.println("음수만: " + negatives); // 조건 2. 짝수(even)만 골라내기 Predicate<Integer> isEven = n -> n % 2 == 0; List<Integer> evens = listFilter.apply(numbers, isEven); System.out.println("짝수만: " + evens); } }
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
[오타 제보] 3. 함수형 인터페이스.pdf - p.23
[오타 제보]대상 강의록: 3. 함수형 인터페이스.pdf대상 위치: #특화 함수형 인터페이스 - ##Operator를 제공하는 이유 - 1. 의도(목적)의 명시성 중 세 번째 글머리대상 페이지: p.23오타 내용수정 전: 만약 모두 Function<T, R>나 BiFunction<T, T, T>만으로 처리한다면, ...수정 후: 만약 모두 Function<T, T>나 BiFunction<T, T, T>만으로 처리한다면, ...입력과 리턴이 같은 XxxOperator와 비교하는 문장이기 때문에 BiFunction<T, U, R>을 BiFunction<T, T, T>으로 표현했으니 Function<T, R>도 Function<T, T>으로 표현해야 될 것 같아서 제보합니다!앞서 배웠던 제네릭이랑 연관된 부분을 배우니 특히 더 재밌습니다!!
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
[오타 제보] 2. 람다.pdf p.40
[오타 제보]대상 강의록: 2. 람다.pdf대상 페이지: p.40의 main() 코드 블록오타 내용 변경 전(1): // 1. 합 구하기 (초기값 0, 덧셈 로직)변경 후(1): // 1. 합 구하기 (초깃값 0, 덧셈 로직)변경 전(2): // 2. 곱 구하기 (초기값 0, 곱셈 로직)변경 후(2): // 2. 곱 구하기 (초깃값 0, 곱셈 로직) 코드 블록에서는 초기값이라고 되어 있고, 바로 밑에 용어 - reduce, fold 부분에서는 초깃값이라고 되어 있어서 저도 궁금해서 검색해봤는데 초깃값으로 표기하는 것으로 확인됩니다. 이런 맞춤법은 명확한 기준이 없이 국립국어원 마음대로 정하기는 하던데 혹시 강의록에서 단어를 통일하실 때 도움이 될까 해서 제보합니다. 출처1: IT 글쓰기와 번역 노트 - 5.1. 맞춤법 - 값 <- 여기서 페이지 조금 내리다 보면 d. 사전에 ‘-값’으로 등재된 단어 부분에 있습니다.출처2: 초기값 - TTA 정보통신 용어사전 - "초기값은 ... => 규범 표기는 '초깃값'이다."출처3: 국립국어원 답변 - "'최댓값', '최솟값', '초깃값'이 표준어입니다 ..."
-
해결됨김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
[오타 제보] 인프런 내에서 섹션 명이 기본값으로 설정되어 있습니다!
[질문 내용]아래 사진과 같이 섹션1의 제목이 기본값으로 설정되어 있습니다. [사진: 자바 고급3편의 '커리큘럼' 목록에서 보이는 섹션들] .
-
해결됨김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
사소한 오타
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.매개변수 전달관련 예제 출력할때 오타가 약간있는거 같습니다.System.out.println("person.introduceWithNumber = " + fun2.apply(person, 1)); // fun2로 변경
-
해결됨김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
2.람다.pdf
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 2.람다.pdf 36p MyFunction 은 함수형 인터페이스이며, String apply(String s) => StringFunction 이거죠??
-
미해결코틀린 함수형 프로그래밍 - 입문편
안녕하세요 강사님, discountCache 처리 방식에 대해 질문드립니다.
@Component class DiscountAdapter { private val discountCache = CacheUtil<Int, Double>() fun getDiscountRate(): (Int) -> Double = { amount -> discountCache.getOrLoad(amount) { when (amount) { in 100..1000 -> 0.1 in 1001..10000 -> 0.2 else -> 0.0 }} } }처럼 서비스는 굳이 고치지 않고 DiscountAdapter 클래스 내에서 캐시처리 하는 방법은혹시 함수형 프로그래밍 방식에 어긋나는 부분이 있을까요?
-
미해결코틀린 고급편
abstract class Fish(name:String):Animal(name)
파라미터 name:String에서 val name 이 안되는데 이유가 뭔지 모르겠네요;;
-
미해결코틀린 함수형 프로그래밍 - 입문편
[문제집] 6_함수를 응답으로 받기 - 1번문제 오류
안녕하세요, [문제집] 6_함수를 응답으로 받기 1번문제에 오류가 있습니다. createMultiplier 함수 파라미터로 factor가 되어야 하는데 2로 들어와있네요. 문제집 해설 영상 보면 알 수 있지만 잘못되어 있어서 제보드립니다. 감사합니다.
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
Set 인덱스 접근 질문입니다
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 강의 잘 듣고 있습니다 ㅎㅎ다름이 아니라 Set에 대해서 추가적으로 공부하고 있는데 Set은 순서가 없는 타입이라 인덱스로 접근이 불가능하다고 알고 있습니다 근데 아래 코드를 보면출처 https://aidenarea.tistory.com/entry/Dart-Set-%EC%B4%9D%EC%A0%95%EB%A6%ACSet set1 = {'value1', 'value2', 'value3', 'value4'}; print(set1.elementAt(0)); // value1인덱스를 통해 값을 가져오는 방법을 소개하고 있습니다이건 어떻게 가능한 건지 알려주시면 감사하겠습니다!
-
미해결코틀린 함수형 프로그래밍 - 입문편
실습 자료 부분 업로드 다시 부탁드립니다!
지금 올려주신 실습 자료가 문제가 있는 것 같습니다! 압축을 해제하면 .idea 디렉터리만 존재하고 내부 코드는 없는데 이 확인 부탁드려요!
-
미해결퀀트 투자를 위한 파이썬 트레이딩룸 만들기 - Part 1
MACD & 오실레이터 with EXCEL 강의 데이터 문의
Mt = w * Pt + (1-w) * Mt-1 에서날짜가 과거시점으로 가야하는것 같은데..강의 및 엑셀자료는 미래시점으로 계산된것 같습니다.데이터를 역순으로 바꿔서 계산을 해야 할 것 같은데 확인 부탁드리겠습니다.감사합니다.
-
미해결자바스크립트로 알아보는 함수형 프로그래밍 (ES5)
FxTS를 이용한 함수형 프로그래밍에 대해 궁금한점이 있습니다.
강의의 내용과 FxTS를 보면 주로 iterable(generator)에 대해 다루는 것으로 이해가 됩니다.그런데 범용적인 프로그래밍에 있어 iterable에 대해서만 주로 다루는 FxTS는 기능이 부족하다는 생각이 듭니다. (예를들어 iterable이 아닌 일반 객체를 FxTS로 다루기 힘듭니다. 만약 억지로 객체를 length가 1인 iterable로 변환한다고 해도 체이닝 과정에서 결국 적절한 모나드가 없어 중간에 체이닝이 끊어지는 일이 쉽게 발생할 것 같습니다.) FxTS를 마치 RxJS와 같이 특정 문제에 대한 해결을 목적으로 만들었는지,그리고 실무에서 코드를 주로 함수형으로 작성한다면 FxTS만으로 하는지 아니면 다른 도구를 추가로 사용중인지도 궁금합니다. 좋은강의 감사드립니다.
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
void 궁금한점이 있습니다!
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. void 설명 부분에서 addNumbers 에 int선언하기전 void가 사실 생략되어있다고 하셨는데 그럼 두번째 사진에서의 addNumbers 함수는 실행되어야하는거 아닌가 의문이 듭니다~
-
해결됨코틀린 고급편
지식공유자님 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언어 같은 경우는 변수 이름 규칙에 특수 문자 사용 불가, 숫자로 시작 불가, 공백 금지 등 변수 이름의 표기법이 아닌 정말 문법적으로 반드시 지켜야 하는 규칙이 있는데 다트 언어도 문법적으로 반드시 지켜야 하는 규칙이 있는지 궁금합니다..! 구글링을 통해 정보를 얻어보려고 했으나 제 서칭 능력이 부족한 건지 원하는 결과를 얻지 못해서 질문드립니다! 좋은 강의 감사합니다! 좋은 하루 보내세요 ㅎㅎ
주간 인기글
순위 정보를
불러오고 있어요