설모의 기록

[우아한테크캠프] 4일차 본문

일상/우아한테크캠프

[우아한테크캠프] 4일차

HA_Kwon 2018. 7. 6. 01:17

객체지향 프로그래밍 기반으로 TDD 수행하기


오늘은 어제의 내용과 객체지향 생활체조 원칙을 바탕으로 코드를 구현하는 연습을 배웠습니다. 객체지향 생활체조 원칙은 극단적이라고 느낄 수 있지만 객체지향적으로 프로그래밍하기 위해 익혀야하는 원칙입니다. 그 내용은 아래와 같습니다.

  • 하나의 메소드에는 오직 한 단계의 들여쓰기만 한다.
  • else 예약어를 쓰지 않는다.
  • 모든 원시값(primitive type) 과 문자열을 포장한다.
  • 한 줄에 점을 하나만 찍는다.
  • 줄여쓰지 않는다. // 축약 금지
  • 모든 엔티티를 작게 유지한다.
  • 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
  • 일급 콜렉션을 쓴다.
  • getter / settert / property를 쓰지 않는다.



TDD 방식을 구현하며 주의해야 할 사항

위의 객체지향 생활체조 원칙 내용과 덧붙여, 몇가지 더 고려해야 할 사항이 있습니다. 

  • 가능한 한 인스턴스 변수 또는 메소드는 만들지 않는 것이 좋습니다. 이것은 생각보다 어려우니 습관을 들여야 합니다.
  • TDD를 구현할 때 글로만 작성하지 말고, 어떤 input을 넣었을 때 어떤 output이 나와야 하는지를 생각해야 합니다.
  • 너무 많은 테스트 코드를 작성하면 이후에 유지보수할 때 힘들 수도 있습니다. 하나의 프로덕션 코드를 수정하면 그 결과를 테스트하는 테스트 코드를 모두 수정해야하기 때문입니다. 그래서 정말 필요한 것만 테스트 코드로 작성해야 합니다.
  • 하나의 테스트 코드를 작성해 sucess 과정까지 왔다면 바로 리펙토링 과정을 수행합니다. 여러 테스트 코드를 작성하고 리펙토링을 수행하지는 않았으면 합니다.
  • 메소드를 구현할 때는 이 메소드가 하나의 일만 하고 있나?를 항상 의심해야 합니다.
  • 코드를 작성할 때는 성능이 좋아야하나? 유지보수하기 좋아야하나? 를 항상 고민해야 합니다.
  • 상속이 정말 필요한 경우가 아니면 상속하지 않는 것이 좋습니다. 상속을 하면 부모가 가지고 있는 변수와 메소드까지 자식에게 물려지기 때문에 잘못 상속을 적용하면 생각과는 다르게 객체의 데이터를 변경할 수 있는 객체를 생성할 수 있습니다.
  • 가능한 한 컴파일 에러가 발생하지 않는 선에서 점진적으로 코드를 리펙토링 해나가야 합니다. 테스트 코드를 작성한 후 한번에 모든 프로덕션 코드를 구현하려 하지말고, 한 단계씩 점진적으로 코드를 리펙토링해나가는 습관을 들여야 합니다.
  • 일급 Collection 객체도 클래스로 감싸는 것이 좋습니다. Collection 객체도 유효성 검사 (또는 예외처리) 가 필요하기 때문에 클래스로 만들어 생성자에서 유효성 검사를 하는 것이 좋습니다. 이렇게 구현하면 생성자에서 예외를 막기 때문에 안정성이 높아질 수 있습니다.
  • static 메소드와 인스턴스 메소드는 메모리 관점보다는 어떤 것이 더 좋을까를 고민해야 합니다. 인스턴스 메소드가 많은게 꼭 좋은 코드인 것은 아닙니다. 인스턴스 변수에 접근하지 않는 메소드는 static 메소드로 만드는게 더 좋은 방법입니다.



TDD 방식

TDD를 구현하는 방식은 두가지가 있습니다.

  1. Out-In 방식 : 사용자가 어떤 값을 입력할 때 어떤 결과가 나와야 한다에서 시작하는 방식.
  2. 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