📔
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
  1. 📕리팩터링 2판

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 슈퍼클래스를 위임으로 바꾸기
Previous11.13 예외를 사전 확인으로 바꾸기Next12.1 메서드 올리기