전체 글196 7장. SRP: 단일 책임 원칙 SRP에 대한 가장 흔한 오해는 하나의 모듈은 하나의 일만 해야한다는 것이다. 그러나 SRP의 정확한 의미는 '단일 모듈은 변경의 이유가 오직 하나뿐이어야 한다'는 것이다. 여기서 말하는 변경의 이유는 사용자와 이해관계자를 가리킨다. 다시 사용자와 이해관계자는 해당 변경을 요청하는 집단을 의미한다. 결국 SRP의 의미는 '하나의 모듈은 오직 하나의 액터에 대해서만 책임져야 한다'는 것이다. 이 때 모듈은 단순히 함수와 데이터 구조로 구성된 응집된 집합이다. 이는 클래스가 될 수도, 패키지가 될 수도, 정말 하나의 모듈이 될 수도 있다. '응집된' 이라는 표현이 SRP를 암시한다. 단일 액터를 책임지는 코드를 하나로 묶어주는 힘이 바로 응집성이다. SRP를 위반하는 징후 1 : 우발적 중복 영화의 스태프 .. 2023. 11. 13. Pull Request 011 - 자유게시글 삭제 기능 TDD로 구현해보기 CRUD의 마지막 삭제 기능을 구현하고자 한다. 이후로는 Service Layer의 상위 계층, Controller Layer, Data Access Layer 순서대로 진행할 예정이다. 게시글 삭제 기능의 순서는 다음과 같다. FreeBoardService#deleteFreeBoard(long id) 를 통해 삭제 명령을 받는다. FreeBoardCommandService#delete(FreeBoard entity) 메서드를 통해 레포지토리에 FreeBoard 엔티티 삭제 쿼리를 날린다. 마찬가지로 오늘은 2번 메서드에 대한 테스트를 진행하고 이를 기반으로 기능 구현을 마칠 것이다. 그런데, 앞서 삽입, 수정, 조회 기능을 구현할 때와 이번 삭제 기능에는 차이가 있다. 바로 무언가 테스트해 볼 결과가 .. 2023. 11. 11. 4장. 주석 분명 잘 달린 주석은 유용하다. 그러나 대부분의 주석이 그렇지 못하다. 주석은 오래될 수록 코드에서 멀어진다. 주석을 유지하고 보수한다는 것은 현실적으로 어렵다. 코드는 계속해서 변화한다. 때로는 위치가 달라지기도 한다. 주석도 그럴까? 쉽지 않다. 부정확한 주석은 독자를 현혹하고 오도한다. 잘못된 결과로 독자를 이끌기도 하며 지킬 필요가 없거나 지키면 안되는 규칙을 명시한다. 따라서 우리는 주석을 가능한 줄이도록 노력해야한다. 주석은 나쁜 코드를 보완하지 못한다 일반적으로 주석을 다는 이유는 코드 품질이 나쁘기 때문이다. 그러나 표현력이 풍부하고 깔끔하며 주석이 거의 없는 코드가 복잡하고 어수선하며 주석이 많은 코드보다 낫다. 코드로 의도를 표현하라! 아래 예시를 살펴보자. 만일 사용자가 게시글의 작성.. 2023. 11. 10. Pull Request 010 - 자유게시글 조회 기능 TDD로 구현해보기 이번에는 게시글 조회 기능이다. 앞서 작성과 수정 기능을 마치고 삭제 기능을 먼저 조회하려 했으나, 수정 기능에서부터 겹쳤던 조회 기능을 모른척 할 수가 없었다. 조회 기능의 로직은 다음과 같다. FreeBoardService#getFreeBoard(long id) 를 통해 조회 명령을 받는다. FreeBoardQueryService#readEntityById(long id) 메서드를 통해 레포지토리에 FreeBoard 엔티티 조회 쿼리를 날린다. 조회한 엔티티 쿼리를 Response DTO로 바꿔 반환한다. 우선 2번에 대한 테스트를 진행해볼 것이다. 먼저 테스트를 진행할 클래스를 생성하고 필요한 필드들을 채우고, 테스트 메서드를 만들었다. class FreeBoardQueryServiceTest { .. 2023. 11. 10. Pull Request 009 - 자유게시글 수정 기능 TDD로 구현해보기 지난 글까지 자유 게시글 작성 기능을 모두 마쳤다. 이제는 자유게시글의 수정 기능을 구현해보려 한다. 아 그리고 지난 글의 마지막에서 언급했던 설계 수정은 다시 원상복구 했다. 이유는 다음과 같다. 서비스 레이어의 한 클래스는 엔트리 포인트 역할을 담당하긴 해야한다. 그렇지 않으면 컨트롤러와의 의존 관계가 너무 복잡해진다. 결국 컨트롤러와 통신하는 계층과 레파지토리와 통신하는 계층이 나뉘는 형태를 유지한다. 의존관계가 많이 물려 테스트하기 어렵긴 하다. 이 부분은 천천히 고쳐나가보자. 아무튼 자유 게시글의 수정 로직은 다음과 같다. 자유게시글 수정은 FreeBoardCommandService#updateFreeBoard(FreeBoard freeboard, FreeBoardDto.Put putDto);에.. 2023. 11. 9. Pull Request 008 - 자유게시글 작성 기능 TDD로 구현해보기 - 마무리 이제 모든 과정을 마쳤다. 마지막으로 FreeBoardService#createBoard(); 메서드의 테스트를 완성시킬 단계다. 지난 과정에서 작성해놓았던 테스트 코드와 기능 코드는 다음과 같다. @Test void createBoardTest(){ FreeBoardDto.Post boardPostDto = new FreeBoardDto.Post(); FreeBoardDto.Response boardResponseDto = boardService.createFreeBoard(boardPostDto); assertThat(boardResponseDto).isNull(); } ////////////////////////////////// @Transactional public FreeBoardDto.Res.. 2023. 11. 9. 이전 1 ··· 9 10 11 12 13 14 15 ··· 33 다음 반응형