강의

멘토링

로드맵

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

III님의 프로필 이미지
III

작성한 질문수

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

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

작성

·

13

·

수정됨

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 클래스에서 하는게 좋은지 궁금합니다.

 

강의 잘 보고 있습니다.

 

답변 2

0

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, III 님!

어느 방법이 무조건 더 좋다고 말하기는 어려운데요, 상황에 따라 선택하시면 될 것 같아요.

Tip 이라는 도메인의 특성이 항상 save 행위을 기반으로 동작해야 한다면 1번이 더 편할 것이고, 그렇지 않고 저장이 아닌 다른 행위만 수행하는 경우도 있다면 2번을 고려해볼 수도 있을 것 같네요.

Builder의 경우는 객체 생성에 관련된 코드이니, 저는 객체(여기서는 Entity) 안에 넣고 있습니다.

도움이 되셨기를 바랍니다.
감사합니다. 🙂

0

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

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

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

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

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

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

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

III님의 프로필 이미지
III

작성한 질문수

질문하기