Chapter 1 리팩터링: 첫 번째 예시 프로그램이 새로운 기능을 추가하기에 편한 구조가 아니라면, 먼저 기능을 추가하기 쉬운 형태로 리팩터링하고 나서 원하는 기능을 추가한다. 리팩터링이 필요한 이유는 변경 때문이다. 잘 작동하고 나중에 변경할 일이 절대 없다면 코드를 현재 상태로 나둬도 아무런 문제가 없다. 하지만 다른 사람이 읽고 이해해야 할 일이 생겼는데 로직을 파악하기 어렵다면 뭔가 대책을 마련해야 한다. 리팩터링의 첫 단계 리팩터링의 첫 단계는 테스트 코드를 작성하는 것이다. 우리 예제의 statement() 함수의 테스트 코드는 공연 종류에 따라 다른 문자열을 반환하므로 다양한 장르의 공연들로 구성된 공연료 청구서 몇 개를 문자열 형태로 준비해두고, statement() 함수가 반환한 문자열..
전체 글
주석 C1: 부적절한 정보 C2: 쓸모 없는 주석 C3: 중복된 주석 C4: 성의 없는 주석 C5: 주석 처리된 코드 환경 E1: 여러 단계로 빌드해야 한다 E2: 여러 단계로 테스트해야 한다 함수 F1: 너무 많은 인수 인수는 없는게 가장 좋고, 다음 하나, 그 다음 둘, 그 다음 셋, 넷 이상은 의심 F2: 출력 인수 F3: 플래그 인수 F4: 죽은 함수 일반 G1: 한 소스 파일에 여러 언어를 사용한다 G2: 당연한 동작을 구현하지 않는다 G3: 경계를 올바로 처리하지 않는다 G4: 안전 절차 무시 G5: 중복 G6: 추상화 수준이 올바르지 못하다 어려운 부분이지만 저차원 개념은 파생 클래스에, 고차원 개념은 기초 클래스에 넣는다 세부 구현과 관련된 상수, 변수, 유틸리티 함수는 기초클래스에 넣으면..
주석은 나쁜 코드를 보완하지 못한다. 나쁜 코드를 작성하고, 주석으로 이를 설명하는 것은 좋지 않은 방법이다. 나쁜 코드를 작성하고 주석을 작성하는 대신 나쁜 코드를 좋은 코드로 변경하자. 좋은 주석 법적인 주석 정보를 제공하는 주석 의도를 설명하는 주석 의미를 명료하게 밝히는 주석 결과를 경고하는 주석 중요성을 강조하는 주석 공개 API에서 Javadocs 나쁜 주석 주절거리는 주석 같은 이야기를 중복하는 주석 오해할 여지가 있는 주석 의무적으로 다는 주석 이력을 기록하는 주석 있으나 마나 한 주석 저자를 표시하는 주석 주석으로 처리한 코드 과거의 코드를 주석으로 처리하지 말고 삭제하자. 과거 코드는 버전 관리 도구에서 언제든 확인할 수 있다. 주석으로 처리하기보다 커밋 메시지를 더 명확하게 달자. 비..
나는 주로 자바스크립트를 사용해 코드를 작성하기 때문에 함수를 굉장히 많이 사용하게 된다. 이번 장을 통해서 좋은 함수의 원칙에 대해 알아보자. 작게 만들어라 함수를 만드는 첫째 규칙은 '작게!'다. 함수를 만드는 둘째 규칙은 '더 작게!'다. 20줄의 함수도 길다. 2~4줄을 가진 함수로 프로그램을 구현해보자. 각 함수가 하나의 이야기를 하게 된다. 블록과 들여쓰기 if 문, else 문, while 문에 들어가는 블록은 한 줄이어야 한다. function purchase(wallet) { if (wallet.getMoney() >= 3000) { wallet.pay(3000); } } 위의 코드처럼 if 문 안에서 동작하는 것을 하나의 함수로 요약하자. 한 가지만 해라! 함수는 한 가지를 해야 한다...
코드를 작성하면서 변수나 함수, 클래스의 이름을 짓는 것이 쉽지 않음을 매번 느낀다. 전에는 비슷한 일을 함수의 이름을 어떻게 지었지? 이 변수는 복수형인데 그동안 뒤에 s 를 붙였었나? 이전의 클래스랑 비슷한 클래스에서 살짝만 바뀌었는데 이건 어떻게 이름을 짓지? 등과 같은 고민을 수도 없이 했다. 이번 장에서는 이러한 고민들에 조그마한 도움이 될 수 있는 이름 짓는 규칙에 대해 설명을 한다. 의도를 분명히 하라 좋은 이름을 지으려면 시간이 필요하지만, 좋은 이름으로 절약하는 시간이 훨씬 많다. 의도가 명확히 드러나는 코드를 작성해야 한다. 이름만으로도 함수 및 클래스가 하는 일을 더 빨리 파악할 수 있게 도와준다. 개발자들이 코드를 작성하는 시간보다 읽는데 더 많은 시간을 보내므로 이는 개발자의 행복..
나쁜 코드란? 나쁜 코드는 생산성을 크게 낮춘다. 지금 당장 나쁜 코드로 작성하는 것이 더 빠르게 업무를 마칠 수 있을 것이라는 유혹을 줄 수 있지만 이후 유지보수할 시간이 다가오거나 새로운 기능 추가 또는 수정이 필요할 때 나쁜 코드로 인한 대가를 크게 치르게 될 것이다. 실제로 간단한 기능 수정이지만 너무 많은 부분에 의존하고 있어서 쉽게 코드를 건드리지 못하고 아예 새로 만들어야 하는 상황을 겪은 적이 있었다. 이 책에서는 나쁜 코드가 나쁜 코드를 유발한다고 한다. 나쁜 코드는 이후 더 나쁜 코드를 작성하라고 유혹한다. 시간이 없어서 나쁜 코드를 작성했다는 말은 전문가가 아니라는 뜻이다. 진정한 개발자라면, 그리고 전문가라면 최대한 좋은 코드를 작성해야 한다. 그리고 시간이 없다는 것은 핑계다. 가..
2021년 회고 2021년은 정말 많은 일들이 나에게 한 번에 일어났다. 일단 졸업과 동시에 직장을 얻게 되어 출근을 하게 되었고, 20살부터 다니던 교회를 떠나 새로운 교회를 가게 되었다. 새로운 것들 투성이었던 2021년을 되돌아보며 남들 다 작성하는 회고를 작성해보려 한다. 개발자 취업 1월 4일에 개발자로 첫 출근을 하게 되었다. 프론트엔드 개발자로 취업하게 되었는데 처음에는 기대도 많이 되고, 걱정도 많이 되었다. 내가 내 실력을 너무 잘 알기 때문에 불안했다. 이렇게 아무것도 모르는데 코드를 짜도 되나? 라는 생각도 많이 했고, 어떤 것을 공부해야 될지도 막막했다. 첫 출근 날은 인사팀에서 출근 시간을 1시간 일찍 알려줘서 아무도 없는 곳에서 30분 동안 혼자 앉아 있었다. 다행히 9시 반에 ..
ESLint?ESLint는 Javascript 코드에서 발견된 패턴을 식별하고 보고하는 툴로 버그 방지 및 코드의 일관성을 높히는 것을 목표로 합니다.그동안 문법적인 오류만 잡아주고, 사용하지 않은 변수를 알려주는 역할을 하는 것으로만 알고 있었는데 우아한 테크코스 프리코스를 진행하면서 너무나도 편리한 여러가지 기능이 있다는 것을 알게 되었습니다.정말 편리한 기능들이 많아서 Prettier와 같이 앞으로도 계속 사용할 것 같아서 사용법을 정리해두려 합니다. 설치ESLint를 사용하기 위해서는 NodeJS가 설치되어 있어야 합니다. (NodeJS 호환성 정보: ^12.22.0, ^14.17.0, >=16.0.0)ESLint는 npm 또는 yarn 을 사용해서 설치할 수 있습니다.npm install esl..
HTTP 는 상태가 없는 stateless 프로토콜이기 때문에 웹 서버는 요청을 보낸 클라이언트가 로그인한 회원인지에 인증하는 작업이 필요합니다. 인증 방식은 세션 기반 인증과 토큰 기반 인증으로 나뉘고, 두 방식의 동작 및 장단점에 대해 설명하도록 하겠습니다. 세션 기반 인증 세션 일정 시간 동안 같은 사용자(브라우저)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술 동작 방식 클라이언트가 로그인을 요청하면 서버는 세션 ID 를 키로 갖는 세션을 메모리에 저장 서버는 세션 ID 를 쿠키에 담아 클라이언트에게 전달 클라이언트는 로그인 이후 모든 요청에 세션 ID 가 담긴 쿠키를 함께 전송 서버는 클라이언트에게 받은 세션 ID 가 세션 메모리에 있는지 확인하고, 응답을..
setTimeoutsetTimeout 은 정해진 시간 뒤에 콜백함수를 실행하는 자바스크립트 api다.setTimeout(() => { console.log('hi');}, 1000);위의 자바스크립트를 실행하면 1초 뒤에 콘솔에 'hi' 가 찍히는 것을 볼 수 있을 것이다. setIntervalsetInterval 은 정해진 시간 간격으로 콜백함수를 계속 실행하는 자바스크립트 api다.setInterval(() => { console.log('hi');}, 1000);위의 자바스크립트를 실행하면 1초 간격으로 콘솔에 'hi' 가 찍히게 된다. setTimeout 으로 setInterval 만들기setTimeout 과 setInterval 의 기본적인 차이점은 한 번 실행하느냐, 반복적으로 실행..