if - else 그리고 return ( feat. 코드리뷰 )

Hann·2023년 12월 9일
0
post-thumbnail

Intro

대만에서의 기나긴 여정을 마치고, 한국에 입국과 동시에 새 회사에 들어가게되었다.

(사실 대만에서 화상으로 면접을 봤고, 운이 좋게 좋은 결과를 받았다.)

귀국하고나서 너무 정신 없이 지냈다.

그리고 드.디.어. 새로 입사한 이곳에서 간단한 기능을 추가 첫 배포후,

개발 팀원들과 간단한 “코드 리뷰”를 진행했다.

사실 코드 리뷰는 처음이라 어떻게 해야할지 잘 몰랐는데, 팀원분들이 잘 도와주셨고,

첫 코드 리뷰를 통해 얻었던 나의 코드에 관한 고찰을 남기려고한다.

(사실 코드 리뷰를 엄두해두지 않은 체로, 커밋관리를 엉망으로 한 상태여서 너무 창피했다😢.)

이게 맞나?! 아니, 이게 틀렷나??

if(isLogin){
	initStudentLogic();
}else{
	initOtherLogic();
}

원래 코드를 그대로 가져오긴 좀 그래서, 예제 코드로 느낌만 살짝 빌려왔다.

isLogin 일경우, initStudentLogic 을 실행하고

아니면, initOtherLogic 을 실행하는 간단한 분기문이었다.

if(isLogin){
	// 추가 분기 isTeacher
	if(isTeacher){
		initTeacherLogic();
		return;
	}
	initStudentLogic();
}else{
	initOtherLogic();
}

여기서 내가 추가한건 비교적 간단한 부분인,

isLogin 안쪽에서 한번 더 분기를 줘서 isTeacher 일 경우, initTeacherLogic 을 실행하고,

return 으로 함수를 종료해버려 뒤에 로직을 진행하지 않는 비교적 간단한 작업이었다.

그렇게 행복하게 살았습니다! 끗! .. 이면 좋겠지만! 😇

분기문에 대한 나의 자세 ( feat. 패턴 )

잠시 쉬어가는 타임으로..( 아니 뭘 했다고 쉬어가? )

내가 분기문을 마주했을때 리팩토링을 진행하는 과정을 단계별로 세분화 해서 정리해봤다.

  1. 분기분 발견 ( C기문 분발 다 뒤졌어 )
String? awesomeMethod() {
  if (isOK) {
    // init OK Logic
    // ..
    // ..
    return awesomeData;
  } else {
    // !isOK 일 경우
    // logging 이나 간단한 작업
  }
}
  1. 간단한 로직을 처리하는 부분 & 우선적으로 처리해야하는 부분을 위쪽으로 올려준다.
    Bounce Pattern : 유효하지 않은 경우를 먼저 처리하여 '핵심' 부분에 집중할 수 있게 해준다.
String? awesomeMethod() {
  if (!isOK) {
    // !isOK 일 경우
    // logging 이나 간단한 작업
  } else {
    // init OK Logic
    // ..
    // ..
    return awesomeData;
  }
}
  1. 가독성을 위해 else 문을 빼고 return 으로 함수를 종료시켜준다.

Early Return Pattern : 조건문이 만족할때 우선적으로 반환해 Depth 를 줄여 가독성을 높여준다.

String? awesomeMethod() {
  if (!isOK) {
    // !isOK 일 경우
    return;
  }

// init OK Logic
// ..
// ..
  return awesomeData;
}

나 자신도 모르는 사이에 벌써 알지도 못하는 패턴을 2개나 사용하고 있었다.

아무튼간 위와 같은 규칙하에 리팩토링을 진행했던것 같다.

그래서 뭐가 문제야?

다시 돌아와서 위 작성된 코드를 봐보자.

if(isLogin){
	// 추가 분기 isTeacher
	if(isTeacher){
		initTeacherLogic();
		return;
	}
	initStudentLogic();
}else{
	initOtherLogic();
}

내가 분기문을 마주했을때 진행한 패턴과 딱 맞아 떨어진다. 오로지 가독성만을 위한 로직.

하지만 전체 기획 관점에서 보면 학생과 선생은 동등한 계층이었다.

선생일때는 선생 로직, 학생일때는 학생 로직을 타는게 맞았다.

if(isLogin){
	// 추가 분기 isTeacher
	if(isTeacher){
		initTeacherLogic();
	}else{
		initStudentLogic();
	}
}else{
	initOtherLogic();
}

의미있는 코드

결과적으로 보면 작동 결과는 같다고 별거 아닌거 가지고 유난 떤다고 생각 할 수도 있다.

하지만 기존에는 우선적 기능구현, 후 가독성 & 통일된 코드 스타일을 추구 하던 나에게는

이 기회를 통해 코드 한줄 한줄에 프로젝트의 방향성과 의도를 담을 수 있다는걸 배우게 되었다.

이러한 마인드셋을 가지고 있다면, 내가 지향하던 ‘근거있는 코드’ ( 의미를 가진 코드 ) 에

한발짝 더 가까워질 수 있지 않을까 하는 고민의 시간을 가지게 되었다.

마치며..

개발자에게 있어서 코드 리뷰는 민감한 부분이며, 정말 필요한 과정인것같다.

내가 작성한 코드를 도마위에 올려놓고, 다같이 돌려보며 어떻다 저떻다 평가를 받으니..

민감할 수 밖에 없는것같다. 이 과정에서 자칫 잘못했다간 민감한 부분을 건드리고,

서로 감정이 상한 경우도 더러 있다고 들었다.

그에 비해 내 개발자 생에 첫 코드 리뷰는 너무 성공적이었고, 팀원들께 감사했다.

서로 배려하고 존중하며, ‘틀렸다’, ‘맞았다’ 를 판단하기보단,

내가 작성한 코드를 통해 서로의 의견을 ‘공유’하고 알아가는 시간이었고,

그를 통해 한 단계 성장 할 수 있었던 시간이었다.

각자의 바쁘신 와중에도 감사하게도 리뷰 시간을 내주신것에 감사하며,

이상 첫 코드 리뷰 후기 였습니다.

profile
通 하는 개발자 Hann 입니다.

0개의 댓글