불필요한 코드

위키백과, 우리 모두의 백과사전.

컴퓨터 프로그래밍에서, 불필요한 코드 (dead code)는 프로그램의 소스 코드에서 실행되지만 결과가 다른 계산에 전혀 사용될 수 없는 섹션이다.[1][2] 불필요한 코드의 실행은 계산 시간과 메모리의 낭비이다.

비록 불필요한 계산의 결과가 전혀 사용되지 않지만, 이것은 예외를 일으키거나 몇몇 전역 상태에 영향을 미쳐서, 이러한 코드의 삭제가 프로그램의 출력을 변화시키고 의도치 않은 버그들을 생성할 수 있다. 컴파일러 최적하들은 일반적으로 불필요한 코드의 제거가 프로그램의 출력에 미치는 영향이 모호할 때는 보수적인 접근을 취한다. 프로그래머는 이 문제에 대해서 추가적인 정적 그리고/또는 인라인 함수들의 사용과 링크 타임 최적화의 사용을 활성화함으로써 컴파일러를 도울 것이다.

예시[편집]

int foo (int iX, int iY)
{
	int iZ = iX/iY;

	return iX*iY;
}

위의 예시에서, 비록 iX를 iY로 나누는 것이 계산되고 전혀 사용되지 않더라도, 0으로 나누기가 발생할 때는 예외가 던져질 것이다. 그러므로 불필요한 코드의 제거는 프로그램의 출력을 변화시킨다.

분석[편집]

불필요한 코드 제거는 불필요한 코드가 프로그램에서 제거되는 컴파일러 최적화의 한 형태이다. 불필요한 코드 분석은 유효 변수 분석을 사용함으로써 수행되는데, 이것은 정적 코드 분석데이터 흐름 분석의 한 형태이다. 이것은 제어 흐름 분석에 기초한 도달할 수 없는 코드 분석과 대조를 이룬다.

불필요한 코드 제거 기법은 도달할 수 없는 코드(unreachable code) 제거와 중복 코드(redundant code) 제거 같은 최적화들 클래스에 속한다.

큰 프로그래밍 프로젝트들에서, 불필요한 코드를 인식하고 제거하는 것은 가끔은 어려우며, 특히 전체 모듈들이 불필요할 경우에는 더 그렇다. 테스트 비계(scaffolding)는 코드가 아직 쓸모 있는지를 보여주며, 가끔 컨트랙트 언어는 코드가 더 이상 적절하지 않을 때에도 코드의 전달을 요구할 수 있다.[3]

몇몇 IDE(통합 개발 환경)들은(비주얼 스튜디오 2010[4] 그리고 이클립스 갈릴레오[5]같은) 컴파일 단계 동안 불필요한 코드를 찾는 능력을 갖는다.


같이 보기[편집]

각주[편집]

외부 링크[편집]