묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
변수 캡쳐 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 궁금증이 생겨서 질문을 드립니다.람다 vs 익명 클래스1 을 공부하다가, 변수지역 캡쳐, 부분이 기억이 안 나서 다시 듣게 되었는데요.(지역 클래스 - 지역 변수 캡쳐3)공부를 하고 다시 듣다 보니 localVar를 변경할수 있는 방법이 생각이 나더라고요.그래서 변경이 가능한지 테스트를 해보고, 바꾸어 보았습니다.바꾸어 보니, 값이 변경 할 수 있다는 사실을 알수 있었습니다.(사진 참조)d 여기서 질문이 생깁니다.이런식 으로 바꿀 수 있는데, 현업 에서도 이렇게 바꾸는 경우가 있냐요? 답변 부탁 드립니다.
-
해결됨김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
명령형 프로그램밍은 언제 어디서 쓰이는지?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금증이 생겨서 질문을 드립니다.필터와 맵 활용 1,2를 보면서 선언적 및 명령형을 알수 있게 되었습니다.근데 여기서 궁금한 점이 생깁니다.선언적 프로그래밍이 검증이나, 맵핑 에 많이 쓰인다고 하였는데, "명령형 프로그램은 언제 어디서 쓰일까" 라는 생각을 하게 되었습니다.가르쳐 주실 수 있으신가요?답변 부탁 드립니다.
-
미해결멀티패러다임 프로그래밍 1편: 반복자 패턴 & LISP (with TypeScript, Clojure, Kotlin)
컴파일 에러
안녕하세요, 강의 잘 듣구 있습니다.다름이 아니라 reduce 가 포함된 파일을 컴파일하면 그림과 같은 에러가 납니다. 에러 해결을 위해서 아래 두 가지 방법을 시도해보았습니다. 에러메세지처럼 reduce 함수의 정의에 A extends Acc 로 명시이 해결방법은 옳지 않은 것 같다고 생각했습니다. (A -> number, Acc -> string 인 경우)else 문에 있는 baseReduce 를 Acc 타입으로 강제 캐스팅책과 강의 코드 모두 살펴봐도 크게 다른 점이 없는 것 같아 질문드립니다. 감사합니다!(제가 작성한 코드 첨부드립니다) function baseReduce<A, Acc>( f: (acc: Acc, a: A) => Acc, acc: Acc, iterator: Iterator<A> ): Acc { while (true) { const { done, value: a } = iterator.next(); if (done) { break; } acc = f(acc, a); } return acc; } function reduce<A, Acc>(f: (a: A, b: A) => Acc, iterable: Iterable<A>): Acc; function reduce<A, Acc>( f: (acc: Acc, a: A) => Acc, acc: Acc, iterable: Iterable<A> ): Acc; function reduce<A, Acc>( f: (acc: Acc | A, a: A) => Acc, accOrIterable: Acc | Iterable<A>, iterable?: Iterable<A> ): Acc { if (iterable === undefined) { iterable = accOrIterable as Iterable<A>; const iterator = iterable[Symbol.iterator](); const { done, value: acc } = iterator.next(); if (done) { throw new TypeError('reduce of empty iterable with no initial value'); } return baseReduce(f, acc, iterator) as Acc; } else { // 왜 타입변환을 강제해야하는가..?? return baseReduce( f, accOrIterable as Acc, iterable[Symbol.iterator]() ) as Acc; } }
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
중간연산 sorted에 대해서 질문드립니다
중간 연산 강의를 듣던 중 궁금한 점이 생겨 질문드립니다!강의를 통해 Java의 스트림은 lazy하게 동작하며, 요소가 하나씩 흐르면서 중간 연산을 거쳐 최종 연산으로 전달된다고 배웠습니다.그런데 sorted는 정렬을 위해 모든 요소를 모아야 하므로, 다른 중간 연산들과 달리 lazy하게 하나씩 처리할 수는 없을 것 같습니다.이 경우 sorted는 전체 요소를 한 번에 처리하고 나서야 다음 연산으로 넘어가는 건가요?그렇다면 sorted는 중간 연산이지만 실제로는 최종 연산처럼 동작하는 게 아닌가요?
-
해결됨함수형 프로그래밍과 JavaScript ES6+ 응용편
이미지 동시성 다루기
C.takeAll에서 궁금한 점이 있습니다.C.takeAll가 추가되기 전에 지연평가를 통해 배열에서 하나씩 fade-in 클래스를 달아주고 있었다면추가한 후에는 배열의 지연평가가 모두 끝난 뒤에 달아주는 동작으로 보이더라구요.시작은 다같이 하지만, 먼저 끝나는 것부터 fade-in 클래스를 달아주는 방식은 어떻게 해야할지 감이 안옵니다.혹여나 앞에 이해가 잘못된 것이 있다면 편하게 알려주세요. 감사합니다!
-
해결됨멀티패러다임 프로그래밍 1편: 반복자 패턴 & LISP (with TypeScript, Clojure, Kotlin)
강의 커리큘럼 관련 질문
안녕하세요 강사님 좋은 강의 만들어주셔서 감사합니다.책도 같이 구매하였는데요 멀티프로그래밍 패러다임 책과 이 강의를 보면강사님의 다른 함수형 프로그래밍 자바스크립트, 함수형 프로그래밍 자바스크립트 응용편은 따로 보지 않아도 되나요? 혹은 다른 내용을 가지고 있어 전부 보는게 좋을까요?
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
인스턴스 메소드 참조와 람다의 차이
강의 수강 중 궁금하여 실험한 내용 공유합니다. 2번 특정 객체의 인스턴스 참조에 관련한 내용입니다.강의자료에서는 () -> person.introduce가 person::introduce와 동일한 것처럼 설명된 것 같습니다. "그럼 person에 대한 캡처가 일어날까?" 하는 궁금증이 들었고, 다음과 같은 코드를 작성했습니다.Person person = new Person("Kim"); Supplier<String> instanceMethod = () -> person.introduce(); person = new Person("Lee"); System.out.println(instanceMethod1.get());컴파일러가 person이 사실상 final이 아니라면서 컴파일해주지 않더군요. 다음으로는 람다 대신 메소드 참조로 바꾸어보았습니다.Person person = new Person("Kim"); Supplier<String> instanceMethod = person::introduce; person = new Person("Lee"); System.out.println(instanceMethod.get());이는 컴파일에 성공하고, "I am Kim"이 출력됩니다. Person 클래스에 setName을 추가하고 메소드 참조 이후에 호출해보았습니다.Person person = new Person("Kim"); Supplier<String> instanceMethod = person::introduce; person.setName("Park"); person = new Person("Lee"); System.out.println(instanceMethod.get());"I am Park"이 출력됩니다. 요약하면 다음과 같습니다.() -> person.introduce 에서는 person이 사실상 final이 되어야만 한다.person::introduce는 사실상 final이 아니어도 되며, 해당 메소드 참조는 정의 시 객체 참조를 유지한다.
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
JDK17에서 ExecutorService 클래스 내 close() 함수가 없는 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. 예예예안녕하세요. 강의 잘 듣고 있습니다! 강의 3분 44초 전후로 ExecutorService를 close() 함수로 닫으셨는데 es.close() 부분에서 오류가 발생합니다(스크린샷 참고).찾아보니 Java 9 이상에서 ExecutorService 구현체가 AutoCloseable을 구현한 경우에만 close()를 사용 가능하다고 하는데 현재 JDK 17 버전을 쓰고 있는데도 close() 함수를 찾지 못하고 있습니다.(다만 shudown() 함수를 사용하니 정상적으로 컴파일이 되고 닫히고 있습니다)close() 대신 shutdown()을 사용하여도 성능상 차이가 없는지 궁금합니다. 글이 길어져서 죄송합니다. 답변 부탁드립니다. 감사합니다.
-
미해결코틀린 고급편
[23강] SuperTypeToken의 equals 관련 질문
안녕하세요 강사님 23강 강의를 보다가 한가지 여쭤보고 싶은 사항이 있어서 질문을 남기게 됐습니다. 11분 46초 부분을 보면 equals 가 제대로 동작하지 않아서 if (javaClass != other?.javaClass) return false 해당 부분을 삭제하는 부분이 나오는데요. 해당 코드를 해석해보면 2개의 javaClass가 다르기 때문에 equals가 false가 나왔다는 의미 같은데, 혹시 2개의 javaClass가 다른 이유가 무엇인지 알려주실 수 있으실까요? 똑같은 타입의 클래스를 인스턴스화 했기 때문에 동일한 javaClass라고 생각을 했는데 2개가 다르다고 나오니 이해가 잘 되지 않습니다! 감사합니다.
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
클래스 메서드가 함수가 아닌 이유
안녕하세요. 강사님!클래스 메서드 역시 클래스에 소속되어있기 때문에 인스턴스에 독립적이더라도 함수가 아닌 메서드로 보는 것이라 이해해도 될까요?
-
미해결코틀린 고급편
23강 타입 안전 이종 컨테이너 예제 관련 문의 드립니다.
저같은 경우, 7:32 부분에서 List<GoldFish> 를 저장했다가 List<Carp> 타입을 꺼내려고 하면 "class generic.GoldFish cannot be cast to class generic.Carp (generic.GoldFish and generic.Carp are in unnamed module of loader 'app')" 와 같은 오류가 발생하는데, 정상적으로 금붕어 리스트가 반환되는게 맞는지요 ? 제가 뭔가 놓친 부분이 있을까 궁금하여 문의 드립니다.샘플코드는 다음과 같습니다.package reflection import generic.Carp import generic.GoldFish import kotlin.reflect.KClass import kotlin.reflect.full.cast class TypeSafeCage { val animals: MutableMap<KClass<*>, Any> = mutableMapOf() inline fun <reified T : Any> getOne(): T { return T::class.cast(animals[T::class]) } inline fun <reified T : Any> putOne(animal: T) { animals[T::class] = T::class.cast(animal) } } fun main() { val cage = TypeSafeCage() cage.putOne(listOf(GoldFish("금붕어1"), GoldFish("금붕어2"))) cage.getOne<List<Carp>>().forEach { println(it::class.simpleName) } } // 다른 패키지 파일 package generic open class Animal( val name: String ) open class Fish(name: String) : Animal(name) class GoldFish(name: String) : Fish(name) class Carp(name: String) : Fish(name) 강의 중 영상 캡쳐 화면
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
07 메서드 참조6-매개변수2 의 강의영상중 오타 있네요
[질문 내용]07 메서드 참조6-매개변수2 의 강의영상중 오타 있네요 BiFunction<Person, Integer, String> fun2 = Person::introduceWithNumber;System.out.println("person.introduceWithNumber="+fun1.apply(person,1)); //<= fun2 의 것을 호출 해야 하는데 fun1 을 호출합니다. 복 붙 하시다가 fun2로 변경하는거 실수하신것 같네요
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
강의자료 실행시 오류나요
[질문 내용]여기에 질문 내용을 남겨주세요.강의자료받아서 실행시 오류가나네요 ;;뭐가문제일까요 ?? [질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예
-
해결됨김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
[참고 영상] "CPU 수와 스레드 수를 비슷하게 맞춰야 하는 이유"
05분 30초 부분에 "왜 CPU 수와 스레드 수를 맞추는 것이 효율적인지에 대해 이해가 잘 안 가면 ~~를 참고하시라."라고 하셨는데 이와 관련하여 궁금하신 분을 위해 정보 남겨둡니다.영상: 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 - 섹션 2. 프로세스와 스레드 소개 - 컨텍스트 스위칭 영상 1분 ~ https://www.inflearn.com/courses/lecture?courseId=334352&type=LECTURE&unitId=232316&tab=curriculum
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
값이 없으면 예외를 던지는 것이 더 자연스러운 상황에 대한 질문
베스트 프랙티스 6.무조건 Optional이 좋은 것은 아니다 부분을 설명 하실 때 "값이 없으면 예외를 던지는 것"이 더 자연스러운 상황에 대한 설명 부분에서 궁금한 것이 생겨서 질문드립니다. 예를 들어 특정 ID 기반으로 User 엔티티를 찾는 DBA 코드가 있다고 할 때 반환타입을 Optional<User>가 아닌 User로 했을 때 클라이언트 코드쪽에서는 if (user == null) { throw new NotFoundException("..."); }아래와 같은 Optional을 사용한 코드보다 위와 같은 이런 코드가 더 낫다는 걸로 받아들이면 될까요??findUserById(userId) .orElseThrow(() -> new NotFoundException("..."));
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
Optionl.of에 대한 질문
Optinal은 "값이 없을 수도 있다" 라는 의도를 드러내기 위해 사용하잖아요.근데 Optional의 정적 생성자 메서드 중에 Optional.of()를 보면, null일 경우 NPE가 발생하는데, 그럼 Optional을 사용하는 의미가 없지 않나요? Optional.ofNullable과 empty는 사용의도라던가 언제 사용하면 되겠다에 대한 인사이트가 확 오는 반면에 Optional.of는 언제 사용하면 좋을지에 대한 감이 안오네요.
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
저도 람다에 파라미터 힌트를 키고싶어요,,
저도 람다 사용할 때 o -> o.getDelivery() 이거 사용할 때 파라미터 힌트로 Order 같은걸 띄우고싶습니다. 옵션에 Inlay Hints 에서 자바쪽도 다 켜보고 했는데 저는.. 왜 안켜질까요 ㅠㅠ
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
Stream과 디버깅
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 강의 정말 잘 보고 있습니다. Stream관련하여 질문이 있는데요. Stream 같은 경우에는 파이프라인을 작성하면서 연산마다 body부가 추가될 수도 있고 중간 연산이 계속 체이닝 되는 형태로 구성이 될 수도 있습니다. 이럴 때 어느 연산에서 문제가 생기는지 디버깅을 하는게 참 번거롭다는 생각이 들곤했습니다. 저 같은 경우에는 이럴 때 peek 와 sout을 활용해서 어떻게든 값을 확인하는 식으로 디버깅을 해왔는데 더 좋은 방법이 없을까요? 브레이크 포인트를 잡기도 명령형 프로그래밍 방식보다 어려운 점이 있는 거 같아서요 ㅠㅠ
-
해결됨김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
[수정 제안] 10. Optional.pdf - p.24 - orElse() 사용 용도
공부하던 중에 이 부분은 이렇게 수정해야 되는 것 아닌가..? 싶어서 글 남겨봅니다.[수정 제안 정보]대상 강의록: 10. Optional.pdf대상 위치: 강의록 p.24의 최상단 부분, 영상의 10분 50초~수정 제안수정 전: 사용 용도orElse(T other)- 값이 이미 존재할 가능성이 높거나, ...수정 후: 사용 용도orElse(T other)- 값이 존재하지 않을 가능성이 높거나, ...수정 제안에 대한 근거orElse(T other)는 other의 생성 비용이 높은 경우에 "값이 이미 존재함에도 불구하고 생성 연산을 수행해야됨"으로 인해서 비효율이 발생합니다.이는 바꿔 말하면 "값이 존재하지 않는 경우에는 생성 연산이 필수적임"이기 때문에 "값이 존재하지 않는 경우에는 비효율이 발생하지 않음"이라고 해석할 수 있을 것 같습니다.이때 강의에서 말하고자 하는 바는 "orElse()는 비효율이 발생할 수도 있다. 하지만 발생하지 않는 경우에는 사용해도 좋다." 라고 이해했는데, 이때 "비효율이 발생하지 않는 경우"를 "값이 존재하지 않는 경우(생성 연산이 꼭 필요한 경우)"라는 표현으로 대체할 수 있기 때문에"값이 존재하지 않을 가능성이 높은 경우(= 비효율이 발생하지 않는 경우)에는 orElse()를 사용해도 괜찮다."라고 수정해야 하는 것이 아닌가 싶어서 제안합니다.
-
해결됨김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
[오타 제보] 10. Optional.pdf - p.11
[오타 정보]대상 강의록: 10. Optional.pdf대상 위치: 강의록 p.11의 2. ifPresentOrElse() 코드 부분, 영상의 5분 ~오타 내용수정 전public class OptionalProcessingMain { ... System.out.println("=== 2. ifPresentOfElse() ==="); // Of라고 오타 ...수정 후public class OptionalProcessingMain { ... System.out.println("=== 2. ifPresentOrElse() ==="); // 'Of' -> 'Or' 수정 ...