📔
Library
  • 📓도서관
  • 📕리팩터링 2판
    • 1️⃣1️⃣ CHAPTER 01 리팩터링: 첫 번째 예시
      • ✏️1.1 자, 시작해보자!
      • ✏️1.2 예시 프로그램을 본 소감
      • ✏️1.3 리팩터링의 첫 단계
      • ✏️1.4 statement() 함수 쪼개기
      • ✏️1.5 중간 점검: 난무하는 중첩 함수
      • ✏️1.6 계산 단계와 포맷팅 단계 분리하기
      • ✏️1.7 중간 점검: 두 파일(과 두 단계)로 분리됨
      • ✏️1.8 다형성을 활용해 계산 코드 재구성하기
      • ✏️1.9 상태 점검: 다형성을 활용하여 데이터 생성하기
      • ✏️1.10 마치며
    • 2️⃣2️⃣ CHAPTER 02 리팩터링 원칙
      • ✏️2.1 리팩터링 정의
      • ✏️2.2 두 개의 모자
      • ✏️2.3 리팩터링하는 이유
      • ✏️2.4 언제 리팩터링해야 할까?
    • 3️⃣3️⃣ CHAPTER 03 코드에서 나는 악취
      • ✏️3.1 기이한 이름
      • ✏️3.2 중복 코드
      • ✏️3.3 긴 함수
      • ✏️3.4 긴 매개변수 목록
      • ✏️3.5 전역 데이터
      • ✏️3.6 가변 데이터
      • ✏️3.7 뒤엉킨 변경
      • ✏️3.8 산탄총 수술
      • ✏️3.9 기능 편애
      • ✏️3.10 데이터 뭉치
      • ✏️3.11 기본형 집착
      • ✏️3.12 반복되는 switch문
      • ✏️3.13 반복문
      • ✏️3.14 성의 없는 요소
      • ✏️3.15 추측성 일반화
      • ✏️3.16 임시 필드
      • ✏️3.17 메시지 체인
      • ✏️3.18 중재자
      • ✏️3.19 내부자 거래
      • ✏️3.20 거대한 클래스
      • ✏️3.21 서로 다른 인터페이스의 대안 클래스들
      • ✏️3.22 데이터 클래스
      • ✏️3.23 상속 포기
      • ✏️3.24 주석
    • 4️⃣4️⃣ CHAPTER 04 테스트 구축하기
      • ✏️4.1 자가 테스트 코드의 가치
      • ✏️4.2 테스트할 샘플 코드
      • ✏️4.3 첫 번째 테스트
      • ✏️4.4 테스트 추가하기
      • ✏️4.5 픽스처 수정하기
      • ✏️4.6 경계 조건 검사하기
      • ✏️4.7 끝나지 않은 여정
    • 5️⃣5️⃣ CHAPTER 05 리팩터링 카탈로그 보는 법
      • ✏️5.1 리팩터링 설명 형식
      • ✏️5.2 리팩터링 기법 선정 기준
    • 6️⃣6️⃣ CHAPTER 06 기본적인 리팩터링
      • ✏️6.1 함수 추출하기 (Extract Function)
      • ✏️6.2 함수 인라인하기 (Inline Function)
      • ✏️6.3 변수 추출하기 ( Extract Variable)
      • ✏️6.4 변수 인라인하기 (Inline Variable)
      • ✏️6.5 함수 선언 바꾸기 (Change Function Declaration)
      • ✏️6.6 변수 캡슐화하기 (Encapsulate Variable)
      • ✏️6.7 변수 이름 바꾸기 (Rename Variable)
      • ✏️6.8 매개변수 객체 만들기 (Introduce Parameter Object)
      • ✏️6.9 여러 함수를 클래스로 묶기 (Combine Functions into Class)
      • ✏️6.10 여러 함수를 변환 함수로 묶기 (Combine Functions into Transform)
      • ✏️6.11 단계 쪼개기 (Split Phase)
    • 7️⃣7️⃣ CHAPTER 07 캡슐화
      • ✏️7.1 레코드 캡슐화하기 (Encapsulate Record)
      • ✏️7.2 컬렉션 캡슐화하기 (Encapsulate Collection)
      • ✏️7.3 기본형을 객체로 바꾸기 (Replace Primitive with Object)
      • ✏️7.4 임시 변수를 질의 함수로 바꾸기 (Replace Temp with Query)
      • ✏️7.5 클래스 추출하기 (Extract Class)
      • ✏️7.6 클래스 인라인하기 (Inline Class)
      • ✏️7.7 위임 숨기기 (Hide Delegate)
      • ✏️7.8 중개자 제거하기 (Reove Middle Man)
      • ✏️7.9 알고리즘 교체하기 (Subsititue Algorithm)
    • 8️⃣8️⃣ CHAPTER 08 기능 이동
      • ✏️8.1 함수 옮기기 (Move Function)
      • ✏️8.2 필드 옮기기 (Move Field)
      • ✏️8.3 문장을 함수로 옮기기 (Move Statements into Function)
      • ✏️8.4 문장을 호출한 곳으로 옮기기 (Move Statements to Callers)
      • ✏️8.5 인라인 코드를 함수 호출로 바꾸기 (Replace Inline Code with Function Call)
      • ✏️8.6 문장 슬라이드하기 (Slide Statements)
      • ✏️8.7 반복문 쪼개기 (Split Loop)
      • ✏️8.8 반복문을 파이프라인으로 바꾸기 (Replace Loop with Pipeline)
      • ✏️8.9 죽은 코드 제거하기 (Remove Dead Code)
    • 9️⃣9️⃣ CHAPTER 09 데이터 조직화
      • ✏️9.1 변수 쪼개기 (Split Variable)
      • ✏️9.2 필드 이름 바꾸기 (Rename Field)
      • ✏️9.3 파생 변수를 질의 함수로 바꾸기 (Replace Derived Variable with Query)
      • ✏️9.4 참조를 값으로 바꾸기 (Change Reference to Value)
      • ✏️9.5 값을 참조로 바꾸기 (Change Value to Reference)
      • ✏️9.6 매직 리터럴 바꾸기 (Replace Magic Literal)
    • 🔟CHAPTER 10 조건부 로직 간소화
      • ✏️10.1 조건문 분해하기 (Decompose Conditional)
      • ✏️10.2 조건식 통합하기 (Consolidate Conditional Expression)
      • ✏️10.3 중첩 조건문을 보호 구문으로 바꾸기 (Replace Nested Conditional with Guard Clauses)
      • ✏️10.4 조건부 로직을 다형성으로 바꾸기 (Replace Conditional with Polymorphism)
      • ✏️10.5 특이 케이스 추가하기 (Introduce Special Case)
      • ✏️10.6 어서션 추가하기 (Introduce Assertion)
      • ✏️10.7 제어 플래그를 탈출문으로 바꾸기 (Replace Control Flag with Break)
    • 1️⃣1️⃣ CHAPTER 11 API 리팩터링
      • ✏️11.1 질의 함수와 변경 함수 분리하기
      • ✏️11.2 함수 매개변수화하기
      • ✏️11.3 플래그 인수 제거하기
      • ✏️11.4 객체 통째로 넘기기
      • ✏️11.5 매개변수를 질의 함수로 바꾸기
      • ✏️11.6 질의 함수를 매개변수로 바꾸기
      • ✏️11.7 세터 제거하기
      • ✏️11.8 생성자를 팩터리 함수로 바꾸기
      • ✏️11.9 함수를 명령으로 바꾸기
      • ✏️11.10 명령을 함수로 바꾸기
      • ✏️11.11 수정된 값 반환하기
      • ✏️11.12 오류 코드를 예외로 바꾸기
      • ✏️11.13 예외를 사전 확인으로 바꾸기
    • 2️⃣2️⃣ CHAPTER 12 상속 다루기
      • ✏️12.1 메서드 올리기
      • ✏️12.2 필드 올리기
      • ✏️12.3 생성자 본문 올리기
      • ✏️12.4 메서드 내리기
      • ✏️12.5 필드 내리기
      • ✏️12.6 타입 코드를 서브클래스로 바꾸기
      • ✏️12.7 서브클래스 제거하기
      • ✏️12.8 슈퍼클래스 추출하기
      • ✏️12.9 계층 합치기
      • ✏️12.10 서브클래스를 위임으로 바꾸기
      • ✏️12.11 슈퍼클래스를 위임으로 바꾸기
  • 📘이펙티브 타입스크립트
    • 1️⃣1️⃣ 타입스크립트 알아보기
      • 📎아이템 1 타임스크립트와 자바스크립트의 관계 이해하기
      • 📎아이템 2 타입스크립트 설정 이해하기
      • 📎아이템 3 코드 생성과 타입이 관계없음을 이해하기
      • 📎아이템 4 구조적 타이핑에 익숙해지기
      • 📎아이템 5 any 타입 지양하기
    • 2️⃣2️⃣ 타입스크립트의 타입 시스템
      • 📎아이템 6 편집기를 사용하여 타입 시스템 탐색하기
      • 📎아이템 7 타입이 값들의 집합이라고 생각하기
      • 📎아이템 8 타입 공간과 값 공간의 심벌 구분하기
      • 📎아이템 9 타입 단언보다는 타입 선언을 사용하기
      • 📎아이템 10 객체 래퍼 타입 피하기
      • 📎아이템 11 잉여 속성 체크의 한계 인지하기
      • 📎아이템 12 함수 표현식에 타입 적용하기
      • 📎아이템 13 타입과 인터페이스의 차이점 알기
      • 📎아이템 14 타입 연산과 제너릭 사용으로 반복 줄이기
      • 📎아이템 15 동적 데이터에 인덱스 시그니처 사용하기
      • 📎아이템 16 number 인덱스 시그니처보다는 Array, 튜플, ArrayLike를 사용하기
      • 📎아이템 17 변경 관련된 오류 방지를 위해 readonly 사용하기
      • 📎아이템 18 매핑된 타입을 사용하여 값을 동기화하기
    • 3️⃣3️⃣ 타입 추론
      • 📎아이템 19 추론 가능한 타입을 사용해 장황한 코드 방지하기
      • 📎아이템 20 다른 타입에는 다른 변수 사용하기
      • 📎아이템 21 타입 넓히기
      • 📎아이템 22 타입 좁히기
      • 📎아이템 23 한꺼번에 객체 생성하기
      • 📎아이템 24 일관성 있는 별칭 사용하기
      • 📎아이템 25 비동기 코드에는 콜백 대신 async 함수 사용하기
      • 📎아이템 26 타입 추론에 문맥이 어떻게 사용되는지 이해하기
      • 📎아이템 27 함수형 기법과 라이브러리로 타입 흐름 유지하기
    • 4️⃣4️⃣ 타입 설계
      • 📎아이템 28 유효한 상태만 표현하는 타입을 지향하기
      • 📎아이템 29 사용할 때는 너그럽게, 생성할 때는 엄격하게
      • 📎아이템 30 문서에 타입 정보를 쓰지 않기
      • 📎아이템 31 타입 주변에 null 값 배치하기
      • 📎아이템 32 유니온의 인터페이스보다는 인터페이스의 유니온을 사용하기
      • 📎아이템 33 string 타입보다 더 구체적인 타입 사용하기
      • 📎아이템 34 부정확한 타입보다는 미완성 타입을 사용하기
      • 📎아이템 35 데이터가 아닌, API와 명세를 보고 타입 만들기
      • 📎아이템 36 해당 분야의 용어로 타입 이름 짓기
      • 📎아이템 37 공식 명칭에는 상표를 붙이기
    • 5️⃣5️⃣ any 다루기
      • 📎아이템 38 any 타입은 가능한 한 좁은 범위에서만 사용하기
      • 📎아이템 39 any를 구체적으로 변형해서 사용하기
      • 📎아이템 40 함수 안으로 타입 단언문 감추기
      • 📎아이템 41 any의 진화를 이해하기
      • 📎아이템 42 모르는 타입의 값에는 any 대신 unkown을 사용하기
      • 📎아이템 43 몽키 패치보다는 안전한 타입을 사용하기
      • 📎아이템 44 타입 커버리지를 추적하여 타입 안전성 유지하기
    • 6️⃣6️⃣ 타입 선언과 @types
      • 📎아이템 45 devDependencies에 typescript와 @types 추가하기
      • 📎아이템 46 타입 선언과 관련된 세 가지 버전 이해하기
      • 📎아이템 47 공개 API에 등장하는 모든 타입을 익스포트하기
      • 📎아이템 48 API 주석에 TSDoc 사용하기
      • 📎아이템 49 콜백에서 this에 대한 타입 제공하기
      • 📎아이템 50 오버로딩 타입보다는 조건부 타입을 사용하기
      • 📎아이템 51 의존성 분리를 위해 미러 타입 사용하기
      • 📎아이템 52 테스팅 타입의 함정에 주의하기
    • 7️⃣7️⃣ 코드를 작성하고 실행하기
      • 📎아이템 53 타입스크립트 기능보다는 ECMAScript 기능을 사용하기
      • 📎아이템 54 객체를 순회하는 노하우
      • 📎아이템 55 DOM 계층 구조 이해하기
      • 📎아이템 56 정보를 감추는 목적으로 private 사용하지 않기
      • 📎아이템 57 소스맵을 사용하여 타입스크립트 디버깅하기
    • 8️⃣8️⃣ 타입스크립트로 마이그레이션하기
      • 📎아이템 58 모던 자바스크립트로 작성하기
      • 📎아이템 59 타입스크립트 도입 전에 @ts-check와 JSDoc으로 시험해보기
      • 📎아이템 60 allowJs로 타입스크립트와 자바스크립트 같이 사용하기
      • 📎아이템 61 의존성 관계에 따라 모듈 단위로 전환하기
      • 📎아이템 62 마이그레이션의 완성을 위해 noImplicitAny 설정하기
  • 📔You Don't Know JS Yet
    • 1️⃣CHAPTER 1 자바스크립트
      • 💡1.1 책에 대하여
      • 💡1.2 자바스크립트 이름의 유래
      • 💡1.3 명세서
      • 💡1.4 JS의 다양한 얼굴
      • 💡1.5 하위 호환성과 상위 호환성
      • 💡1.6 인터프리터 이해하기
      • 💡1.7 엄격모드
      • 💡1.8 정리
    • 2️⃣CHAPTER 2 자바스크립트 조망하기
      • 💡2.1 파일은 프로그램입니다
      • 💡2.2 값
      • 💡2.3 변수 선언과 사용
      • 💡2.4 함수
      • 💡2.5 비교
      • 💡2.6 코드 구조화 패턴
  • 📗Computer science
    • 1️⃣웹(Web)
    • 2️⃣컴퓨터 구조(Computer Structure)
    • 3️⃣데이터베이스(Database)
Powered by GitBook
On this page

📕리팩터링 2판

1️⃣1️⃣ CHAPTER 01 리팩터링: 첫 번째 예시2️⃣2️⃣ CHAPTER 02 리팩터링 원칙3️⃣3️⃣ CHAPTER 03 코드에서 나는 악취4️⃣4️⃣ CHAPTER 04 테스트 구축하기5️⃣5️⃣ CHAPTER 05 리팩터링 카탈로그 보는 법6️⃣6️⃣ CHAPTER 06 기본적인 리팩터링7️⃣7️⃣ CHAPTER 07 캡슐화8️⃣8️⃣ CHAPTER 08 기능 이동9️⃣9️⃣ CHAPTER 09 데이터 조직화🔟CHAPTER 10 조건부 로직 간소화1️⃣1️⃣ CHAPTER 11 API 리팩터링2️⃣2️⃣ CHAPTER 12 상속 다루기
Previous도서관Next1️⃣ CHAPTER 01 리팩터링: 첫 번째 예시