#1-1. 의미를 알 수 없는 이름

[code 1-1] 기술 중심 명명

class MemoryStateManager{
	void changeIntValue01(int changeValue){
		intValue01 -= changeValue;

		if(intValue01 < 0){
			intValue01 = 0;
			updateState02Flag();
		}
	}
}

기술을 기반으로 이름 붙이는 것을 **‘기술 중심 명명’**이라고 한다. (Memory, flag, …)

[code 1-2] 일련번호 명명

class Class001{
	void method001();
	void method002();
	void method003();
}

클래스와 메서드에 번호를 붙어 이름 짓는 것을 **‘일련번호 명명’**이라고 한다.

이와 같이 기술을 기반으로 이름짓거나, 일련번호를 매겨 이름을 지으면 코드를 통해 어떠한 의도도 읽어낼 수 없다.

이렇게 이름을 지은 코드는 이해하기 어려우며, 읽고 이해하는데 시간이 오래걸리게 된다.

또한, 충분히 이해하지 못한 상태로 코드를 변경하면 버그가 발생할 가능성이 크다.

이러한 위험을 줄이고자 메서드의 역할과 기능을 설명을 위한 문서를 만들기도 하지만, 현업에서는 바쁜 업무로 인해 유지보수가 거의 이루어지지 않습니다.

코드는 계속해서 변경되지만 문서의 유지보수가 이를 따라가지 못한다면, 결국 문서가 거짓말을 하게 되는 꼴이며 이는 버그가 더 쉽게 발생하게 되는 결과를 초래하게 됩니다.

#1-2. 이해하기 어렵게 만드는 조건 분기 중첩

조건 분기는 조건에 따라 처리 방식을 다르게 하는 데 사용되는 구조입니다.

이러한 조건 분기는 어설프게 사용하게 된다면, 악마가 되어 개발자를 괴롭힙니다.

[code 1-3] 여러 번 중첩된 로직

// 게임에서 마법 발동의 조건을 구현한 예시
// 살아있는지 판정
if(0 < member.hitPoint){
	//움직일 수 있는지 판정
	if(memer.canAct()){
		//매직 포인트에 여유가 있는지 판정
		if(magic.costMagicPoint <= member.magicPoint){
			member.consumeMagicPoint(magic.costMagicPoint);
			member.chant(magic);
		}
	}
}