설모의 기록
[우아한테크캠프] 4일차 본문
객체지향 프로그래밍 기반으로 TDD 수행하기
오늘은 어제의 내용과 객체지향 생활체조 원칙을 바탕으로 코드를 구현하는 연습을 배웠습니다. 객체지향 생활체조 원칙은 극단적이라고 느낄 수 있지만 객체지향적으로 프로그래밍하기 위해 익혀야하는 원칙입니다. 그 내용은 아래와 같습니다.
- 하나의 메소드에는 오직 한 단계의 들여쓰기만 한다.
- else 예약어를 쓰지 않는다.
- 모든 원시값(primitive type) 과 문자열을 포장한다.
- 한 줄에 점을 하나만 찍는다.
- 줄여쓰지 않는다. // 축약 금지
- 모든 엔티티를 작게 유지한다.
- 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
- 일급 콜렉션을 쓴다.
- getter / settert / property를 쓰지 않는다.
TDD 방식을 구현하며 주의해야 할 사항
위의 객체지향 생활체조 원칙 내용과 덧붙여, 몇가지 더 고려해야 할 사항이 있습니다.
- 가능한 한 인스턴스 변수 또는 메소드는 만들지 않는 것이 좋습니다. 이것은 생각보다 어려우니 습관을 들여야 합니다.
- TDD를 구현할 때 글로만 작성하지 말고, 어떤 input을 넣었을 때 어떤 output이 나와야 하는지를 생각해야 합니다.
- 너무 많은 테스트 코드를 작성하면 이후에 유지보수할 때 힘들 수도 있습니다. 하나의 프로덕션 코드를 수정하면 그 결과를 테스트하는 테스트 코드를 모두 수정해야하기 때문입니다. 그래서 정말 필요한 것만 테스트 코드로 작성해야 합니다.
- 하나의 테스트 코드를 작성해 sucess 과정까지 왔다면 바로 리펙토링 과정을 수행합니다. 여러 테스트 코드를 작성하고 리펙토링을 수행하지는 않았으면 합니다.
- 메소드를 구현할 때는 이 메소드가 하나의 일만 하고 있나?를 항상 의심해야 합니다.
- 코드를 작성할 때는 성능이 좋아야하나? 유지보수하기 좋아야하나? 를 항상 고민해야 합니다.
- 상속이 정말 필요한 경우가 아니면 상속하지 않는 것이 좋습니다. 상속을 하면 부모가 가지고 있는 변수와 메소드까지 자식에게 물려지기 때문에 잘못 상속을 적용하면 생각과는 다르게 객체의 데이터를 변경할 수 있는 객체를 생성할 수 있습니다.
- 가능한 한 컴파일 에러가 발생하지 않는 선에서 점진적으로 코드를 리펙토링 해나가야 합니다. 테스트 코드를 작성한 후 한번에 모든 프로덕션 코드를 구현하려 하지말고, 한 단계씩 점진적으로 코드를 리펙토링해나가는 습관을 들여야 합니다.
- 일급 Collection 객체도 클래스로 감싸는 것이 좋습니다. Collection 객체도 유효성 검사 (또는 예외처리) 가 필요하기 때문에 클래스로 만들어 생성자에서 유효성 검사를 하는 것이 좋습니다. 이렇게 구현하면 생성자에서 예외를 막기 때문에 안정성이 높아질 수 있습니다.
- static 메소드와 인스턴스 메소드는 메모리 관점보다는 어떤 것이 더 좋을까를 고민해야 합니다. 인스턴스 메소드가 많은게 꼭 좋은 코드인 것은 아닙니다. 인스턴스 변수에 접근하지 않는 메소드는 static 메소드로 만드는게 더 좋은 방법입니다.
TDD 방식
TDD를 구현하는 방식은 두가지가 있습니다.
- Out-In 방식 : 사용자가 어떤 값을 입력할 때 어떤 결과가 나와야 한다에서 시작하는 방식.
- In-Out 방식 : 레고 블럭처럼 작은 블럭들을 구현해 블럭을 모아 전체 프로그램을 완성하는 방식입니다.
아래의 문장은 오늘 우아한테크캠프 강의에서 들은 인상 깊은 문장이여서 기록합니다.
결과가 좋은 코드만을 생각하기 보다 그 상황에 맞는 코드가 무엇인지를 생각하는 개발자가 되어라.
- Pobi (박재성 교수님)
'일상 > 우아한테크캠프' 카테고리의 다른 글
[우아한테크캠프] 7일차 (0) | 2018.07.11 |
---|---|
[우아한테크캠프] 6일차 (0) | 2018.07.09 |
[우아한테크캠프] 5일차 (0) | 2018.07.07 |
[우아한테크캠프] 3일차 (0) | 2018.07.04 |
[우아한테크캠프] 2일차 (0) | 2018.07.03 |
Comments