java-calculator-7 미션 진행#2
Conversation
There was a problem hiding this comment.
처음 해봤다는 것이라고 생각도 못할만큼 충분히 잘 진행한 것 같습니다.
관련 의견은 좀 더 첨부해보겠습니다 !
답변
폴더 구조: 현재 제가 구성한 폴더 구조가 가독성이 좋은지, 트렌드에 맞는 개발 방식에 부합하는지 직관적인 피드백을 부탁드립니다.
- 현재 규모의 도메인 서비스에서는 충분하다고 생각합니다. SpringMVC와 일반적인 Java MVC는 다르다고 느껴서 충분히 좋아보입니다.
객체 분리: 계산기 내부 로직을 수행할 때 객체의 책임을 더 잘게 쪼갤 수 있는 부분이 있을지, 혹은 더 나은 리팩터링 방향이 있을지 의견 주시면 감사하겠습니다!
- 도메인의 역할을 집중적으로 한번 생각해보면 좋을 것 같습니다.
- 각각의 도메인이 어떤 역할을 해야하는지, 만약에 현실 세계에 "리모콘"이라는 도메인이 있으면, 리모콘은 어떤 "필드 = 가지고 있는 것들(숫자), (볼륨 버튼)"를 가지고 어떠한 역할을 할 수 있게 할지. "역할 = 숫자들로 채널 전환, 볼륨 버튼으로 소리 올리기"이런 기능만 담당하게 하는 것이 잘게 잘게 쪼갤 수 있다고 생각합니다.
개인적인 의견
테스트
도메인에 있는 기능을 다 테스트 해보는 것이 좋아보입니다.
Getter나 Setter 같은 기능 말고, 직접 작성한 기능에 대한 테스트를 진행하고 만드는 것이 좋다고 보입니다.
그래서 자연스럽게 저는 domain, service에 대한 테스트가 제일 중요하다고 생각해서 보통 domain과 service에 대한 테스트만 작성하는 것 같습니다.
개발 순서
domain부터 개발해보는 것이 제일 좋을 것 같고 "설계"를 제일 먼저헤서 어떻게 기능을 동작하게 할까를 고민하고 도메인부터 개발을 들어가보는 것이 좋아보입니다.
개발에는 정답이 없기 때문에 "왜 이렇게 개발했는지"만 잘 서술할 수 있다면 그것이 정답이라고 생각합니다.
| System.out.println("덧셈할 문자열을 입력해 주세요."); | ||
| String input = readLine(); | ||
|
|
||
| CalculatorService calculatorService = new CalculatorService(); |
There was a problem hiding this comment.
run() 할 때만 Service를 주입하는 것 보다는 다른 곳에도 사용할 수 있기 때문에, Controller가 직접 가지고 있는 방식은 어떻게 생각하시나요?
public class CalculatorController {
private final CalculatorService calculatorService;
public CalculatorController(CalculatorService calculatorService) {
this.calculatorService = new CalculatorService;
}
...
}
There was a problem hiding this comment.
인자로 받은 calculatorService가 아닌 새로운 객체를 생성해서 넣는 이유는 뭔가요?
There was a problem hiding this comment.
run()이라는 메서드가 생성될 때마다 주입된다면 "객체 생성 비용"이 매 순간 발생하기 때문에 Controller가 생성될 때만 주입되는게 유리하다고 생각해서 입니다.
추가적으로 run()이라는 메서드에서도 말고 새로운 메서드에서 사용될 때에도 사용될 수 있기 때문입니다.
| String input = readLine(); | ||
|
|
||
| CalculatorService calculatorService = new CalculatorService(); | ||
| int result = calculatorService.calculateInput(input); |
There was a problem hiding this comment.
제가 느끼는 일반 MVC에서는 Controller에서는 흐름을 조합하는 곳이라고 생각합니다.
그래서 어찌보면 calculatoeInput이라는 메서드 네이밍이 어떤 역할을 하는지 잘 이해가 되지않습니다.
현재 서비스를 만들고 있는데, 현재와 같이 작은 규모의 도메인 정도면 Service 없이 진행해보는 것이 더 좋을 것 같습니다.
왜냐하면 이렇다할 비즈니스 규칙이 없다보니 컨트롤러에서 비즈니스 흐름을 다 조합해보는 것도 좋은 방법일 것 같습니다.
There was a problem hiding this comment.
MVC에서 Controller 계층과 Service 계층의 관계에 대한 역할 구분이 명확하지 않아서 calculateInput 이라는 네이밍이 나온 것 같습니다. 수정하겠습니다.
제가 공부한 바로는 Service 계층은 서비스 시나리오를 Controller 계층은 외부 통신 흐름 제어의 역할을 맡는다고 알고있습니다. Service 계층이 필요없는건 이해가 가지만 Controller에서 조합한다면 역할이 애매해지지 않을까 싶습니다.
There was a problem hiding this comment.
어찌보면 현재 계산기 도메인 내에서는 계산하다라는 비즈니스 로직 하나 즉 서비스 시나리오가 하나 밖에 없기 떄문에, Service를 생성하는 비용이 더 들 것 같다고 생각합니다.
그래서 아싸리 Controller에서만 하도록 하는 것도 좋다고 생각합니다.
안녕하세요, 김세훈입니다.
java-calculator-7미션의 기능 요구사항을 충족하고, 자바 개발 가이드를 최대한 준수하기 위해 노력하며 구현을 완료했습니다.🚀 기능 구현 및 수정 사항
1. 기능 요구사항 구현
,,:) 및 커스텀 구분자(//,\n)를 파싱하여 숫자를 분리하는 로직을 구현했습니다.IllegalArgumentException을 발생시키도록 예외 조건을 추가했습니다.🔍 리뷰어분께 드리는 질문 및 피드백 요청
수정사항에 대한 직관적인 피드백 부탁드립니다. 감사합니다!