본문 바로가기

나의 백과사전

하드 코딩 (Hard - coding)

하드코딩: 설정사항이나 코드 등의 시스템적으로 사용하는 변수를 변수를 사용하지 않고

              값을 직접 소스코드에 박아서 사용하는 방식을 말한다.

              코드가 바뀌었을 경우 자동으로 반영되지 않기 때문에 이후에 버그가 발생할 위기가 많은 시한폭탄 같은 방식이다.

              

1
2
3
4
5
6
int main()
{
    const char *filename = "C:\\myfile.txt";

    printf("Filename is: %s\n", filename);
}


위 예제 코드에서 'C:\\myfile.txt' 가 하드코딩에 해당한다.

만약 myfile.txt 의 경로가 C드라이브가 아닌 다른 경로에 있을경우 어떻할 것 인가?

그때 마다 다시 코드를 수정하고 재 컴파일하는 번거로움을 감수할 것인가?




또다는 예로 구구단을 출력하는 프로그램을 짠다고 가정할때....

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
1)

int a;

for(int i = 0; i < 9; i++)
{
printf("%d * %d = %d", a, (i + 1), a * (i + 1));
}

//의 방식으로 짤 수도 있겠지만

2)
if (a == 1)
{
printf("1 * 1 = 1");
printf("1 * 2 = 2");
...
printf("1 * 8 = 8");
printf("1 * 9 = 9");
}
if (a == 2)
{
...
}
if (a == 3)
...
...
...
if (a == 9)
{
printf("9 * 1 = 9");
printf("9 * 2 = 18");
...
printf("9 * 8 = 72");
printf("9 * 9 = 81");
}

//위와 같은 방식으로 짤수도 있는데 2)번과 같은 방식의 코딩이 하드코딩이다.




한마디로 하드 코딩이란 코딩 방식의 일종으로 외부 입력에 대한 유연성이 없고 확장성이 낮은 코딩을 말한다.

하지만 단점만 존재 하는 것은 아니며 코드의 목적이 매우 직관적이라 가독성도 괜찮은 편이고

컴퓨터의 입장에서는 자잘한 체크나 유효성 검사 등이 빠지고 반복문이 줄어들어 속도가 올라가므로

정말 절대로 변경되지 않을 것이라고 자신할 수 잇는 작은 부분에 한정적으로 사용하면 나름대로

효과를 거둘 수 있기는 하다.


하지만 요즘 같은 시대는 하루에도 수십번 자주 변경이 일어나고

외부 입력 자체도 다양한 프로그램을 많이 개발하는 시대이기 때문에

하드코딩은 악의 근원지라는 표현에 걸맞는 방식이다.