전편에서는 if 가 가지는 Depth 에 관해서 기록해봤다면, 이번에는 if 자체가 가지는 속성을 나열해봤다.
원래 전편에 살짝 덤으로 얹어가려는 내용이였는데 너무 길어져서 한페이지 더 만드는게 좋겠다라는 생각이 들어서 새로운 페이지를 만들어봤다.
이번에 참조한 사이트다.
우리가 가장 대표적으로 사용하는 if 문의 형태를 보자.
아래의 형태는 myProductArray라는 클래스와, 그 안에 boolean형 변수인 Empty가 정의되어있고 내용이 있다는 가정이다.
if(myProductArray.empty == true){
}
해당 형태에서 우리는 코딩을 조금 공부했다면 당연히 알 수 있는 줄이기 영역이 있다.
if(myProductArray.empty){}
이런 오류를 범하는 가장 크고 단순한 이유는 empty가 boolean형이 맞는지 아닌지 본인이 선언한 클래스에 대한 이해도가 낮거나, depth가 길거나 코드가 복잡한것 등의 이유로 머리속에서 단순 연산해서 코드가 간결해질 수 있음을 놓치는 경우이다.
말이 좀 어려울 수 있는데, 생각해보면 코딩에서 다들 해본 실수다.
if (student == null) {
System.out.println(“존재하지 않는 학생입니다.”);
}
else if (student.getAverage() >= class.getClassAverage()) {
System.out.println(“평균 이상입니다.”);
}
else if (student.getAverage() < class.getClassAverage()) {
System.out.println(“평균 이하입니다.”);
}
생각외로 문제가 크게 없어보인다. 그래서 더 낚이기 쉬운 영역인데 해당 코드는 이렇게 바꿔주는게 좋다.
if (student == null) {
System.out.println(“존재하지 않는 학생입니다.”);
return;
}
if (student.getAverage() >= class.getClassAverage) {
System.out.println(“평균 이상입니다.”);
} else {
System.out.println(“평균 이하입니다.”);
}
뭐가 달라진걸까?
우리는 메서드를 배울때, 가장 기초 원칙중에 이런걸 배운다.
1개의 메서드는 언제나 1개의 작동을 가진다.
어렵지 않은 이야기다. isEmpty()라는 함수는 정말 그 함수가 empty요건에 관한 사항만 확인해야하지. 그 외의 일까지 이 메서드가 맡으면 안된다라는 이야기이다.
비슷한 이야기로, 하나의 if문에는 해당 사항과 관련이 있는 if로 엮어야하는데, 위의 경우
student == null
이걸 확인하기 위해서 우리는 if를 쓴건데, 여기서 elseif로 평균값과 관련한 계산을 하는것은 이 if랑은 관련이 없는 영역이다. 그래서 null체크를 하는 if하나, 평균을 체크하는 if 하나로 구분해야한다.
3.조건식에서 궂이 !(not 표현)을 쓰지말자
아까 위에서 했던 그 식을 거꾸로 해봤다. not을 붙혀서 처리하고 거꾸로 뒤집었다.
if (!student.getAverage() >= class.getClassAverage) {
System.out.println(“평균 이하입니다.”);
} else {
System.out.println(“평균 이상입니다.”);
}
설명이 궂이 필요없다. 필요없는 이야기인거 같아서....ㅋㅋ....
나도 not표현을 줄여달라는 이야기가 확 오지 않던데 보니까 좀 알것같다.
4.복잡한 if문은 줄이려고 노력하자
if (
ball.state != Ball.drop &&
ball.state != Ball.sleep &&
ball.position.x > ground.LEFTMARGINE &&
ball.position.x < ground.WIDTH &&
){}
이게 뭐라고 해야할까... 생각보다 나올일이 많은 코드다.
if (ball.isActive() && ball.isInside() &&)
간단하다. 메서드로 묶고 하는걸로 묶고
핵심은 메서드다. IsEmpty는 empty의 역할만!하는것. 그게 중요하다.
5.null 체크를 생활화하자.
if (newStudent != null && newStudent.isOK())
그놈의 NullPointExeption이 문제다.
생각보다 자주 볼일이기도 하고, 프론트엔드 개발 1년차의 입장에서 null접근으로 리렌더 로드 꼬여서 리액트 터졌다고 보고서 쓸때마다 가슴이 답답해진다. null체크 뒷부분은 &&처리로 인해서 없어지기 때문에, null은 걱정하지 않아도 됀다.