< 리팩토링: Refactoring >
- 외부적으로 드러나는 기능을 변경하지 않음 (결과의 변경 없이 코드를 조정)
- 소스 코드의 가독성과 유지 보수의 용이성을 높이기 위해 내부 구조를 변경
-> 기존 기능은 유지하되 개발 과정에서 편리한 코드가 되도록 재작성 하는 것
-> 새로운 기능을 추가하거나, 버그를 제거하기 위한 목적은 아님
< 필요성 >
- 대규모 프로젝트를 진행하기 위해 유지보수의 용이성이 요구됨
-> 소프트웨어의 구조, 구현, 설계를 개선하면서 기능을 보존
- 소스 코드의 가독성이 떨어지는 경우, 다른 사람과의 협업이 어려울 수 있음
- 리팩토링을 통해 코드의 중복을 제거하고, 수정이 편리해질 수 있음
-> 코드의 품질이 좋아 수정하기 용이하다면, 궁극적으로는 개발 속도가 개선됨
< 리팩토링이 필요한 상황 >
- 유사한 코드가 세 번 이상 반복될 때
-> But, 개발 일정 및 계획을 감안해야 함
- 코드 리뷰를 통해 다른 사람에게 코드를 공유할 때
-> But, 너무 많은 인원이 참여하지 않는 것을 권장
- 새로운 기능을 추가할 때
-> 현재 코드를 유지한 상태로 새 기능을 추가하는게 어렵다면, 리팩토링 고려하기
- 버그를 수정해야 할 때
< 리팩토링을 하지 말아야 할 때 >
- 현재의 코드가 정상 동작조차 하지 않는 상황 ( 재작성 필요 )
- 개발 일정 마감이 다가온 상황
< Two Hats 원칙 >
1) 기능을 추가할 때: 기존 코드를 수정하지 말고, 기능 및 테스트만 추가한다.
2) 리팩토링 할 때: 기능을 추가하지 말고, 기존 동작을 유지한 상태로 내부 구조만 변경한다.
-> 추가 오류를 최소화하기 위하여 리팩토링에만 집중할 수 있도록 한다.
< 클린 코드: Clean Code>
: 개발자가 보기에 깔끔한 코드 ( 이해하기 쉬운 코드 )
< 작성 팁>
- 가능한 잘 알려진 코드 컨벤션을 따르며 코딩하기
-> Camel Case, Snake Case 등 언어에 맞는 적절한 컨벤션을 따르자
- 나중에 다시 보아도 빠르게 이해할 수 있는 코드를 작성하기
- 핵심적인 기능을 담당하는 코드는 주석을 통해 세부 내용을 추가적으로 친절히 설명하기
- 동사를 사용하기
ex) 함수 이름: saveFile( )
- 하나의 파일에서는 하나의 프로그래밍 언어 사용하기
- 참조되거나 수정되는 코드는 기존 코드보다 clean 해야 한다.
< TDD: 테스트 주도 개발 >
- 소프트웨어 개발 방법론 중 하나로, 작은 단위의 테스트 케이스를 활용함
- ① 먼저 테스트 케이스를 작성한 뒤에 ② 이를 통과하는 코드를 작성하는 방식으로 개발
- 짧은 개발 주기를 반복하는 개발 과정에 적합
-> 애자일 개발 방법론 중 XP의 "Test-First" 와 맥락을 같이 한다.
< 개발 과정 >
: 테스트 코드를 작성한 뒤에 실제 코드를 작성 ( 테스트 케이스 필요 )
< 특징 >
- 생산성 저하 ( 개발 속도 저하 )
-> 계속해서 테스트 과정을 거치며 코드를 고쳐 나간다.
- 해당 과정에 익숙하지 않은 개발자에게 TDD 방법을
체득하기 위한 시간이 필요하다.
< 애자일 Agile >
: 소프트웨어 개발 방법론 중 하나
- 사용자로부터 요구사항을 한꺼번에 받아서 개발을 시작하지 않음
- 일정한 주기를 가지고 반복적으로 프로토타입을 만듦
-> 그 때마다 필요한 요구 사항을 받아 수정하며 확장시킨다.
① 계획 -> ② 설계 -> ③ 발전 -> ④ 테스트 -> ⑤ 검토 (반복)
< 객체 지향 프로그래밍 >
: 현실 세계의 사물 (개체) 를 코드로 모델링하여 프로그램을 작성하는 방식
: 다양한 부품을 조합하여 하나의 완성된 프로그램을 조립하는 것에 비유할 수 있다.
: 코드의 재사용성이 높지만, 일반적으로 절차 지향 방식에 비해 느리다.
< 특징 >
1. 추상화: 객체들의 공통적인 속성과 메서드를 정의한다.
ex ) 클래스 정의
2. 상속: 하나의 클래스가 가진 정보 ( 속성, 메서드) 를 다른 클래스가 물려 받아 사용한다.
-> 코드의 재사용성을 높여 생산성을 높일 수 있음
3. 캡슐화: 실제 구현부를 외부에 드러나지 않도록 은닉한다.
-> 각 객체가 독립적으로 기능하며, 데이터와 기능(메서드)을 하나로 묶어 관리할 수 있다.
4. 다형성: 다른 방법으로 동작하는 함수를 동일한 함수명으로 호출할 수 있다.
1) 오버라이딩: 부모 클래스의 메소드와 같은 이름 및 매개변수를 갖는 코드를 재정의한다.
2) 오버로딩: 함수 이름은 같지만 매개변수가 다른 함수를 정의한 뒤에, 필요에 따라 호출해 사용한다.
< 절차 지향 vs 객체 지향 >
< 함수형 프로그래밍 >
: 순수 함수를 조합하여 프로그램을 개발하는 방식
: 대입 구문이 없는 프로그래밍
< 특징 >
- 데이터를 처리하는 과정을 일종의 수학적 함수를 계산하는 것으로 다룬다.
- 데이터는 불변한 (immutable) 것으로 간주한다.
- 함수형 프로그래밍에서는 문제를 함수로 분해하여 해결한다.
- 함수형 프로그래밍 언어는 조건문 및 반복문을 지원하지 않는다.
'CS' 카테고리의 다른 글
컴퓨터 공학 지식(4) : 컴퓨터 네트워크 (1) | 2024.01.22 |
---|---|
컴퓨터 공학 지식(3) : 데이터베이스 (1) | 2024.01.19 |
컴퓨터 공학 지식(2) : 컴퓨터 구조 (0) | 2024.01.18 |
컴퓨터 공학 지식(1) : 웹(Web) (0) | 2024.01.18 |