본문 바로가기

전체 글81

9. 단위 테스트 TDD 의 법칙 3가지 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통화할 정도로만 실제 코드를 작성한다. 깨끗한 코드 유지하기 지저분한 코드를 내놓으나 테스트를 안 하나 오십보 백보이다. 그 이유는 실제 코드가 진화하면 테스트 코드도 변해야 하기 때문이다. 그런데 테스트 코드가 지저분하면 그만큼 수정하기가 어려워진다. 테스트 코드는 실제 코드 못지 않게 중요하다. 테스트 코드는 이류 시민이 아니다. 실제 코드 못지 않게 깨끗하게 짜야 한다. 테스트는 유연성, 유지보수성, 재사용성을 제공한다. 테스트 코드를 깨끗하게 유지하지 않으면 결국은 잃어버린다. 그리고 테스트 케이스가 없으면 .. 2022. 7. 13.
8. 경계 외부 코드 사용하기 인터페이스 제공자와 인터페이스 사용자 사이에는 특유의 경계가 존재한다. 제공자는 사용성을 높이기 위해 많은 영역에서 지원하려고 하고, 사용자는 본인이 사용하는 쪽의 특화된 기능을 원하기 때문이다. 한 가지 예로 Map 을 보면 유용성이 높지만, 그만큼 위험하기도 하다. 여러 유형의 객체를 지원하지만, 오용의 가능성도 높기 때문. 그렇기에 경계 인터페이스를 여기저기 넘기지 않고, Map 과 같은 경계 인터페이스를 이용할 때는 이를 이용하는 클래스나 클래스 계열 밖으로 노출되지 않도록 주의한다. 경계 살피고 익히기 외부 코드를 익히기는 어렵고, 통합하기도 어렵다. 둘을 동시에 하려면 더 어렵다. 그렇기에 우리쪽 코드를 먼저 작성해 외부 코드를 호출하는 대신 먼저 간단한 테스트 케이스를 작.. 2022. 7. 13.
7. 오류 처리 오류 코드보다 예외를 사용하라 오류 처리 코드와 호출하여 논리를 진행하는 코드가 섞이면 알아보기가 어렵다. 논리가 뒤섞여 있기 때문. try/catch/finally 문부터 작성하라 try 블록에 들어가는 코드를 실행하면 어느 시점에서든 실행히 중단된 후 catch 블록으로 넘어갈 수 있다. 어떤 면에서 catch 블록은 트랜잭션과 비슷하다. try 블록에서 무슨 일이 생기든 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다. 먼저 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하는 방법을 권장한다. 미확인 예외를 사용하라 확인된 예외를 할 경우 최하위 (연쇄반응에서의 마지막) 함수에서 확인된 예외를 던질 경우 상위 함수에서는 그 예외를 알아야 하고, 결론적으로.. 2022. 7. 13.
6. 객체와 자료 구조 자료 추상화 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 것이 좋다. 인터페이스나 조회/설정 함수만으로는 추상화가 이뤄지지 않는다. 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다. 자료/객체 비대칭 객체와 자료 구조는 근본적으로 양분된다. 객체 지향 코드에서 어려운 변경은 절차적인 코드에서 쉬우며, 절차적인 코드에서 어려운 변경은 객체 지향 코드에서 쉽다. 복잡한 시스템을 짜다보면 새로운 함수가 아니라 새로운 자료 타입이 필요한 경우가 생기는데, 이 때는 클래스와 객체 지향 기법이 가장 적합하다. 반면, 새로운 자료 타입이 아니라 새로운 함수가 필요한 경우도 있는데, 이 때는 절차적인 자료 구조.. 2022. 7. 13.
5. 형식 맞추기 형식을 맞추는 목적 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 매우 높다. 그리고 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 오랜 시간이 지나 원본을 찾기 힘들정도로 코드가 변해도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 계속 영향을 미친다. 적절한 행 길이를 유지하라 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다. (그만큼 모듈화가 되어있다는 뜻) 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성하라 최상단에 기사를 몇 마디로 요약하는 표제가 나온다. 독자는 표제를 보고서 기사를 읽을지 말지 결정한다. 첫 문단은 전체 기사 내용을 요약한다. 세세한 사실은 숨기고 커다란 그림을 보여준다. 쭉 읽으며 내려가면 세세한 사실이 조금씩.. 2022. 7. 13.
4. 주석 나쁜 코드에 주석을 달지 마라. 새로 짜라 주석은 나쁜 코드를 보완하지 못한다. 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 주석을 달기보단, 그 코드를 깔끔하게 개선하는데에 시간을 투자해라. 코드로 의도를 표현하라! if(employee.isEligibleForFullBenenfits() 같이 주석을 대신해 함수로 충분히 표현이 가능하다. 좋은 주석 하지만 어떤 주석은 필요로 한다. 그 주석의 종류를 열거하자면, 법적인 주석 - 회사가 정립한 구현 표준에 맞춰 법적인 이유로 특정 주석을 넣는 경우 정보를 제공하는 주석 - 기본적인 정보를 주석으로 제공하면 편리함. 혹은 파라미터 등에서 어떤 포멧인지 (하지만, 필수는 아님. 함수명을 변경함으로 충분히 대체 가능) 의도를 설명하는.. 2022. 7. 13.