Yoda condition

Haiseong Jeong·2024년 3월 7일
1

우아한테크코스

목록 보기
2/2
post-thumbnail

YC

어제 우테코에서 폭포에게 Yoda condition에 대한 설명을 들었다. 어제 오후, 다른사람에게 2분 30초동안 자신이 알고있는것을 명확하게 설명하는 활동을 했다. 짧은 시간 동안 폭포에게 설명받은 내용을 나도 메이슨에게 설명했다. 그 뒤 메이슨과 보는사람마다 YC(Yoda condition을 있어보이게 앞글자만 땄음)를 아냐고 물어봤다. 이번 글은 2분 30초동안 말로 설명하듯이 빠르고 짧게 읽어볼 수 있게 설명해보겠다.

일반적인 코드

String name;
if (name.equals("Haiseong")) {
	System.out.println("이름이 같다.");
}

위의 코드는 이름"Haiseong"인지 검사하고 같다면 "이름이 같다."를 출력한다. 이 코드는 대부분의 상황에서 잘돌아간다.

그러나 만약 name에 null 이 들어간다면 어떨까?

NullPointerException 이 발생한다. 그렇다면 name이 null인지 미리 확인해주자.

String name = null;
if (name == null) {
     System.out.println(name + "이 null이다");
 	return;
 }
if (name.equals("Haiseong")) {
	System.out.println("이름이 같다.");
}

이제 name이 null인 경우도 해결이 됐다. 그러나 코드가 너무 길어졌다. 코드를 짧게 유지하면서 name이 null이여도 예외가 발생하지 않는 방법이 없을까? 이제 요다 컨디션을 알아보자.

순서 바꾸기

String name = null;
if ("Haiseong".equals(name)) {
	System.out.println("이름이 같다.");
}

순서를 바꿔주기만 하는것으로 코드줄을 늘리지 않고 NullPointerException을 방지할 수 있다. 이것을 Yoda condition이라고 부른다. 관계 연산자의 두 인자를 일반적으로 쓰는 순서가 아닌 순서를 바꿔 사용하는것이다. (나도 잘 몰랐는데 요다가 도치법을 쓴단다.)

Yoda condition의 장점

이미 위에서 첫번째 장점인 NullPointerException을 방지를 말했다. 두번째 장점은 실수를 막아준다는 것이다.

int a = 10;

// normal
if (a = 9) {
    System.out.println("a 는 9 입니다.");
}
// yoda condition
if (9 = a) {
    System.out.println("a 는 9 입니다.");
}

실수로 위의 코드를 적는다면 a = 10은 무조건 true를 리턴한다. Yoda condition을 사용한다면 10 = a컴파일 에러를 발생시키기 때문에 실수를 막을 수 있다. (그러나 요즘 Intellij 같은 IDE가 이미 잘 잡아주기 때문에 더이상 장점이라고 말하기 힘들다.)

Yoda condition의 단점

가장 큰 단점은 가독성이 떨어진다.

if (name.equals("Haiseong"))은 만약 이름"Haiseong" 이라면 으로 읽어진다.
if ("Haiseong".equals(name))은 만약 "Haiseong"이름 이라면 으로 읽어진다.

위의 코드가 읽기 훨신 좋다. Yoda condition은 가독성을 떨어뜨린다.

그래서 써 말아?

이 글을 쓰는 이유가 "Yoda condition을 써라!" 라고 말하기 위해서는 아니다. Yoda condition은 trade off가 있다. 팀에서 개발을 한다면 팀원과 상의해서 사용해야 할 부분인 것 같다. 내 주변 동료들은 가독성이 너무 좋지 않아 쓰는것을 선호하지 않는것 같다. 내가 보기에는 문자열을 비교할때는 사용한다면 웹개발을 할때 null로 들어오는 String을 잘 처리할 수 있어 사용해보는것도 좋을 것 같다.

profile
나는 개발자다. 5000만큼 코딩한다.

0개의 댓글