230425(화)
🎄 성장일지 4.0
책 행복한 이기주의자(웨인 다이어)
의 내용에 자극받아 시작하는 소박한 성장기록
살아있는 꽃과 죽은 꽃은 어떻게 구별하는가?<br/> 성장하고 있는 것이 살아 있는 것이다.<br/> 생명의 유일한 증거는 성장이다!
🌳 (1.0)키워드<br/> 최대한 간단하게 정리, 추후에 보면서 스스로 설명<br/> 🍉 (2.0)경험 위주로<br/> 단순 정보를 전달하기보다 무엇을 배웠고 어떻게 해결했는지 짧고 간단하게 작성<br/> ❄️ (3.0)정해진 템플릿에 맞춰서<br/> 키워드, 경험 모두 좋다. 다만 매일 작성하기로 마음 먹은만큼 핵심만 간결하게 정리할 수 있게 템플릿을 작성<br/> (3.1)230102부터 시작되는 학습에 관한 내용 추가<br/> (3.2)230313부터 좀더 경험, 감정 위주의 내용도 담기!<br/> 🌾 (4.0)학습 키워드에서 최대한 간단한 정보 제공, 고민에서 내 경험을 자세히 적자!<br/>
🧐 고민 사항
🔑 오늘의 학습 키워드
- 특별 강의, 리액트
🥳 학습 내용
Q. 좋은 개발자란?
열린 마음을 갖고 학습 속도가 빠른 사람 타 학문에 비해서 컴퓨터 공학쪽은 새로운 게 너무 빨리 나온다. 그렇기 때문에 이를 빠르게 배울 수 있는 사람이 좋은 개발자라고 생각한다. 돈이 많이 움직이고 사회적 영향도 크기 때문에 빠르게 넓은 시야로 볼 수 있는 사람이 좋은 개발자가 될 수 있지 않을까.
Q. 주니어 개발자가 갖추면 좋은 역량?
- 모르면 질문을 좀 해라
- 검색은 먼저 좀 해보고
- 착했으면 좋겠다.
- 말을 잘 했으면 좋겠다. 말하기, 글쓰기, 듣기, 읽기
- 건강했으면 좋겠다.
- 코딩은 기본이다.
단, 지금 당장 코딩을 잘하는 것은 생각보다 중요하지 않다. 회사마다, 팀마다, 집단마다 그 입장에 따라 다르지만 코딩을 너무 잘하는 것도 문제 못하는 것도 문제다. 지금 당장 코딩을 잘하는 것보다 성장할 수 있는 사람!
멱등성
- f(x) = f(f(x))
- ex) 통장에 입금시키는 로직
- 여러번 실행되어도 1번만 실행되게!
결정론적
function foo(a) { return Math.random(); } let b = 5; function foo(a) { b += 1; return b; }
위의 함수들은 비결정론적이다. 호출 때마다 다른 값이 나온다. 즉, 결정론적인 코드는 어제하든, 오늘하든, 내일하든 같은 결과가 나온다. 테스트하기 좋아진다. 테스트가 가능해지고 테스트가 완결해진다. 또한 코드를 보기도 굉장히 쉬워진다.
flux 패턴에서도 이와 같은 걸 원한 것이다. reducer를 순수함수로 만들자!! 복잡하게 연결된 것이 아니라 아주 간단한 in, 아주 간단한 out을 만들자! 멱등성과 결정론적인 함수. 물론 이걸 다 지킬 수 있는 건 아니다. 어플리케이션에 따라서 비결정론적이긴 하다.
flux 패턴
dispatch 는 reducer로 액션에 대해서 새로운 state를 만들고 새로운 애를 만들어서 넣어준다. 그리고 기존 애는 지워준다.
회사가 잘 돌아가고 있다. ceo가 새로 왔다. 그 ceo가 원하는 모습으로 세팅을 해달라고 한다.
- 있는 사람들을 원하는대로 재배치하고 바꾼다.
- Stateful한 방식
- 재활용의 이점
- 복잡하다.
- 아예 새로운 사람들을 뽑는다.
- Stateless한 방식
- 재활용할 수 없다.
- 그냥 다 밀어버리고 새로 채우니까 깔끔하다.
2번이 깔끔하지만, 2번은 비용이 많이 든다. 심지어 아주 조금만 바꾸는건데 2번으로 하는 건 비효율적이다.
위의 예시에서 리액트의 경우는 아래와 같다.
이전의 state에 대한 가상 dom tree와 새로운 state에 따른 가상 dom tree를 만든 뒤에 변경 사항을 비교해서 변경된 부분에 대해서만 변형을 일으킨다.
위의 ceo 예시를 든다면, 기존의 회사 모습을 가상으로 두고 새롭게 원하는 회사의 모습을 가상으로 만든 뒤 이 2개의 자료를 컨설팅 회사에 가져가서 변경해야되는 부분만 바꾸는 것이다.
그 중간에 컨설팅을 해주는 게 Diff, PATCH
의 역할이다.
undefined