![[워밍업 클럽 4기 BE] 2주차 발자국](https://cdn.inflearn.com/public/files/blogs/d4ea6532-75ac-48f2-befe-220ed62fdcef/337266.jpg)
[워밍업 클럽 4기 BE] 2주차 발자국
강의
강의명: [Readable Code: 읽기 좋은 코드를 작성하는 사고법]
학습 내용: 섹션6. ~ 섹션9.
강의명: [Practical Testing: 실용적인 테스트 가이드]
학습 내용: 섹션1. ~ 섹션5.
예제로 먼저 실습을 진행하고 이후 강의를 통해 보완할 점을 배우고, 항상 느꼈던 "계속 실행해서 문제없는지 검증하는 거 불편한데"라고 생각하던 부분을 테스트 코드를 통해 자동으로 검증하는 것을 배우는 한 주였다.
변수와 메서드의 나열 순서
항상 고민이었다.
"변수는 어떤 순서로 나열하지? 메서드는 어떤 순서로 배치해야 하나?"
이에 대해 어느 정도 해답을 얻을 수 있었다.
공개 메서드를 먼저, 공통으로 사용하는 비공개 메서드는 마지막 사용 하위에 동일한 공개 범위 내에서는 상태 변경 >> 판별 ≥ 조회 등 다양한 컨벤션을 배울 수 있었다.
그러나 역시 가장 중요한 것은 나열 순서로도 의도와 정보를 전달할 수 있다. 라는 사실이다.
리팩토링 연습
미션을 먼저 수행한 후 강의를 학습했을 때 가장 많은 것을 얻어갈 수 있었던 부분이라고 생각한다.
예제에 대해 간단히 설명하면 스터디카페 이용권을 발급하는 시스템으로 이용권은 일일, 주간, 그리고 고정석이 존재하며 고정석만 추가로 사물함 이용권을 구매할 수 있다.
if (studyCafePassType == StudyCafePassType.FIXED) {
//logic
}
그래서 추상화 레벨을 높이기 위해 조건을 메서드로 추출하고 "음, 이 정도면 충분하지" 하고 만족했었다.
메서드 추출 개선 코드
if (studyCafePass.isFixed()) {
//logic
}
그런데 문제는 과연 이 코드를 모두가 이해할 수 있냐는 것이었다.
나는 이미 도메인에 대해 이해했기 때문에 "이용권이 고정석인가? -> 사물함 권한이 존재하는가?"이라는 사고방식이 자연스럽게 이어졌기 때문에 이 부분을 놓치게 된 것이다.
현재 우리 도메인에 대해 이해관계가 부족한 사람이 이 코드를 읽었을 때는 어떨 것인가?
"이용권이 고정석인가? -> 그래서?"
아니면 도메인이 확장되어 사물함에 대한 권한이 다른 이용권까지 확장된다면?
메서드로 추출하여 추상화 레벨을 높인 것 좋았지만 도메인 관점에서 바라볼 때 아쉬움이 존재했다.
고정 좌석 타입이 아닌가? -> 사물함 옵션을 사용할 수 있는 타입이 아닌가?
if (studyCafePass.canUseLocker()) {
//logic
}
그렇기에 위 메서드명처럼 고정석인지를 왜 체크했는지를 더 의미있게 표현할 수 있었던 것이다.
테스트는 [ ]다.
테스트는 내가 작성한 코드의 동작을 보장해 주는 보험이라고만 생각했다.
하지만 테스트 코드들이 모여 프로덕션 기능을 설명하는 문서가 될 수 있다는 것이다.
다양한 테스트 케이스를 통해 프로덕션 코드를 이해하는 시야를 보완하고 이 것들이 모여 팀 모두의 자산으로까지 이어질 수 있다.
미션
그동안의 강의 내용을 통해 예제를 직접 리팩토링해 보는 미션이었다.
가장 먼저 한 것은 실제 로직이 어떤 식으로 돌아가는지 파악하는 것이었다. 어떤 도메인이지, 어떻게 구성되어 있고 자세히 모르기 때문에 이에 대한 이해가 필요했다.
그 후 추상화 레벨을 높이고 중복 코드를 최소화하여 가독성을 높이고 객체로 묶어볼 만한 것을 찾아 객체들이 상호 협력할 수 있도록 노력했다.
마지막으로 책임에 따라 응집도 있게 객체가 잘 나뉘어져 있는지에 초점을 맞춰 진행했다.
이번 미션은 다른 사람의 코드를 읽고 이해하는 연습뿐만 아니라 다른 누군가가 나의 코드를 읽었을 때 어떻게 하면 읽기 좋게 할 수 있을지를 배울 수 있었다. 또한 어느 부분은 오버 엔지니어링으로 복잡도가 너무 높아졌을 수도 있지만, 이 역시 도구를 사용하는 데 있어 적정 수준을 찾아갈 기회라고 생각해 재밌게 미션을 수행할 수 있었다.
회고
리팩토링 연습 부분에서 얘기했듯이 추상화 레벨을 높이기 위해 메서드로 추출하고 해당 메서드의 이름을 단순히 동작에만 초점을 맞춰 이름을 지었던 부분을 반성하고 한 번 더 생각할 수 있었던 한 주였다. 앞으로는 "수준 높은 도메인 개념이 무엇일까?"에 집중해 볼 수 있을 것 같다.
그리고 가장 만족감이 높았던 것은 코드 리뷰다.
공개적인 자리에서 리뷰를 받는다는 부분에서 신청할 때는 걱정도 됐다.
그래도 선배 개발자에게 직접 모르는 것을 물어보고 나의 코드를 리뷰 받는 기회가 흔치 않고, 많은 것을 배울 수 있을 거로 생각해서 용기를 내서 지원했고, 너무 만족했던 시간이다.
또한 다른 사람들의 코드도 보면서 여러 시야를 배울 수 있었던 한 주였다.
댓글을 작성해보세요.