......?? 대체 왜?? 이유가 뭐지???
대부분의 프로그래밍 언어는 if / else 구문을 지원하는데.....??
(else 쓰지말라고 해서 swich / case 사용할 생각하는 사람은 없죠...?? = 나)
이유를 검색해보자....!!
숨은 의미
이 원칙의 제시 의도는 한 메소드에서 발생하는 분기문을 줄이자는 것이다. 분기문을 많이 가지고 있는 메소드는 많은 기능을 가지고 있을 확률이 높다. 메소드를 분리하거나, 객체지향적인 구조를 적요해 분기문을 줄일 수 있다. 이는 결국 설계관점에서의 개선을 의미한다.
else 키워드는 '조건을 만족하지 않을 때'를 전체하고 시작한다. 가독성이 떨어질 수 밖에 없다. if 조건을 만족하지 않는 모든 경우를 의미하기 때문에, 코드를 읽을 때 양 쪽을 함께 생각해야 한다. 오류가 발생할 확률도 높다.
.....림딩동님은 독자가 이해하기 쉽게 잘 설명해주시기 때문에 자주 방문합니다!!
림딩동님의 설명을 듣고 소름이 끼쳤습니다.
else 키워드는 '조건을 만족하지 않을 때'를 전체하고 시작한다.
따라서, 가독성이 떨어질 수 밖에 없다.
if 조건을 만족하지 않는 모든 경우를 의미하기 때문에
코드를 읽을 때 양 쪽을 함께 생각해야 한다.
따라서, 오류가 발생할 확률도 높다.
위 정리로 한번에 전부 이해가 되었습니다. (림딩동님 진짜 대단하시네요.)
이해했지만 그래도 구현해봐야죠!!
public int keyboard(char aa){
int num = 0;
if("a".equals(aa)){
num = 1;
}else if("b".equals(aa)){
num = 2;
}
//.....
else if("Z".equals(aa)){
num = 1000000;
}else{
num = -1;
}
return num;
}
위 코드는 else문 기반의 코드를 작성한 예시입니다. 코드의 길이가 길지 않고(?) 가독성도 나쁘지 않다고 느낄 수 있다.
이 메소드는 return이 맨 끝에서 이루어집니다. 모든 조건문의 분기를 다 확인하기 전까지는 메소드가 어떻게 동작할 지 알
기 어렵습니다.
비즈니스적 구조로 보았을 때도 문제가 있는데, 대소문자 알파벳은 'num'과 1:1 관계를 가져야하나 'num = -1'이라는 구조
에서는 N:1 관계를 가진다고 표현합니다.
else 예약어의 단점을 알아보았습니다.
그럼 else 없이 어떻게 코드를 짜란건가...? 어떻게 없애지....?
early return 구조를 적용해보자!!!
else문 제거의 효과적인 방법은 early return 구조를 적용하는 것이다. → 디자인 패턴 - early return pattern
public int keyboard(char aa){
if("a".equals(aa)){
return 1;
}else if("b".equals(aa)){
return 2;
}
//.....
else if("Z".equals(aa)){
return 1000000;
}
throw new IllegalArgumentException("존재하지 않는 코드입니다.");
}
early return - throw exception 구조를 적용하면 가독성을 높일 수 있다. 개발자가 의도한 조건을 만족하는 경우 메소드는 return하고 종료한다. 코드를 읽을 대 의도한 조건을 생각하고 읽어주기만 하면 된다. 먼저 리턴을 하기 때문에 메소드를 끝까지 확인하지 않아도 된다.
if - return 기반으로 코드를 작성하면, 코드를 읽을 때 의식의 흐름이 메소드의 동작을 위한 '참'조건을 기반으로 일어난다.
'A인 경우'를 기반으로 생각하는 것이
'A가 아닌 경우'를 기반으로 생각하는 것
보다는 훨씬 명확하고 쉽다.
한 가지 더, early return 패턴으로 코드를 작성하면
불필요한 지역변수의 생성을 막을 수 있다.
위 예시코드에서는 'num'이라는 지역변수를 선언하고 코드를 작성했는데, 이 경우 중간에 지역변수 값이 변경될 수 있다는 예외상황이 언제든지 존재할 수 있다. 결국 분석해야할 코드량을 늘리게 된다.
객체지향 설계
분기점이 많아진다는 것은, 클래스의 구조를 변경해야 함을 의미할 확률이 높다.
한 클래스의 여러 메소드에서 같은 유형의 분기가 발생하는 패턴이 반복된다면,
클래스를 분리해 볼 수 있는 신호가 왔다고 생각 할 수 있다.
'개발 , 컴퓨터, IT지식' 카테고리의 다른 글
[Anaconda] win10(윈도우10)에서 Anaconda 가상환경 만들기 (0) | 2023.04.11 |
---|---|
[m1 homebrew 설치 Warning 해결방법] /opt/homebrew/bin is not in your PATH (0) | 2023.03.17 |
Redis서버 win10에서 설치하기 (0) | 2023.03.10 |
Transpile(트랜트파일)과 Complie(컴파일) (0) | 2022.12.01 |
[객체지향 생활체조 원칙] 1. 한 메서드에 오직 한 단계의 들여쓰기만 한다.(1/9) (0) | 2022.12.01 |