본문 바로가기

programming study/Refactoring

(21)
Refactoring - 기능 이동(2) 본 내용은 마틴 파울러의 Refactoring 2판을 토대로 작성되었습니다. 기능 이동 1. 인라인 코드를 함수 호출로 바꾸기 설명 인라인 코드를 존재하는 함수가 대체할 수 있으면 바꾸기 인라인 코드를 대체할 수 있는 라이브러리가 있으면 더 좋음 단, 설계 유연성이 떨어질 수도 있음 2. 문장 슬라이드하기 설명 관련된 코드를 한 곳에 모으는 것 ex) 같은 데이터 구조를 사용하는 문장들을 한데 모으기 주로, 다른 리팩터링을 하기 전에 선행 3. 반복문 쪼개기 설명 반복문에서 두가지 일을 수행하는 것을 지양 반복문을 분리하면, 이해하기도 사용하기도 쉬워짐 최적화에 위배되어 보이지만, 더 강력한 최적화를 위한 발판이 되어줄 수 있음 4. 반복문을 파이프라인으로 바꾸기 반대 리팩터링 : 문장을 함수로 옮기기 ..
Refactoring - 기능 이동(1) 본 내용은 마틴 파울러의 Refactoring 2판을 토대로 작성되었습니다. 기능 이동 1. 함수 옮기기 설명 좋은 소프트웨어의 핵심은 모듈성에 있음 모듈성 프로그램의 기능을 수정할 때 해당 기능과 깊이 관련된 작은 요소만 이해해도 수정이 가능한 것 모듈성을 높이기 위해서 서로 연관된 요소들을 묶어야 함 함수 옮기기 리팩터링은 서로 연관된 요소들을 묶기위한 것 2. 필드 옮기기 설명 프로그램의 진짜 힘은 데이터 구조에서 나옴 아귀가 맞는 데이터 끼리 묶어야 함 적절하지 않은 데이터 구조는 보이는 즉시 수정해야 함 클래스는 함수가 곁들여진 레코드 캡슐화 되어 있어, 데이터를 이리저리 옮기기 쉬움 반대로, 날 것의 레코드는 변경하기 까다로울 것 클라이언트에서도 코드 수정이 필요하기 때문 3. 문장을 함수로 ..
Refactoring - 6장 기본적인 리팩터링(1) 본 내용은 한달한권의 리팩터링 강의를 토대로 작성되었습니다. 1. 절차들에 깔린 의도 이장의 리팩터링은 다른 리팩터링 절차에서 자주 참조할 기법들 복잡하고 큰 리팩터링을 작은 리팩터링으로 나누어 진행 절차를 여러 작은 리팩터링으로 쪼개는 이유 겉보기 동작의 변화가 없도록하기 위해 2. 기법들 함수 추출하기 & 함수 인라인하기 함수 추출은 함수 내부 로직들을 의도별로 묶어서 네이밍할 수 있을 때 목적과 구현 분리 함수 이름으로 의도를 파악할 수 있게 됨 긴 함수, 중복 코드 함수 인라인은 함수 본문이 이름만큼 명확할 때 변수 추출하기 & 변수 인라인하기 변수 추출하기는 표현식을 이해하기 쉽도록 이름을 붙이는 것 변수 별로 디버깅을 걸 수 있으므로 원인 파악이 용이해 짐 변수 인라인하기는 표현식이 충분희 의..
Refactoring - 캡슐화(2) 본 내용은 마틴 파울러의 Refactoring 2판을 토대로 작성되었습니다. 캡슐화 클래스는 본래 정보를 숨기는 용도로 설계 내부 정보뿐 아니라 클래스 사이의 연결 관계를 숨기는 데도 유용 1. 클래스 추출하기 반대 리팩터링 : 클래스 인라인 하기 설명 클래스는 명확하게 추상화하고 소수의 주어진 역할만 처리 개발을 진행할 수록 클래스가 비대해져 복잡해 짐 한 클래스 안에 묶을 수 있는 데이터와 메서드가 있다면 분리하기 2. 클래스 인라인하기ㅋ르랫반대 리팩터링 : 클래스 추출하기 설명 제 역할을 못하는 클래스는 인라인 하기 별개의 클래스를 다르게 배분할 때도 하나의 클래스로 일단 인라인하기 합친 후 클래스를 추출하는 것이 더 용이 3. 위임 숨기기 반대 리팩터링 : 중개자 제거하기 설명 서버 객체의 메서드..
Refactoring - 4장 테스트 구축하기 본 내용은 한달한권의 리팩터링 강의를 토대로 작성되었습니다. 1. 테스트 겉보기 동작의 유지 테스트는 겉보기 동작을 보장 코드가 깨졌다면 그것은 어설픈 리스터럭쳐링 2. 아마존에서의 테스트 CURX 아마존 웹 플랫폼 Code Review : 코드를 만든 후 동료들이 리뷰 Build dry-run : 클라우드화된 컴퓨팅 환경에서 실제로 빌드를 해보는 것. 빌드 과정에서의 오류를 잡아냄 Unit Test : 특정 클래스 혹은 특정 클래스의 메소드와 같은 단위를 테스트 특정한 input에 대해서 특정한 output이 나온다고 가정하여 원하는 방향으로 작동되는 지 검사 Mockito : 다른 클래스와의 의존관계를 무시하고 결과값을 모사(Mock) Coverlay 테스트 커버리지 체크 기존 구현한 코드들을 돌아보..
Refactoring - 3장 코드에서 나는 악취 본 내용은 한달한권의 리팩터링 강의를 토대로 작성되었습니다. 0. 이 책의 포인트 프로그래밍 '미학'의 체계적 정리 리팩터링 단계의 체계적 규정 리팩터링 '사전' 작성 악취 -> 기법 -> 절차 악취 : 더러운 코드, 리팩터링이 필요한 코드 어디까지 리팩터링 해야 하나? 숙련된 개발자의 직관 1. 악취의 종류들 기이한 이름 이름은 각각 변수, 함수 모듈이 무엇을 하는지 잘 드러내야 함 이름이 마땅히 떠오르지 않는다면, 설계에 문제 중복코드 긴 함수 이름에 의도를 담은 여러 함수들로 쪼개기 저자의 함수형 언어 백그라운드 : 다층의 함수 추구(짧은 함수 지향) 함수는 다섯 줄이 넘지 않아야 한다? 저자의 스타일 긴 매개변수 목록 많은 매개변수, 옵셔널 매개변수… 함수 호출이 복잡해짐 전역 데이터 가변 데이터..
Refactoring - 2장 리팩터링 원칙 본 내용은 한달한권의 리팩터링 강의를 토대로 작성되었습니다. 0. 리팩터링이 필요한 이유 코드 리뷰 남이 만든 코드의 문제점을 파악한 뒤 더 나은 코드로 전환할 것을 제안하는 것 리팩터링의 원칙과 동일 좋은 코드 가독성 높은 코드, 경제성 있는 코드를 만들어서 현재의 동료 혹은 미래의 후임들에게 정보를 더 가시적으로 제공하는 것 1. 리팩터링 정의 리팩터링: 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법 중간 단계에서도 코드 동작이 유지되어야 함 어떻게 하느냐가 중요 왜(why) : 이해하고 수정하기 쉬운 코드 무엇을(what) : 내부 구조를 변경 어떻게(how) : 겉보기 동작은 그대로 유지한 채 Restructuring > Refactori..
Refactoring - 기본적인 리팩터링(2) 본 내용은 마틴 파울러의 Refactoring 2판을 토대로 작성되었습니다. 기본적인 리팩터링 1. 함수 선언 바꾸기 예시 코드 function circum(radius) {...} function circumference(radius) {...} 설명 함수는 프로그램을 작은 부분으로 나누는 주된 수단 함수 선언은 각 부분이 서로 맞물리는 방식을 표현 구성 요소를 조립하는 연결부 역할 소프트웨어도 이러한 연결부에 상당히 의존 연결부를 잘 정의하면 시스템에 새로운 부분을 추가하기 쉬워짐 잘못 정의하면 지속적인 방해 요인으로 작용 좋은 이름의 함수는 호출문만 보고도 무슨 일을 하는지 파악할 수 있음 함수의 매개변수는 외부 세계외 어우러지는 방식을 정의 함수를 사용하는 문맥을 설정 절차 매개변수를 제거하려면 ..