묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
CachedNetworkImage 로 인한 memory leak 문제..
안녕하세요 코드팩토리님!선생님의 dart강의를 듣고flutter로 혼자 사이드 프로젝트를 진행하고 있는 중에 질문이 있어 이렇게 글을 남깁니다.다만 무료 dart 강의만 듣고 flutter 질문을 드리는 것이 죄송하네요..ㅜㅜ 우여곡절끝에 제가 생각하던 앱을 비슷하게나마 완성을 했는데요.아기 사진을 가족들과 공유할수 있는 사진앨범 앱을 만들었습니다. 기본적으로 firebase를 연동하여 데이터를 받아와서, gridview 이미지들을 보여주고있습니다.스크롤 시, 추가적으로 데이터들을 받아와서 이미지들을 보여주게 되는데요여기서 이미지들이 다 불러와지지 않은 상태에서빠르게 스크롤을 하면 앱이 꺼져버리는 문제가 생겼습니다. 구글링 및 디버깅을 해보니 memory leak으로 앱이 꺼지는 것 같은데Image.network를 CachedNetworkImage로 바꿔도 보고setState를 남발해서 그런가 싶어서 코드팩토리님 유튜브의 'provider로 sns 스타일 infinite scroll 구현하기!' 를 참고하여provider로 상태관리를 하도록 바꿔도 보고const를 선언할수 있는 부분은 선언하고최대한 build를 호출 안하게끔, build에 복잡한 로직이 안들어가게끔 수정하였는데요.그럼에도 불구하고 이 문제는 고쳐지지가 않더라구요 ㅜㅜ 불러오는 이미지 url을 CachedNetworkImage로 보여주지 않고그냥 Text로 보여주면 해당 문제가 안나오는걸로 봐선뭔가 이미지 관련해서 문제가 있는것 같긴한데어떻게 해결해야하는지 감이 잡히지도 않고, 답답한 심정입니다 ㅜㅜ괜찮으시다면 방법을 제시해주실수 있을까 싶어 질문남깁니다.감사합니다!
-
미해결함수형 프로그래밍과 JavaScript ES6+
병렬평가 질문 있습니다!
C.reduce = curry((f, acc, iter) => { log([...acc]); return iter ? reduce(f, acc, catchNoop(iter)) : reduce(f, catchNoop(acc)); });reduce에 acc를 전개연산자로 펼쳐서 전달하지 않고 이전에 하게 되면 저렇게 iterable의 값이 모두 소비된 상태로 전달 되기 때문에 reduce의 값이 undefined로 평가 되는 것일까요...?
-
미해결함수형 프로그래밍과 JavaScript ES6+
함수를 분리하지 않고 실행하게 되면 순환참조 오류가 발생합니다...
const reduce = curry((f, acc, iter) => { if (!iter) return reduce(f, head((iter = acc[Symbol.iterator]())), iter); iter = iter[Symbol.iterator](); return go1(acc, function recur(acc) { let cur; while (!(cur = iter.next()).done) { /* acc = reduceF(acc, cur.value, f); */ const a = cur.value; acc = a instanceof Promise ? a.then( (a) => f(acc, a), (e) => (e === nop ? acc : Promise.reject(e)) ) : f(acc, a); if (acc instanceof Promise) return acc.then(recur); } return acc; }); });이렇게 실행하면Uncaught (in promise) TypeError: Chaining cycle detected for promise #<Promise>위와 같이 순환참조 오류가 발생하는데 이렇게 발생하는 이유가 아래와 같은 순서로 인해 발생하는게 맞는지 확인좀 부탁드립니다...acc에 a.then메서드가 호출된 결과로 이때 pending 상태의 Promise 객체가 할당됨 a.then메서드의 콜백함수가 실행되며 1번의 pending상태의 Promise객체가 리턴 pending상태이기 때문에 settled상태가 아니며 프로미스 체이닝이 불가능 하고 프로미스를 사용 할 수 없는 무한정 대기상태에 빠짐 프로미스 다루는게 무진장 어렵다는것을 한 강의 한 강의 마다 느낍니다...
-
미해결함수형 프로그래밍과 JavaScript ES6+
rxjs 와 차이점
학습잘 듣고 있습니다.듣다가 궁금한것이 rxjs 와 fstx 와의 차이가 컨셉이 비슷한 부분이 많다는 느낌이 받습니다.rxjs 와 fstx 를 결합해서 사용도 해도 될 듯 보입니다.rxjs 와 fstx 의 개념적으로나 사용적인 면에서 차이가 뭔지 궁금합니다.
-
미해결자바스크립트로 알아보는 함수형 프로그래밍 (ES5)
거르기 함수 중 compact 질문드립니다.
compact 함수를 선언하면 TypeError: _compact is not a function라고 나오는데 이유를 알 수 있으ㅡㄹ까요? const compact = filter(_identity)console.log( _compact([1, 2, 0, false, null, {}]));// 2. compact
-
미해결함수형 프로그래밍과 JavaScript ES6+
return 있고 없고 차이 질문드립니다...!
const reduce = curry((f, acc, iter) => { if (!iter) { iter = acc[Symbol.iterator](); acc = iter.next().value; } else { iter = iter[Symbol.iterator](); } return (function recur(acc) { let cur; while (!(cur = iter.next()).done) { const a = cur.value; acc = f(acc, a); if (acc instanceof Promise) acc.then(recur); } return acc; })(acc); }); const go = (...args) => reduce((a, f) => f(a), args); go( 1, (n) => Promise.resolve(n + 10), (n) => n + 100, log );위와 같이 acc.then을 리턴하지 않는 경우 log에 값이 깨져 보여서 설연휴 동안 계속 왜이런지 고민해서 내린 답인데 글이 길지만 한번 제가 내린답이 맞는지 틀렸다면 어디부분이 잘못됐는지 확인좀 부탁드립니다...! 길어서 댓글로 남기겠습니다.
-
해결됨자바스크립트로 알아보는 함수형 프로그래밍 (ES5)
강의 잘봤습니당
FEConf 영상보고 신기해서 검색하다가 이런 사이트까지 왔는데유료강의도 한번 한번봐야겠네요👍
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
이것이 왜 실행이 안되는지 여쭙고 싶네요.
void main() { Idol bts = const Idol.fromList([['제이홉','슈가'],'BTS']);}class Idol { final String name; final List<String> members; Idol(this.name, this.members); const Idol.fromList(List values) : this.members = values[0], this.name = values[1];}constructor를 const로 만들려고 하는데 잘 안되서요..이 코드는 왜 실행이 안되는건지 여쭤봐도 될까요..
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
초급강의를 수강할때 질문입니다.
초급강의를 수강할때는 꼭 flutter프로그램을 다운받아야 하나요? 감사합니다.
-
해결됨퀀트 투자를 위한 파이썬 트레이딩룸 만들기 - Part 1
StockListing 함수 오류
StockListing 함수를 직접 제작해서 조회하는 부분 질문입니다.22년 1월 KRX 데이터와 23년 1월 현재 KRX 데이터가 많이 다른거 같습니다.그래서 StockListing 함수를 동일하게 제작하면 전혀 다른 결과가 나옵니다.KRX 데이터가 변동이 생길때마다 StockListing 함수를 수정해야 하는 상황인데 해결 방법 문의드립니다.
-
해결됨함수형 프로그래밍과 JavaScript ES6+
평가 순서에 대해 질문이 있습니다!
안녕하세요. 먼저 좋은 강의와 항상 빠르게 답변을 해주셔서 너무 감사합니다. 질문은 아래와 같습니다.지연성 1 파트에 있는 평가순서 강의를 복습하면서 클레이슬리 컴포지션의 평가 순서를 생각해보았는데, 제 생각이 맞는지 궁금합니다. 예시코드// gogo( [1, 2, 3, 4, 5], L.map((n) => Promise.resolve(n)), L.filter((n) => n % 2), take(2), console.log // [1, 3] ); // takeexport const take = curry((l, iter) => { let result = []; iter = iter[Symbol.iterator](); // recur()가 실행되면, 여기서 다시 시작을 하는데. // iter.next()가 실행되면, return (function recur() { let cur; while (!(cur = iter.next()).done) { const value = cur.value; // a가 promise 인 경우 재귀함수를 이용해서 처리함 if (value instanceof Promise) return ( value // .then((v) => (result.push(v), result).length === l ? result : recur() ) // filter에서 reject가 되면, catch에 걸리고 e가 nop이면 recur()를 실행한다. .catch((e) => (e === nop ? recur() : Promise.reject(e))) ); result.push(value); if (result.length === l) return result; } return result; })(); });// L.filterconst nop = Symbol("nop"); export const L.filter = curry(function* (f, iter) { for (const a of iter) { const b = go1(a, f); if (b instanceof Promise) yield b.then((b) => (b ? a : Promise.reject(nop))); else if (b) yield a; } });// L.mapexport const L.Map = curry(function* (f, iter) { for (const el of iter) { yield go1(el, f); } }); 평가 순서take 함수 내, iter.next() 평가를 시도 → L.filter로 이동L.filter 내, iter.next() 평가를 시도 → L.map 으로 이동L.map 내, inter.next() 평가를 시도한다. → [1, 2, 3..] 를 iter 로 받았기 때문에 1로 평가 된다.L.filter 로 돌아와, L.map으로부터 평가받은 Promise.resolve(1) 이라는 값(b)으로 내부 로직을 수행한다.b의 인스턴스가 Promise라면, b.then을 실행하고 a 또는 Promise.reject을 한다.여기서 a는 Promise 이다.b의 인스턴스가 Promise가 아니라면, result.push(value); 을 실행하고 while로 순회한다.L.filter 의 평가가 끝나면 take 함수로 돌아온다take로 전해지는 L.filter 의 평가값은 4개 중에 하나일 것이다.a → take 내에서 result.push 가 실행됨Promise.resolve(a) → take 내에서 .then 절이 실행됨.Promise.reject(nop) → take 내에서 .catch 절이 실행되고 recur() 를 실행함Promise.reject(e) → take 내에서 .catch절이 실행되고, Promise.reject(e) 로 이어짐recur()가 실행되면, take 에서 실행된 첫번째 while 사이클이 끝나면서, 다시 recur()가 실행되며 iter.next()가 평가할때 위 과정을 다시 반복한다. take에 있는 while 사이클이 return되고 recur() 함수 실행이 종료됐음에도 iter.next()의 값이 이전값에서 이어지는 이유는 recur() 와 iter가 클로저이기때문이다.
-
미해결함수형 프로그래밍과 JavaScript ES6+
선수 학습 영상
이 영상을 보기전에 학습하면 좋은 영상을 추천해주실수 있나요??기초적인 문법지식만 가지고 보기에는 어려운것 같아서요. 추천 부탁드립니다.
-
미해결함수형 프로그래밍과 JavaScript ES6+
reduce iter인자가 없을 경우
이렇게 구현한 것과 주석친 부분(강의에서 코드)과는 어떤 차이가 있을까요? 이것저것 넣어보는데 잘 동작하는 것 같아서 질문 드립니다.
-
해결됨자바스크립트로 알아보는 함수형 프로그래밍 (ES5)
group_by, count_by함수가 좋은건지 잘 모르겠습니다.
안녕하세요? 좋은강의를 무료로 공개해 주셔서 감사한 마음으로 잘 듣고있습니다! 공부하다 map, filter, reduce에 비해 group_by, count_by함수는 좋다는 느낌이 들지 않아서 답답함을 해소할 수 있을까 싶어 질문 드립니다. 제가 그냥 생각해 봤을때는 group_by를 통해 멋지게 그룹핑을 했다면 그 결과를 reduce와 같은 함수를 이용해서 집계를 하는게 좋다고 생각을합니다. 예를들어서 다음과 같이 동작했으면 좋겠습니다. _go( [{a:1, b:1}, {a:2, b:2}, {a:3, b:1}, {a:4, b:3}], list => _group_by(list, obj=>obj.b), grouped => _group_reduce(grouped, (a_sum, obj)=>a_sum+obj.a, 0), console.log, ) // 결과 { '1': 4, '2': 2, '3': 4, } 이런 저의 바람과는 달리 카운팅 이라는 단순한 동작을 위해서도 새롭게 'count_by함수를 만들어 낸다'는점이 앞에서 배운 '함수형'이라는 느낌이 나지 않는거 같습니다. 이렇게 된다면 위의 예제와 같이 group_by된 결과에서 a의 값을뽑아 모두 더하는 작업을 하려면 '_group_by_add_a'와 같은 함수를 만들어야 하고, 또 다른 작업을 하려면 또 새롭게 무언가를 만들어내야 할 거 같습니다. 그리고 map, filter, reduce등은 array like를 만들어 내고 이 결과는 go를통해 계속하여 연결해 쓸 수 있는 느낌이었지만, group_by, count_by는 객체를 리턴해 버려서 더이상의 진행은 없는 느낌이 듭니다. (물론 Object.values후 flat 하면 다시 Array가 되긴 합니다만, 이렇게 해버리면 에초에 그룹으로 묶은 의미가 사라지는게 아닐까 합니다.) 위와같이 그룹에 대해서 또 다시 연산하는 무언가를 나중에 배우는 건가요? 아니면 함수형은 마지막을 만들어둔 집계함수로 마무리하는게 끝인 건가요? 그리고 return이 객체인 경우 그 이후 진행을 어떻게 하는게 좋은지도 궁금합니다. 감사합니다.