Today I Learned (74) 썸네일형 리스트형 리팩터링 2판 챕터11 - API 리팩터링(1) 1. 질의 함수와 변경함수 분리하기 질의 함수란 7.4에서 처음 나왔는데, 값을 계산하여 리턴시키는 함수다. '겉보기 부수효과'가 없는 반환 함수를 추구해야한다. 겉보기 부수효과란? 입출력 변경이나, 데이터 값이 변형되는 경우를 말한다. * 명령-질의 분리 (질의함수는 모두 부수효과가 없어야 한다.) https://martinfowler.com/bliki/CommandQuerySeparation.html 2. 함수 매개변수화하기 함수의 로직이 비슷한 경우, 매개변수 값만 바꿔서 여러 곳에 적용하도록 하자. 그러면 함수의 유용성이 커진다. 범위를 다루는 함수는 중간 대역부터 리팩터링을 시작하고, 대역의 상한를 쓸 때는 Infinity를 이용하자. 3. 플래그 인수 제거하기 불리언 플래그는 코드를 읽을 때 .. 리팩터링 2판 챕터10 - 조건부 로직 간소화(2) 5. 특이 케이스 추가하기 특정 값에 대해서 똑같은 동작을 수행하는 코드가 반복되면, 하나로 통일하는 것이 좋다. 데이터를 읽기만 한다면, 리터럴 객체 형태로 준비. 동작 수행이 필요하다면, 메서드를 담은 객체를 생성. 6. 어서션 추가하기 어서션이란? 항상 참이라고 가정하는 조건부 문장이다. 어서션은 프로그램이 어떤 상태인지 다른 개발자에게 알려주는 도구가 될 수 있다. 반드시 참이어야하는 것만 검사하자. 7. 제어 플래그를 탈출문으로 바꾸기 모든 함수의 return문은 하나가 아닐 수도 있다. 할 일을 마쳤다면 함수를 나가도록 하자. 저자는 중첩 함수를 보호 구문으로 바꾼 것과 같이, 굳이 플래그를 쓰는 것보다는 탈출문으로 깔끔하게 표현하는 것이 좋다는 입장이다. 리팩터링 2판 챕터10 - 조건부 로직 간소화(1) 1. 조건문 분해하기 조건문이 길면 의도를 제대로 파악하기가 힘들다. 함수 호출로 바꿔주자. 2. 조건식 통합하기 조건식을 통합하고 함수 추출하기까지 진행하면 코드가 말하는 바(의도)가 더 분명해진다. 3. 중첩 조건문을 보호 구문으로 바꾸기 *보호구문이란? 비정상 조건을 if에서 검사한 다음, 함수에서 바로 빠져 나온다. 정상 조건을 여러 번 중첩으로 검사하는 것이 아니라 비정상 조건을 하나씩 검사하는 검사 구문. 보호구문 사용 전 /* 2021년 유방암 건강검진 대상자를 구하는 코드를 만들어보자. 홀수 년도 생이고 만 40세 이상 여성이라면 대상자이다. */ function is2021HealthCheckupSubject(person){ if(person.isMale){ return false; }e.. 리팩터링 2판 챕터9 - 데이터 조직화 1. 변수 쪼개기 변수 하나에 대입이 두 번 이상 이루어진다면 여러 가지 역할을 수행한다는 신호이고, 이런 변수는 쪼개야한다. 2. 필드 이름 바꾸기 필드 이름은 데이터 구조에서 중요하다. 필드 이름을 바꿔서 프로그램을 이해하는 데에 도움이 되어야 한다. 3. 파생 변수를 질의 함수로 바꾸기 가변 데이터는 연쇄효과를 일으키기 때문에 골칫거리다. 그래서 가변 데이터의 유효범위를 좁여야만 한다. 변수를 질의 함수로 바꾸면 유효 범위를 좁힐 수 있다. 4. 참조를 값으로 바꾸기 객체를 다른 객체에 중첩하면 참조 또는 값으로 취급할 수 있다. 또한 객체는 불변이기 때문에 다루기 좋다 5. 값을 참조로 바꾸기 같은 데이터를 복제해서 사용하면 데이터를 갱신할 때 문제가 된다. 그럴 때는 데이터를 참조로 바꿔주는 것.. 리팩터링 2판 챕터8 - 기능 이동 1. 함수 옮기기 *컨텍스트란? 클래스나 모듈 한 컨텍스트에 관련 깊은 요소들만 남기기 위해서 함수를 옮기는 리팩터링을 진행한다. 그럼 언제 옮겨야하는가? 어떤 함수가 자신이 속한 컨텍스트의 요소들보다 다른 컨텍스트를 더 많이 참조할 때 어떤 것에도 의존하지 않고 독립성을 가지는 함수일 때 2. 필드 옮기기 *필드란? 클래스를 구성하는 변수. 적합한 데이터 구조를 만들기 위해서 필드를 옮긴다. 3. 문장을 함수로 옮기기 (↔️ 문장을 호출한 곳으로 옮기기) 중복으로 사용하는 문장이 있다면 함수를 만들자 4. 문장을 호출한 곳으로 옮기기 (↔️ 문장을 함수로 옮기기) 공통된 함수가 일부 호출자에게는 다르게 동작하도록 바뀌어야할 때 해당 기법을 사용한다. 5. 인라인 코드를 함수 호출로 바꾸기 함수 호출을 .. 리팩터링 2판 챕터7 - 캡슐화 책에서 말하는 캡슐화란? 데이터 접근을 함수로만 한정하는 것을 말한다. 이점 1. 데이터에 대한 접근을 한정하면서 의도치 않은 변경을 예방한다. 이점 2. 데이터 입출력시 로직 추가가 쉽다. 1. 레코드 캡슐화하기 레코드란? 데이터를 표현하는 기본적인 자료 구조를 말한다. const date = { year: 2021, month: 11, day: 21 }; 레코드 캡슐화란 이러한 데이터에 대한 입출력을 제한하는 함수를 만드는 것이다. 변수 자체는 물론, 그 내용을 조작하는 방식도 통제하기 위해서 레코드를 캡슐화한다. 2. 컬렉션 캡슐화하기 컬렌션이란? List, Map, Set 같은 자료형을 말한다. 저자는 가변 데이터는 모두 캡슐화하는 편이다. 데이터 구조가 언제 어떻게 수정되는지 파악하기 쉬워서 필.. 이전 1 ··· 6 7 8 9 10 11 12 13 다음