클린코드 챌린지 Day 14, 15

seul·2024년 2월 9일

개발자북클럽

목록 보기
9/11

📅 TIL (Today I Learned): 2024.02.09
📋 오늘 읽은 범위: 8. 경계, 9. 단위 테스트


😎 책에서 기억하고 싶은 내용을 써보세요.

8. 경계

모든 소프트웨어를 직접 개발하는 경우는 드물기에 때로는 패키지를 사거나 오픈 소스를 이용하게 되는데, 이때 외부 코드를 우리 코드에 깔끔하게 통합해야만 한다. -> 소프트웨어 경계를 깔끔하게 처리하기

외부 코드 사용하기

프레임워크 제공자는 '적용성을 최대한 넓히려' 하고, 사용자는 '자신의 요구에 집중하는 인터페이스'를 바란다.

이건 코드로 담아야겠다...

Map은 굉장히 많은 역할을 하고 있는데 clear() 기능도 가능하다는 것! 근데,

Map sensors = new HashMap();
Sensor s = (Sensor)sensors.get(sensorId);

이렇게 하면 Map이 반환하는 Object를 알맞게 변환할 책임을 클라이언트가 갖게 된다.

그래서 Generics을 사용하면 코드 가독성이 높아지긴 하는데,

Map<String, Sensor> sensors = new HashMap<Sensor>();
Sensor s = sensors.get(sensorId);

이렇게 해도 Map<String,Sensor>가 필요하지 않은 기능까지 제공하게 된다.

그래서

public class Sensors {
	private Map sensors = new HashMap();
}

경계 인터페이스인 Map을 Sensors 안으로 숨긴다.
이렇게 하면 나머지 프로그램에는 영향을 미치지도 않고, 필요한 인터페이스만 제공할 수 있다.

경계 인터페이스를 이용할 때는 이를 이용하는 클래스나 클래스 계열 밖으로 노출되지 않도록 주의한다.
Map 인스턴슬르 공개 API의 인수로 넘기거나 반환값으로 사용하지 않는다.

학습 테스트

우리 쪽 코드를 작성해 외부 코드를 호출하는 대신 먼저 간단한 테스트 케이스를 작성해 외부 코드를 익히는 것

  • 필요한 지식만 홥고하는 손쉬운 방법

9. 단위 테스트

법칙 세 가지
1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.
2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.

깨끗한 테스트 코드 유지하기

  • 실제 코드가 진화하면 테스트 코드도 변해야 한다.
  • 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위 테스트다. (이유: 변경이 두렵지 않아서 ㅎ)
  • 테스트 코드는 최소의 표현으로 많은 것을 나타내야 한다.

테스트 당 assert 하나

맞는 얘긴데 때로는 주저 없이 함수 하나에 여러 assert 문을 넣기도 한다.
그래서,
'개념 당 assert 문 수를 최소로 줄여라'와 '테스트 함수 하나는 개념 하나만 테스트하라'로 말할 수 있겠다.

F.I.R.S.T

  1. First, 빠르게: 테스트는 빨라야 한다. 느리면 자주 못 돌리는데 그러면 초반에 문제를 찾아내 고치지 못 한다.
  2. Independent, 독립적으로: 각 테스틑 서로 의존하면 안 된다.
  3. Repeatable, 반복 가능하게: 테스트는 어떤 환경에서도 반복 가능해야 한다.
  4. Self-Validation, 자가검증하는: 테스트는 bool 값으로 결과를 내야 한다. 성공 아니면 실패핟. 통과 여부를 알려고 로그 파일을 읽게 만들어서는 안 된다.
  5. Timely, 적시에: 테스트는 적시에 작성해야 한다. 단위 테스트는 테스트 하려는 실제 코드를 구현하기 직전에 구현한다.

🥺 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.

한 번도 Map을 사용하면서 감싸서 사용할 생각을 안 해봤다. 해본 적은 있는데 그 의도를 생각하면서 사용한 것은 아닐 것이다. 8단원은 짧으면서 무엇보다 중요한 얘기를 담고 있다.

단위 테스트 부분은 이미 관련하여서 책을 읽은 적도 있고 개인 프로젝트 시 적용해서 사용하고 있어서 아는 내용을 한 번 더 복습한 느낌이 들었다. 그래서 8단원 경계가 더 생소하게 느껴졌다.


🤔 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

궁금한 게 없어서 흠이다. 제대로 이해했다면 그 다음 궁금증이 생겨나야 하는데...ㅠ 나중에 한 번 더 읽어야 할 것 같다.


돌아온 최애틸 미션...!

그냥 아무나 3명 골라도 되는 건데 난 또 하나하나 찾아보겠지... 시작...

  1. https://mylife100.notion.site/TIL-2024-02-06-2024-02-07-be41648446c34d8d863c363ac67d7306
    • 나도 Checked Exception과 Unchecked Exception에 대한 개념이 애매해서 찾아보았는데, 이 글을 읽으면서 한 번 더 정리할 수 있었다.
  2. https://daehun.notion.site/TIL-9-of-21-5-dc7e8fd3fe1a48fd9b0211ff40c8418e
    • 이게 공부지... 궁금증을 적어두고 스스로 해결까지 하셨다...
  3. https://velog.io/@wonjang/%ED%81%B4%EB%A6%B0%EC%BD%94%EB%93%9C-%EB%A7%A4%EC%9D%BC-%EC%9D%BD%EA%B8%B0-TIL-6%EC%9E%A5.-%EA%B0%9D%EC%B2%B4%EC%99%80-%EC%9E%90%EB%A3%8C-%EA%B5%AC%EC%A1%B0
    • 소감이 현실적이고 와닿았다.
profile
자존감은 일상의 성실함으로부터 온다

0개의 댓글