오늘 한일

로또 2단계 구현 & 1단계 마지막 피드백 반영

1단계 마지막 피드백을 반영하고, 2단계 구현을 완료하여 피드백을 요청 했다. 2단계를 진행하면서 마주한 주요 고민은 상속 vs 구현을 사용하느냐메소드 파라미터의 갯수 줄이기 두 가지 였다.

백준 입출련 관련 문제 풀이

2557, 1000, 2558, 10950, 10951, 10952, 10953, 11021, 11022, 11718, 11719, 11720, 11721, 2741, 2742, 2739, 1924, 8393, 10818, 2438, 2439, 2440, 2441, 2442, 2445, 2522, 2446, 10991, 10992

처음 문제들은 너무 쉬워서 머리로 풀고 넘어갔다. 실제로 풀어 본 문제는 별찍기와 관련된 문제들이다. 프로그래밍을 처음 배우던 시절이 떠오르는 문제들 이었다.

플러터 인스타그램 클론앱: Firestore의 데이터 읽기

이전 강의에서 구현했던 게시물 업로드에서 Firestore에 저장된 이미지를 로드하는 기능을 구현했다. 이제 두 개의 강의만 남았는데, 강의가 끝나면 1/4/7/14 공부법을 앱으로 만들어 볼 예정이다. 학교 다닐 때 배웠던 컴퓨터 구조를 다시 공부하면서 1/4/7/14 공부법을 사용해봤는데, 공부 속도는 느리지만 공부한 내용을 장기적으로 기억하는데 효율적인 공부법이었다. 그런데, 공부 일정을 관리하기가 귀찮다. 앱으로 만들면 편할 것 같다.

함수형 프로그래밍과 Javascript ES6+: 지연평가

range와 느긋한 L.range

log = console.log
const curry = f =>
	(a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._);
const reduce = curry((f, acc, iter) => {
	if (!iter) {
		iter = acc[Symbol.iterator]();
		acc = iter.next().value;
    }

	for (const a of iter) {
		acc = f(acc, a);
    }
	return acc;
});

var add = (a, b) => a + b;

// range
const range = l => {
  let i = -1;
  let res = [];
  while (++i < l) {
    log(i, 'range');
    res.push(i);
  }
  return res;
};

var list = range(4);
log(list);
log(reduce(add, list));

// 느긋한 L.range
const L = {};
L.range = function *(l) {
  let i = -1;
  while (++i < l) {
    log(i, 'L.range');
    yield i;
  }
};

var list = L.range(4);
log('지연 평가');
log(list);
// list.next()를 수행하기 전에는 평가되지 않음
log(reduce(add, list));

즉시 평가하는 range 함수와 지연 평가하는 L.range를 작성하고 두 가지 방식의 차이점에 대해 공부했다.

yield: 제너레이터 함수에서 제너레이터 프로토콜을 통해 반환할 값을 정의합니다. 값이 생략되면, undefined를 반환합니다.

제네레이터와 yield 구문을 사용하면 이터레이터의 next가 호출되어 필요한 구문이 실행되기 전에는 평가하지 않는 지연평가 기법을 제공할 수 있다.

오늘 느낀점

잇다에서 이직 관련해서 질문을 했었는데, 답변을 받았다. 답변 내용은 나와 궁합이 맞는 회사가 있을 것이니 공부 방법보다는 이직에 대해서 더 고민해보라는 내용이었다. 입사 지원을 해야 할 때가 온 것 같다. 일단 바닐라코딩, 코드스테이츠에서 상담을 해보고 결정해야겠다.

아무튼 느낀 점은 뭐.... 그냥 열심히 하자 끝.

내일 할일

  • 백준 DP 관련 문제 풀이

  • 로또 2단계 피드백 반영