inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

64

AAA

작성한 질문수 21

1

안녕하세요 강사님
제가 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

1

박우빈

안녕하세요, III 님!

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

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

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

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

0

인프런 AI 인턴

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

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

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

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

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

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

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

[강의 질문] 메서드 선언부

0

90

1

[강의 질문] 메서드와 추상화

0

61

2

DIP 개념에 대한 질문입니다.

0

64

1

만약 보드를 이용한 게임의 종류가 더 다양해진다면 어떻게 될 수 있을지에 대한 고민

0

86

2

DIP 설명 후반부에 IOC에 대한 질문 드립니다.

0

79

2

안녕하세요 ! 혹시 자바가 아닌 다른 객체지향 언어를 알고있어도 강의를 들어도 괜찮을까요 ?!

0

71

1

자바 record 사용에 대해서 질문 드립니다!

0

128

2

강의 내용 정리 및 자료 제작 툴 문의 드립니다.

0

136

2

사용할 변수 가깝게 선언하기 질문

0

93

1

오버 엔지니어링

0

149

2

학습용 java/spring 오픈소스 추천

1

367

2

중복된 메서드 줄이는 방법

0

184

2

MarketPlace에서 Sonarlint 검색이 안됩니다.

0

417

3

isLandMineCell() 메서드 질문

0

209

1

Cell[][]BOARD 매개변수받기

0

153

2

ConsoleInputHandler에서 왜 final붙여야 하는지

0

193

1

정적 생성자 메서드 of, from

0

264

2

Getter관해서

0

148

3

이름 바꾸기

0

129

2

stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??

0

164

2

현업에서 ISP를 도입하려는데 인터페이스 설계에 있어서 의문이 있습니다.

0

208

2

null을 가질 수 있는 값을 인자로 넘겨야 하는 경우

0

252

3

리팩토링을 하고 난 뒤 다시보면 오히려 더 복잡해 보이는것 같은 느낌입니다..

0

254

2

조합 관계에 대해 질문있습니다.

0

166

2