점진적인 개선을 보여주는 사례 연구(명령행 인수 구문분석기) 확장성이 부족했던 모듈을 개선하고 정리한 단계들을 소개 프로그램을 짜다 보면 종종 명령행 인수의 구문을 분석할 필요가 있음 - 이미 짜여진 유틸리티 사용 - 내 프로그램에 맞도록 직접 작성한 유틸리티(Args) 사용 처음부터 깨끗한 코드를 작성할 수는 없음 책을 쓸 때 1차 초안, 2차 초안, ... , 계속 고쳐서 최종안을 만들듯이 깨끗한 코드를 짜려면 일단 어떻게든 코드를 작성한 뒤 정리해야 한다 Args 1차 초안의 문제점 - 너무 많은 인스턴스 변수 개수 - 'TILT' 같은 희한한 문자열 - HashSets, TreeSets, try-catch-catch 블록 등 => 지저분한 코드 함수 이름, 변수 이름에 신경썼으며, 어설프지만 구조..
React 특징: 단방향 데이터 흐름(one-way data flow) 데이터 흐름이 하향식(top-down) 데이터를 전달하는 주체는 부모 컴포넌트임 제작은 상향식(Bottom-up) 컴포넌트부터 제작하고 조립하여 페이지를 만듦. 테스트가 쉽고 확장성이 좋음 State 끌어올리기(Lifting state up) : 상위 컴포넌트의 상태 변경 함수를 props로 전달해 하위 컴포넌트에서 상위 컴포넌트의 상태 바꾸기 Side effect(부수 효과) 함수 내에서의 구현이 함수 외부에 영향을 끼치는 것 ex) fetch API나 LocalStorage를 사용해 데이터를 가져오기, 이벤트를 활용해 DOM 조작하기, AJAX 요청, 타이머 API 사용(setTimeout) => React에서 이를 다루기 위한 ..
주소창에 URL을 입력하면 URL의 root-endponint로 GET 요청 테스트를 위해 GET 말고 다른 요청을 보내고 싶다면 개발자도구- 콘솔창에서 Web API fetch를 이용해야함 -> 매번 콘솔창에 들어가서 코드를 입력하는 것이 번거롭기 때문에 HTTP 요청을 테스트할 수 있는 API 도구 사용 CLI 환경 - curl, wuzz GUI 환경 - Postman, Insomnia Postman 1. 회원가입 2. Workspace -> My Workspace 3. 탭 추가 4. HTTP 메서드 선택 -> url 입력 -> 옵션 추가(Params, Headers, Body 등) 5. 요청 보내기(Send) Open Weather Map : 무료 날씨 API 마이 페이지의 My API keys에서..
객체는 처리의 추상화다. 스레드는 일종의 추상화다. - James O. Coplien 동시성과 깔끔한 코드는 양립하기 어려움. 여러 스레드를 동시에 돌리는 이유와 그것의 어려움 => 깨끗한 코드를 작성하는 법, 동시성을 테스트하는 방법과 문제점 기술 동시성이 필요한 이유 동시성은 무엇과 언제의 결합을 분리 -> 거대한 루프 하나가 아닌 작은 협력 프로그램 여럿으로 보여서 시스템을 이해하기 쉽고, 문제를 분리하기 쉬움 구조 개선, 효율 증가, 응답 시간과 작업 처리량 개선(많은 데이터를 짧은 시간에 처리하기 위해) 미신과 오해 - 동시성은 항상 성능을 높여주지는 않는다 대기 시간이 길어 여러 스레드가 프로세서를 공유할 수 있거나, 여러 프로세서가 동시에 처리할 독립적인 계산이 충분히 많은 경우 - 동시성을..
창발성 : 하위 계층(구성 요소)에 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상 창발적 설계로 깔끔한 코드를 구현하기 착실히 따르기만 하면 우수한 설계가 나오는 규칙 네 가지(중요도순) - 켄트 벡 - 코드 구조와 설계를 파악하기 쉬워짐 - SRP(단일 책임 원칙), DIP(의존 관계 역전)를 적용하기 쉬워짐 (DIP: 저수준 모듈이 고수준 모듈에 의존하게 하는 것) - 우수한 설계의 창발성을 촉진 1. 모든 테스트를 실행하기 테스트(검증)가 불가능한 시스템은 출시하면 안 된다 테스트가 가능한 시스템을 만드려고 하면 테스트가 가능하도록 코드를 쉽게 작성하게 됨 결합도가 높으면 테스트 케이스를 작성하기 어려움 -> DIP 원칙을 적용하고 의존성 주입(DI), 인터페이스,..

