언제 리팩터링 할지는 경험을 많이 해보고 개인이 판단해야 함 감을 잡는데 도움이 될만한 리팩터링이 필요한 코드들에서 보이는 일정한 패턴을 아래에 나열 3.1 기이한 이름 함수, 모듈, 변수, 클래스 등의 이름은 무슨 일을 하고, 어떻게 사용하는지 명확히 알 수 있도록(의도, 목적) 지어야 함 마땅한 이름이 떠오르지 않는다면 설계를 다시 살펴보기 이름을 잘 정리하면 코드가 훨씬 간결해질 수 있음 3.2 중복 코드 코드가 중복되면 중복된 코드 사이의 차이점이 무엇인지 살펴봐야 하고, 하나를 수정 시 비슷한 모든 코드를 살펴 수정해주어야 함 3.3 긴 함수 오랜 기간 잘 활용되는 프로그램들은 짧은 함수로 구성되어 있음 함수가 길면 이해하기 어려움. 함수 호출 비용이 거의 없기 때문에 작은 함수로 분리해 줄 것..
2.7 리팩터링과 소프트웨어 개발 프로세스 리팩터링 지속적 통합 자가 테스트 코드 팀으로 개발할 때 다른 사람의 작업을 방해하지 않으면서 언제든지 리팩터링 할 수 있어야 함 지속적 통합을 적용하면 팀원 각자가 수행한 리팩터링 결과를 동료와 빠르게 공유할 수 있음 (리팩터링의 결과가 팀원의 작업에 문제를 일으키면 즉시 알아낼 수 있음) 지속적 배포는 소프트웨어를 언제든 릴리스할 수 있는 상태로 유지해 줌 2.8 리팩터링과 성능 직관적인 설계 vs 성능 소프트웨어를 이해하기 쉽게 만들기 위해 속도가 느려지는 방향으로 수정하는 경우가 많음 그러나 성능을 개선하기 더 쉬워짐 빠른 소프트웨어를 작성하는 방법 세 가지 1. 시간 예산 분배 방식 하드 리얼타임 시스템에서 많이 사용 설계를 여러 컴포넌트로 나눠서 컴포..
Enums: 특정 값들을 모아둔 자료형 숫자형 이넘(Numeric enums) enum Direction { Up = 1, Down, // 2 Left, // 3 Right, // 4 } 초기값부터 +1씩 증가 enum Direction { Up, // 0 Down, // 1 Left, // 2 Right, // 3 } 지정하지 않는 경우 0부터 1씩 증가 - 사용 예시 enum UserResponse { No = 0, Yes = 1, } function respond(recipient: string, message: UserResponse): void { // ... } respond("Princess Caroline", UserResponse.Yes); 문자형 이넘(String enums) enum ..
2.5 리팩터링 시 고려할 문제 ⊙ 새 기능 개발 속도 저하 리팩토링의 결과로 개발 속도가 느려진다고 여겨지지만 리팩터링의 궁극적인 목적은 개발 속도를 높이는 것 코드베이스가 건강하면 기존 코드에 복잡한 새 기능을 더 빨리 추가할 수 있기 때문(+ 버그 수정 시간을 줄여줌) ⊙ 코드 소유권 저자는 코드 소유권을 작은 단위로 나눠 엄격히 관리하는 것(, 코드 작성자만 수정하는 것)보다 팀에게 두어 팀원이라면 누구나 수정할 수 있게 함을 선호 코드 수정 권한이 없는 경우 기존 함수를 유지하고 새 함수를 호출하는 방식으로 수정하여 인터페이스가 복잡해진다 ⊙ 브랜치 팀원마다 코드베이스의 브랜치를 하나씩 맡아서 작업하다가, 결과물이 어느 정도 쌓이면(기능 완성) 메인 브랜치로 통합하는 작업 방식 독립 브랜치로 작..
매개변수에 타입 지정하기 let person = { name: 'Capt', age: 28 }; function logAge(obj: { age: number }) { console.log(obj.age); // 28 } logAge(person); 인터페이스에 타입 지정하기 interface personAge { age: number; } function logAge(obj: personAge) { console.log(obj.age); } let person = { name: 'Capt', age: 28 }; logAge(person); 인터페이스 interface 옵션 속성 ? 필수로 사용하지 않아도 되는 값을 표시 속성을 선택적으로 적용할 수 있음 interface 인터페이스_이름 { 속성?: 타..
2.1 리팩터링 정의 소프트웨어의 겉으로 보여지는 동작은 유지한 채 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법 성능 최적화와 비슷한데 목적이 다름 리팩터링은 코드를 이해하고 수정하기 쉽게 만드는 것이 목적이라 프로그램 성능이 나빠질 수도 있음 성능 최적화는 속도 개선만이 목적이기 때문에 코드가 다루기 어렵게 바뀔 수도 있음 한 번에 할 수 있는 작업을 수많은 단계로 나눠서 작업하는 것이 비효율적으로 보일 수 있지만 단계들이 체계적으로 구성되어 있고 디버깅에 시간을 뺏기지 않아 더 빠르게 진행할 수 있다. 리팩터링하는 동안 코드가 항상 정상 작동해야 함 리팩터링 과정에서 발견된 버그도 리팩터링 후에 남아있어야 함 2.2 두 개의 모자 소프트웨어 개발의 목적이 '기능 추가'인지 '리팩터링'인..
함수 타입 기본적인 함수 타입 선언 매개변수와 반환 값에 타입 설정 // 숫자 a, b를 받아 숫자를 리턴하는 함수 function sum(a: number, b: number): number { return a + b } 반환 값이 없는 경우 void function sum(a: number, b: number): void { console.log(a + b) } 타입이 정의된 인자만큼 전달해야 함 - 더 많이 전달해도, 더 적게 전달해도 타입 에러 발생 정의된 매개변수보다 적게 전달하고 싶은 경우 '?'를 이용 function sum(a: number, b?: number): number { return a } REST 문법 function sum(a: number, ...nums: number[])..
main(master) 소비자가 접하는 버전 안정적인 기능(최종 수정본) 개발, 테스트 완료 이 브랜치에서 커밋하지 않음 develop 실제로 개발이 일어나는 브랜치(개발 시 pull 받아야 하는 브랜치) 이 브랜치로부터 feature 브랜치 생성 개발이 진행 중이라 여러 버그가 존재 release dev로 부터 파생 배포 브랜치 테스트를 통해 버그 수정만 하는 브랜치(기능 개발 X) 수정 후 dev와 main에 머지시키기 dev 머지 누락 시 수정 사항이 누락됨 feature dev로 부터 파생 하나의 기능을 개발하는 브랜치 데브에서 팀원 모두가 개발 시 충돌이 일어날 수 있어 사용하는 독립적인 브랜치 hotfixes main으로부터 파생된 브랜치 버그 수정 기능 추가가 급한 경우 수정 후 dev와 m..
