❐ Description
1주차 피드백을 정리하자.
PR link
❐ Code Review
자신의 아이디러를 멋지게 표현한 코드들을 리뷰 하면서 정말 많은 것들을 경험할 수 있었다.
특히, 아키텍쳐 능력이 뛰어난 분도 여럿 본거 같다. 내가 받은 피드백을 정리해보았다.
Reviewer : 20HyeonsuLee & songsunkook & NaMinhyeok & phk1128
#️⃣ 책임이 많은 도메인 설계
feedback link
feedback commit link : TODO
SeparateManager가 많은 책임을 가지고 있는게 아닌가요? 라는 피드백을 받았다.
SeparateManager가 문자열을 분리하고, 커스텀 구분자를 추출하는 역할까지 하고 있었다.
최대한 책임을 덜어냈다고 생각했지만 부족했다.
- SeparateManager : 문자열 분리의 역할만 담당하도록
- ParseManager : 문자열 추출의 역할만 담당하도록
TODO : 위와 같이 리팩토링을 진행할 계획이다.
#️⃣ 단일 원칙은 도대체 어디까지?
feedback link
feedback commit link
커스텀 구분자를 추출하는 과정에서 나는 아래와 같은 코드를 작성하였다.
if (separateManager.canParseCustomDelimiter(input)) {
separateManager.extractCustomDelimiter(input);
}
return separateManager.separate(input);
추출할 수 있다면 추출하라. 그렇지 않다면 분리하라.
이 부분을 extractCustomDelimiter(...) 메서드에 넣을 수 있지만, 넣게 되면 메서드의 역할이 변칙적일
것이라 생각했다. 그렇다면 여기서 생각해볼 것이 단일 원칙이라고 하면 단 하나의 일을 하는 것인데,
- 커스텀 구분자를 추출 할 수 있는지 검증한다.
- 커스텀 구분자를 추출한다.
위 두 동작을 해당 메서드의 역할로 볼 것인가다.
근데 내가 작성한 다른 코드를 보면 validation 작업은 해당 메소드의 책임으로 여기고 개발을 해왔다.
validation의 경우에는 어떤 일을 하기 위한 전처리 작업이기 때문에 하나의 책임으로 봤는데,
이번의 경우에도 어떤 작업을 하기위한 전처리로 봐도될까?
#️⃣ Enum을 적극적으로 사용한다.
feedback link
feedback commit link : TODO
Enum을 적극적으로 사용한다는 피드백을 받았다. 문득 이런 생각도 들었다. 너무 남용하고 있는 것은 아닐까?
Delimiter를 Enum으로 관리하지 않고 일반 클래스로 관리하면 어떻게 설계해야 할까?
#️⃣ 불필요하게 싱글턴 패턴을 적용하여 클래스 설계
feedback link
feedback commit link : TODO
Input 값을 받는 클래스를 싱글톤 패턴을 사용해서 만들었는데, 동시성 이슈를 고려하지 못했다!!
앞으로 싱글톤을 설계할 때는 동시성도 고려해야 한다.
무엇보다 과연 여기에서 싱글톤이 필요했을까? 나는 무엇을 위해 싱글톤 패턴을 쓰려고 했던 것일까?
최초 프리코스 목표에서 설정해둔 "다양한 디자인 패턴을 적용할 수 있으면 해보자!"를 억지로
지켜보려고 한건 아닌지 스스로를 돌아 봐야겠다.
#️⃣ 팩토리 패턴 네이밍에 대한 고찰
feedback link
나는 주로 View layer로 넘기는 경우에는 from을, 그외의 경우에는 of를 사용했다.
이번 피드백을 기점으로 다시 한 번 생각하고 넘어가 보자.
보편적으로 다음과 같이 사용한다고 한다.
- from : 하나의 매개변수를 받는 경우
- of : 두 개 이상의 매개변수를 받는 경우
나는 좀 더 명확성을 위해 종종 create, initiate 와 같은 네이밍을 쓰기도 한다.
그럼 여기서 생각해볼 것이, View layer로 넘기는 경우에는 from을 사용하는 부분이다.
고민 끝에 보편적인 Rule을 따르기로 했다. 개발은 혼자하는 것이 아닌 함께 하는 것이기 때문이다.
물론 또 생각이 바뀔 수 있는데, 적어도 프리코스 기간 내에는 나의 컨벤션은 위와 같이 가져간다.
'우테코 7기 > 1주차' 카테고리의 다른 글
메소드 파라미터에 final 사용하기 (0) | 2024.10.22 |
---|---|
[JUnit5] 입력 값을 mockking할 수 있을까? (0) | 2024.10.21 |
[Java] 객체를 복사해보자 (0) | 2024.10.19 |
[Refactoring] Pattern을 캐싱하자 (0) | 2024.10.19 |
Regex 뿌시기 (0) | 2024.10.17 |