강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

III님의 프로필 이미지
III

작성한 질문수

Readable Code: 읽기 좋은 코드를 작성하는 사고법

안녕하세요 메서드명 때문에 고민이 있어서 질문드립니다.

작성

·

11

·

수정됨

0

안녕하세요 강사님
제가 create 메서드 명에 대해서 고민중인데

private void createTip(RequestTipDto requestTipDto, User user) {
    Tip tip = Tip.builder().title(requestTipDto.getTitle()).content(requestTipDto.getContent()).user(user).build();

    tipRepository.save(tip);
} 
private Tip createTip(RequestTipDto requestTipDto, User user) {
    Tip tip = Tip.builder().title(requestTipDto.getTitle()).content(requestTipDto.getContent()).user(user).build();

    return tip;
} 

tipRepository.save(tip);

 

첫번째 코드는 create메서드 안에 tip을 빌더로 생성하고 save까지 같이 하는 코드입니다.

두번째 코드는 tip을 빌더로 생성 후 리턴하고 해당 createTip을 호출한 메서드에서 save를 하는 코드입니다.

 

첫번째 코드는 둘이 같이 할 수있다는 장점이 있고, createTip하고 save를 또 따로 할 필요가 없는 장점이 있고

두번째 코드는 나중에 재상용성이나, create메서드안에서는 create만 하는 SRP(단일책임원칙)을 하고 있다는 것이 장점입니다.

 

위 두가지 방법중 어느것이 더 좋은 방법일까요?

그리고 위처럼 builder를 사용하는 코드는 길기 때문에 이를 service 클래스에서 따로 빼서 하는게 좋은지 아니면 entity 클래스에서 하는게 좋은지 궁금합니다.

 

강의 잘 보고 있습니다.

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. III님, 메서드명 및 메서드 설계에 관한 질문을 주셨네요. 이와 관련한 고민은 개발자들이 자주 마주치는 문제 중 하나입니다. 두 코드 모두 각기 장점이 있으며, 특정 컨텍스트에서 둘다 유효할 수 있습니다. 이에 대해 간략하게 설명드리겠습니다.

  1. 첫 번째 방법(생성과 저장을 함께):

    • 장점: 이 방식은 ‘Tip’ 객체를 생성하고 곧바로 저장 처리(saving)를 수행하기 때문에 코드 작성이 간편하며, ‘생성 후 저장’의 일련 작업을 하나의 메서드에서 관리할 수 있는 장점이 있습니다. 이 경우, Tip의 생성과 저장이 항상 연결되어 있어야 하는 비즈니스 로직에 적합합니다.
    • 단점: 만약 ‘Tip’ 객체를 생성 후 즉시 저장하지 않고, 다른 로직이 추가적으로 필요하다면 유연성이 떨어질 수 있습니다.
  2. 두 번째 방법(생성과 저장을 분리):

    • 장점: 이 방식은 생성(create)과 저장(save)의 책임을 분리하여 각 책임을 명확하게 가질 수 있습니다. 이렇게 되면, 메서드가 단일 책임 원칙(Single Responsibility Principle)을 충실히 따르고 있다고 볼 수 있습니다. 특히 객체를 생성 후에 추가적인 로직/처리나 수정을 할 수 있는 유연성을 가집니다.
    • 단점: 생성과 저장이 별개의 메서드 호출로 분리 되기 때문에, 호출하는 측에서 항상 두 메서드를 모두 호출해야 하는 번거로움이 있을 수 있습니다.

추천 방안:
- 프로젝트의 맥락과 ‘Tip’ 객체의 라이프사이클에 관한 요구사항에 따라 선택이 달라질 수 있습니다. 예를 들어, ‘Tip’ 생성 후 반드시 저장해야 하는 비즈니스 룰이라면 첫 번째 방식이 적절할 수 있습니다. 반대로 생성 후 여러 다른 처리가 필요하거나 저장이 선택적인 로직이라면 두 번째 방법이 더 적합할 수 있습니다.

추가 정보: 개발 팀의 스타일이나 안전성을 중시하는지를 기준으로 작업을 설계하는 것도 도움이 됩니다. 예시로, Effective Java와 같은 서적은 깔끔한 코딩과 설계에 대한 권장사항을 제공합니다.

저는 질문자님의 이해를 돕고자 유사한 고려 사항을 포함하여 조언을 제공하고 있습니다. 혹시 추가적으로 더 궁금한 사항이 있으시면 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

III님의 프로필 이미지
III

작성한 질문수

질문하기