본문 바로가기
코딩/C 언어

c언어 코드 최적화 4장. 조건문 최적화

by DIYver 2020. 10. 14.

C언어 최적화에는 여러가지 고려해야 할 것들이 많다.

 

이번에는 조건문에서의 최적화를 다뤄보도록 하자.

 

 

 

1. 조건문은 비교연산 횟수를 줄여야 한다.

 

우리가 흔히 사용하는 조건문은 if 조건문이다.

별 생각없이 코딩을 하게되면 아래와 같은 코드가 나오게 된다.

 

if (i == 1)
{

}
else if (i == 2)
{

}
else if (i == 3)
{

}
else if (i == 4)
{

}
else if (i == 5)
{

}
else if (i == 6)
{

}
else if (i == 7)
{

}
else if (i == 8)
{

}

연산속도가 중요하지 않다면 이렇게 사용해도 큰 문제가 없다.

 

하지만 연산속도를 중요시 한다면 이런 코딩보다는 다른 방식을 사용해야 한다.

문제를 잘 살펴보면 만약에 i 가 8인 경우 8번의 조건 비교를 해야한다.

즉, 연산이 불필요하게 많게 되고, 시간 낭비가 발생하게된다.

 

 

위의 코드를 최적화하면 어떻게 할 수 있을까?

아래 코드를 확인해보자.

	if (i <= 4)
	{
		if (i <= 2)
		{
			if (i == 1)
			{
				// i = 1
			}
			else
			{
				// i = 2
			}
		}
		else
		{
			if (i == 3)
			{
				// i = 3
			}
			else
			{
				// i = 4
			}
		}

	}
	else
	{
		if (i <= 6)
		{
			if (i == 5)
			{
				// i = 5
			}
			else
			{
				// i = 6
			}
		}
		else
		{
			if (i == 7)
			{
				// i = 7
			}
			else 
			{
				// i =8
			}
		}
	}

 

뭔가 더 복잡해 보이는 느낌이다.

하지만 이론적으로 접근해보면 더 단순하고 간단하다는 것을 알 수 있다.

 

모든 경우의 수가 3번의 비교 연산이면 된다는 것을 알 수 있다.

 

조금 전에 i 가 8인 경우 8번의 비교 연산이 되어야 해당 조건문이 작동되었다면,

위의 코드는 3번의 비교 연산이면 된다.

 

나누는 기준은 쉽다.

계속 다루던대로 1, 2, 4, 8, 16 처엄 2의 멱수들으 기준으로 한다.

 

이렇게 if 조건문을 쪼개는 것을 Binary Breakdown 이라고 한다.

이진의 형태로 쪼개는 것을 뜻한다.

 

 

 

 

그리고 위의 예시의 경우 사실 switch 조건문이 더 타당하다.

 

 

2. 순차적 비교에서는 switch 조건문을 사용하자.

 

switch (i) {
  case 1:
    break;
  case 2:
    break;
  case 3:
    break;
  case 4:
    break;
  case 5:
    break;
  case 6:
    break;
  case 7:
    break;
  case 8:
    break;
}

switch 조건문은 비교할 변수가 명료하고 그 수가 많을 때 사용하면 좋다.

여러번 비교연산을 하지 않고 해당 값에 해당하는 조건을 실행시키므로 빠르다고 할 수 있다.

 

이번 포스팅에서는 테스트를 굳이 하지 않고 건너뛰도록 하겠다.

이론상으로 연산 속도 차이가 나지만, 

엄청 거대한 조건문이 아닌경우 그 차이가 미미하기 때문이다.

 

아무튼 조건문을 사용함에 있어서 이런 이론적인 내용을 바탕으로 최적화 한다면 분명 그 효과는 굉장할 것이다.

 

 

 

 

 

 

<이전 글>

1.  c언어 코드 최적화 1장. 나눗셈을 사용하지 말자.

 

c언어 코드 최적화 1장. 나눗셈을 사용하지 말자.

C언어는 오랜 역사를 갖고 있으며, 더 발전한 C++ 언어 역시 많은 곳에서 사용되고 있다. 특히 컴퓨터보다는 제한된 성능의 기계에서 사용하고는 한다. 보통 우리는 임베디드 시스템이라고 부른��

diyver.tistory.com

2. C언어 코드 최적화 2장. 비트연산을 사용하자.

 

C언어 코드 최적화 2장. 비트연산을 사용하자.

C언어 코드 최적화 방법은 여러가지가 있다. 이전에 나눗셈을 사용하지 않는것을 다뤄봤었다. 이번에는 비트연산을 사용하는 것이 얼마나 빠르게 코드를 작동시키는지 다뤄보도록 하자. 비트(bi

diyver.tistory.com

3 .c언어 코드 최적화 3장. LOOP 최적화

 

c언어 코드 최적화 3장. LOOP 최적화

코드를 짜다보면 반복문은 무조건 사용하게 되어있다. 그런데 이 반복문 연산속도가 빠른놈이 아니다. 1. 반복문은 연산속도가 느리다. 반복을 하게되면 연산속도가 늦다는 것인데, 예를 들면 1�

diyver.tistory.com

 

댓글