if에 관한 고찰 (2)

Mark64-1·2022년 1월 3일
0

잡담

목록 보기
3/3

전편에서는 if 가 가지는 Depth 에 관해서 기록해봤다면, 이번에는 if 자체가 가지는 속성을 나열해봤다.
원래 전편에 살짝 덤으로 얹어가려는 내용이였는데 너무 길어져서 한페이지 더 만드는게 좋겠다라는 생각이 들어서 새로운 페이지를 만들어봤다.
이번에 참조한 사이트다.

  1. 불필요한 계산은 줄이자

우리가 가장 대표적으로 사용하는 if 문의 형태를 보자.
아래의 형태는 myProductArray라는 클래스와, 그 안에 boolean형 변수인 Empty가 정의되어있고 내용이 있다는 가정이다.

if(myProductArray.empty == true){
}

해당 형태에서 우리는 코딩을 조금 공부했다면 당연히 알 수 있는 줄이기 영역이 있다.

if(myProductArray.empty){}

이런 오류를 범하는 가장 크고 단순한 이유는 empty가 boolean형이 맞는지 아닌지 본인이 선언한 클래스에 대한 이해도가 낮거나, depth가 길거나 코드가 복잡한것 등의 이유로 머리속에서 단순 연산해서 코드가 간결해질 수 있음을 놓치는 경우이다.

  1. 연관없는 If끼리의 발목을 풀자

말이 좀 어려울 수 있는데, 생각해보면 코딩에서 다들 해본 실수다.

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은 걱정하지 않아도 됀다.

  1. {}많이 쓰자
    별거 아니기도 하고...생활화되어있기도 하고.. 한데
    그래도 {} 많이 쓰자.
    depth 표현이 눈에 정확해지는게 너무 좋다.
profile
개발자임미다.

0개의 댓글