하드코딩

1 개요

프로그램 외부(설정파일 등)로 분리되거나, 연산을 통하여 얻는 것이 적절한 값을 직접 소스코드에 입력하여 프로그램을 작성하는 것.

주로 파일 경로, URL 또는 IP 주소, 비밀번호, 화면에 출력될 문자열 등이 대상이 된다.

2 하드코딩의 문제점

하드코딩은 프로그램의 유연성 있는 운용이나 향후의 유지보수에 큰 어려움을 준다.

예를 들자면, 특정 DB에 접속하여 자료를 조회하는 프로그램에 DB 비밀번호가 하드코딩된 경우, DB의 비밀번호가 노출되어 변경해야 한다면 프로그램 역시 수정하고 다시 배포해야 하는 번거로운 절차를 거쳐야 한다. 이런 경우에는 DB 비밀번호를 별도의 파일에 저장하고 불러와 사용하도록 개발하는 것이 적절하다.

다국어를 지원하는 프로그램의 경우 화면에 출력해야 하는 문자열을 소스코드에서 분리하면 번역과 다국어 지원 작업이 훨씬 수월하게 이루어 진다. 윈도우 응용프로그램 개발 시 사용하는 String Table이 좋은 예.

3 장점?

단점만 존재 하는 것은 아니며 코드의 목적이 매우 직관적이라 주석과 디파인만 문제 없다면 가독성도 괜찮은 편이고 컴퓨터의 입장에서는 자잘한 체크나 유효성 검사 등이 빠지고 반복문이 줄어들어 속도가 올라가므로 정말 절대로 변경되지 않을 것이라고 자신할 수 있는 작은 부분에 한정적으로 사용하면 나름대로 효과를 거둘 수 있기는 하다. 프로그래밍 언어의 방향성에 따라 유용성이 다르기도 하다. 고전적인 순차식 처리 언어인 어셈블리어나 C의 경우는 이러한 방식의 코딩이 괜찮은 상황도 제법 있다.[1]

4 예시

  • 하드코딩

<syntaxhighlight lang="cpp" line="1">
/**

  • DB 연결 객체를 생성하는 함수.
  • /

std::unique_ptr<Connection> CreateConnection()
{
// Scott 계정의 비밀번호는 Tiger이다.return std::make_unique<Connection>( "Scott", "Tiger" );
}
</syntaxhighlight>

  • 수정 예시

<syntaxhighlight lang="cpp" line="1">
/**

  • 설정 값을 불러온다.
  • /

std::string GetProp( const std::string& propKey )
{
// 설정파일 등에서 값을 읽어오도록 한다.
}

static const char *DB_ACCOUNT = "DB_ACCOUNT";
static const char *DB_PASSWORD = "DB_PASSWORD";

/**

  • DB 연결 객체를 생성하는 함수.
  • /

std::unique_ptr<Connection> CreateConnection()
{
const auto account = GetProp( DB_ACCOUNT );const auto password = GetProp( DB_PASSWORD );

return std::make_unique<Connection>( account, password );
}

</syntaxhighlight>
  1. 존 카멕 같이 90년대 이전에 활동을 한 사람들의 코드가 이런 쪽으로 유명하다.