if - else 는 왜 있는걸까?
우리는 코딩을 할 때 if 문을 수도 없이 써왔다.
if - else가 없으면 프로그램을 짤 수 없는 것일까?
어셈블리어에는 if 문이 없다.
대신 해당 조건에 만족하면 다른 구문으로 점프 시키는 구조로 동작한다.
C 언어에서도 else를 사용하지 않고 goto 문을 써서 강제로 점프시키는 방법을 사용할 수 있다.
그러면 goto 문을 사용해서 다른곳으로 점프시키면서 코딩하면 될텐데 굳이 if - else문을 왜 만들어 놓은걸까?
goto 문을 쓰면 '지정한 행으로 점프한다'라는 겉으로 보면 아주 간단한 기능인 것 처럼 보인다.
하지만 어디로 점프했는지 코드를 자세히 들여다 봐야하며 코드의 흐름을 파악하기가 어렵다.
if - else를 도입하면 조건이 참인 경우와 거짓인 경우의 처리 흐름이 명확하게 분리가 되기 때문에
goto 문을 사용했을 때 보다 좀 더 쉽게 흐름을 파악할 수 있다는 장점이 있다.
그래서 '코딩을 지탱하는 기술' 책의 저자는 코드를 편하게 읽을 수 있기 때문에 else문 사용을 권장하고 있다.
하지만 나는 이 의견에는 동의할 수 없었다.
'코드스쿼드'에서 교육을 받았을 때 pobi는 'else문을 가능한 사용하지 말 것'을 강조해 왔다.
그 이유는 if - else 문도 코드의 흐름을 if 문에서 부터 하나하나 파악을 해야하기 때문이다.
예를 들어보자.
if - else를 사용한 코드는 다음과 같다.
if (isA) {
return A;
} else {
if (isB) {
return B;
} else {
play1();
}
}
else를 사용하지 않는다면?
if (isA) {
return A;
}
if (isB) {
return B;
}
play1();
둘 중 무엇이 더 읽기 편한가?
아직 잘 모르겠다면 요구사항을 더 추가해보자.
if - else 사용
if (isA) {
return A;
} else {
if (isB) {
return B;
} else {
if (isC) {
return C;
} else {
if (isD) {
return D;
}
play1();
}
play2();
}
}
else 사용안함
if (isA) {
return A;
}
if (isB) {
return B;
}
if (isC) {
return C;
}
if (isD) {
return D;
}
play1();
play2();
위처럼 if - else 기반으로 코딩을 설계하면 요구사항이 늘어날수록 if - else의 조건문도 자연스럽게 늘어나게 된다.
실제 현업에서는 한 메서드에 if - else가 100라인이 넘어가는 일이 비일비재하게 일어난다.
물론 무조건 if - else를 사용하지 말라는 말은 아니다.
상황에 따라서 if - else문이 if - return 보다 나은 경우도 있다.
하지만 대부분의 상황들이 else를 쓰지 않는것이 가독성 측면에서 좋은 경우가 많기 때문에
꼭 필요한 경우가 아니라면 else문을 사용하지 않는것이 필자는 더 나은 방법이라고 생각한다.
참고
코딩을 지탱하는 기술 - 니시오 히로카즈
'개발 도서' 카테고리의 다른 글
[이펙티브 자바] 아이템 2 - 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2023.03.14 |
---|---|
[이펙티브 자바] 아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2023.03.14 |
[객체지향의 사실과 오해] 이상한 나라의 객체 (0) | 2020.04.03 |
[객체지향의 사실과 오해] 협력하는 객체들의 공동체 (0) | 2020.04.01 |
개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴 - PART 1 (0) | 2019.11.26 |
댓글