#9-1. 데드 코드

[code 9-1] 데드 코드

if (level > 99) {
	level = 99;
}

// 생략

if (level == 1) {
	//멤버의 히트포인트와 장비 등을 초기화
	initHitPoint();
	initMagicPoint();
	initEquipments();
}
else if(level == 100) {
	addSpecialAbility();
}

[code 9-1]의 addSpecialAbility 메서드는 실행되지 않습니다.

이처럼 절대로 실행되지 않는 조건 내부에 있는 코드를 데드 코드(dead code) 또는 **도달 불가능한 코드(unreachable code)**라고 부릅니다.

이 악마는 겉보기에는 큰 문제를 일으키지 않을 것으로 보이지만, 여러가지 폐해를 가져옵니다.

먼저 코드의 가독성을 떨어뜨립니다. 코드를 읽는 사람이 데드 코드 주변을 읽을 때마다, 실제로 실행되는 코드가 아닌데도 왜 이 코드를 남겨두었는지, 어떤 의도가 있는건 아닌지 생각하게 만듭니다.

또한 언젠가 버그가 될 가능성도 있습니다. 지금까지는 실행되지 않던 죽은 코드가 사영 변경에 의해 도달 가능한 코드로 바뀔 가능성이 있습니다. 이렇게 되살아난 코드는 버그를 발생시키는 원인이 될 수 있습니다.

데드코드는 발생하는 즉시 제거하는 것이 좋습니다.


#9-2. YAGNI 원칙

YAGNI(You Aren’t Gonna Need It) : ‘지금 필요없는 기능을 만들지 말라!’

개발을 할 때, 미래를 예측하고 미리 만들어두는 경우가 있습니다.

하지만 이렇게 미리 구현한 로직은 실제로 거의 사용되지도 않고, 버그의 원인이 되기도 합니다.

따라서 YAGNI 원칙을 지키는 것이 좋습니다.

그렇다면, YAGNI 원칙을 지키지 않고 미리 구현하면 어떤 문제점이 발생할까요?

소프트웨어에 대한 요구는 매일매일 변합니다.

사양으로 확정되지 않고, 명확하지 않은 요구를 미리 예측하고 구현해도, 맞을 가능성이 낮습니다.

예측에 들어맞지 않는 로직은 데드 코드가 됩니다.