찰쓰 코치님, 병현님, 효선님, 나 4명 참여
책 17챕터(냄새와 휴리스틱) 전체
각자 코드를 수정할 때 속으로 던지게 되는 질문이 궁금합니다
예: 이 코드 라인이 꼭 필요할까?
굳이 이렇게 긴 코드를 작성할 필요가 있을까? (ex. for문 → 고차함수로 바꾸고 싶은 충동)
함수명이 함수 안에서 일어나는 모든 일을 포함하고 있나? (일부 지엽적인 내용만 포함하는 함수명은 아닌가?)
의견 1:
의견 2:
의견 3:
의견 4:
의견 5:
의견 6:
RxJS 도입을 제안
근데 다른 팀원들이 새로 공부를 해야 하는 상황
코드를 쓰면 분명 달라지는 것이 있는데 도입하는 게 좋을 지?
의견 1 (실제 시도):
예시 코드를 많이 넣은 PR을 업로드
그걸 보고 팀원들이 판단 (기존 것보다 변화가 많은지 아닌지)
⇒ 이렇게 해서 의견 수렴을 해야
의견 2:
팀원들의 거부감이 커도
내가 정말 필요하다 싶으면 밀어붙일 수도(?)
좋은 코드란 것은 비용
어디까지 받아들여야 할지가 고민이었다
의견 1:
리팩토링 시 예를 들어
부동산 목록 페이지 생성
첨에 막 만들면서 별로로 짜다가
내가 코드를 수정하고 다른 사람에게 코드 리뷰를 받음
리팩토링이란 패턴 적용이 큰 작업임..
좋은 구조를 써도 그 구조를 모르는 사람이 보면
오히려 수용이 어렵지 않을까
대신에 많이 쓰는 범용적인 패턴이라면 그 패턴을 모르는 쪽이 공부를 해야 하지 않을까
의견 조율이 가장 중요
밀어붙일 땐 붙이되 싸움이 되면 안 됨
의견 2:
리액트 쿼리가 지금은 범용적인데
예전에 처음 도입 시 다른 팀원분이 회의적이었음
설득하기 위해 반 년 이상 걸림
해결한 방법- 예시 코드를 자주 올려드림
자주 이야기도 나누고 장점을 계속 설득
앞으로 프로젝트가 진행되면서 리액트 쿼리가 필요해질 거다..
이 분이 코드 관련해서 뭘 좋아하는지도 파악 (가독성, 퍼포먼스, 의존성 중에서..?)
리액트 쿼리가 안정화되어서 더 이상 타입 변경이 없어질 때가 올 거다 얘기해서 설득
의견 3:
RxJS ⇒ 함수형이 익숙하면 좋은데 아니면..?
(도입을 반대하는) 그 사람이 뭘 좋아하는지, 뭘 걱정하는지를 알고 그 방향으로 많이 설득해야 함
이걸 도입해서 뭐가 좋아지는지를 계속 설득
각자 코드를 보고 놀라는 포인트와 놀라지 않는 포인트가 있다면 공유하면 좋겠다.
놀라운 코드보다는 당연해서 놀랍지 않은 코드가 더 좋은 코드라고 느낄 때가 많았다. 당연한 기능에 당연한 코드가 있는 것이 이상적이다.
우리가 코드를 보고 놀라는 경우는 좋은 경우보다 안좋은 경우가 많다.
내가 주로 놀라는 포인트는 "아니 왜 이걸 이렇게 해?", "이 코드가 왜 여깄지?", "대체 뭘 하려는 걸까?" 등이 있다.
놀라지 않는 코드는 "어디서 본 코드네", "이게 맞지", "읽기 쉽네" 같은 경우다.
개발 일을 시작할 때 쯤에는 내가 놀라운 코드를 만드는 걸 주력으로 했다면 점차 놀랍지 않은 코드를 만드는 개발자가 되어가려 노력하고 있어서 이러한 내용이 공감이 되었다.
결론은 당연히 해야 하는 것을 안 할 때(?) 놀라운 코드인 것 같다.
어떤 코드가 ‘당연한’ 건지 공유해보자.
의견 1:
예를 들어
라이브러리는 보통 자기들만의 Best Practice 제공
근데 만약 이러한 Practice에 없는데도 코드적 동작은 똑같이 하는 경우
잘 안 쓰는 패턴인데..?! (놀라움)
의견 2:
예전에 협업할 때 한 사람이 다른 팀원들과 달리 JSX 안에서 함수를 호출해서 들어갈 JSX를 반환
프로젝트 내 코드 스타일 통일과 렌더링 시 반복되는 함수 호출을 이유로 들어 수정을 요청했으나 받아들여지지 않음
잘 안 쓰는 안티 패턴인 코드를 발견했을 때 놀라는 것 같다.
=> 내 의견이었는데 이야기 중 'JSX 안에서 함수 호출'이 과거에 쓰던 패턴이라는 것을 알게 됨
의견 3:
오타가 있어서 다른 사람들이 이해를 못했는데
또 그 오타로 작성된 경우
또는 자료 구조를 잘못 썼을 때
자바스크립트를 쓰면서
배열을 쓰면 간단한 것을 굳이 객체로 처리한 경우
하나의 프로젝트 컨벤션과 동떨어진 코드도 있었는데
그거 보고 놀란 적도 있다
의견 4:
자료 구조를 구현한다 했을 때
마냥 스택을 구현한다 하면
pop, push 등의 당연한 기능들이 있는데
자료를 넣는 것만 있고 빼는 게 없는 경우
예를 들어 add 함수가 있으니 delete 함수도 있겠지?
하면서 밑에 내려갔는데 없는 경우
또는 팀의 암묵적인 규칙을 안 지킨 경우
공통점: 놀라운 코드는 일관성이 안 지켜진 코드인 것 같다.
의견 5:
의견 6:
책 352페이지 코드 참고
책에서 3가지 패턴이 사용되었다고 했는데 각 패턴이 코드의 어느 부분에 쓰였는지 같이 생각해보자.
쓰인 3가지 패턴: 싱글톤 패턴, 데코레이터 패턴, 추상 팩토리 패턴
(배경 지식이 없어서 많이 못 적음)
if(shouldBeDeleted(timer))
는 if(timer.hasExpired() && !timer.isRecurrent())
보다 좋다고 한다.
조건의 의도를 밝히는 함수명으로 표현된 (=캡슐화된) 조건이 더 가독성이 좋은가?
의견 1:
전자가 더 좋은 것 같다.
코드 ‘목적’이 나타나있고 구체적인 내용은 추상화로 숨김 (궁금하면 안에 들어가서 보는 것)
의견 2:
상황에 따라 다를 수 있다
추상화해서 간단하게 표현하면 모르면 들어가서 찾아봐야 함
함수로 감싸는 것도 좋지만
이렇게 감쌌을 때 의미를 더 찾기 힘든 경우가 있을 수 있고
제대로 된 함수명을 짓기 힘들 수도 있다.
의견 3:
상황에 따라 다르다는 것에 동감
단 위의 예시의 경우 조건의 구체적 내용이 어떻든 간에
전자의 경우 코드를 읽을 때 ‘timer가 삭제될 조건이야’ 이것만 보면 됨
상황에 따라 다르지만 위 예시의 경우는 전자가 더 나은 것 같다.