상용구 코드

컴퓨터 프로그래밍에서 상용구 코드  또는 상용구는 수정하지 않거나 최소한의 수정만을 거쳐 여러 곳에 필수적으로 사용되는 코드를 말한다. 이와 같은 코드는 최소한의 작업을 하기 위해 많은 분량의 코드를 작성해야 하는 언어에서 자주 사용된다.  상용구 이용을 피하기 위해서 이용할 수 있는 방법으로는 메타 프로그래밍 (컴퓨터가 필요한 상용구를 자동으로 생성해 준다), '설정보다는 관례' (기본값이 제공되어 각 프로젝트의 프로그램에 대해 세세하게 지정해야 할 필요를 줄여준다), 혹은 모델기반 엔지니어링 (모델과 모델-코드 생성기를 이용함으로써 손으로 상용구를 작성할 필요를 없애준다) 등의 고급 매커니즘을 이용하는 방법이 있다.

관련된 용어로 부기 코드(bookkeeping code)는 비즈니스 로직의 일부가 아니라 데이터 구조를 유지하거나 프로그램의 2차적인 기능을 처리하기 위해 비즈니스 로직과 함께 쓰인 코드를 의미한다.

예
상용구의 한 예로 프로그램의 로직이나 언어의 필수 구문이 아니면서, 관례적으로 소스 파일 시작 부분에 추가되는 선언들과 같은 것을 들 수 있다. 다음 펄 예제는 이러한 상용구를 보여준다.

!/usr/bin/perl
use warnings;
use strict;

첫 번째 줄은 명령 줄(유닉스/리눅스 시스템에서)로 펄 스크립트를 직접 실행할 수 있게 하는 앞머리에 해당한다. 두 줄의 프라그마(pragma)는 경고와 엄격한 모드를 사용하도록 설정한다. 훌륭한 펄 코딩을 위해 널리 쓰인다.

다음은 C++ 프로그래밍 언어의 상용구 예제로 #include 보호이다.

#ifndef _MYINTERFACE_H
#define _MYINTERFACE_H

...

#endif

여기서는 전역 변수를 이용하여 컴파일러가 myinterface.h 파일을 이미 읽었는지 여부를 확인할 수 있게 한다. 하나의 모듈을 컴파일 할 때 상호 의존하는 많은 파일들이 관련될 수 있는데, 그러다 보면 한 헤더파일을 여러 번 처리함으로써 중복 정의 오류가 생기는 경우가 많다. #include 보호를 이용하면 각 헤더 파일을 한 번만 처리할 수 있다.

객체 지향 프로그래밍

객체 지향 프로그램에서는 인스턴스 변수를 가져오거나 설정하기 위한 메소드를 제공하는 경우가 많다. 이러한 메소드에 대한 정의를 상용구로 볼 수 있다. 클래스에 따라 코드가 다를 수 있지만, 구조가 동일하기에 직접 작성하기 보다는 자동으로 생성하는 것이 더 낫다. 예를 들어 다음의 자바 클래스는 애완 동물을 표현하고 있는데, Pet , name , owner에 대한 선언을 제외하면 대부분이 상용구이다.

public class Pet {
 private PetName name;
 private Person owner;

 public Pet(PetName name, Person owner) {
 this.name = name;
 this.owner = owner;
 }

 public PetName getName() {
 return name;
 }
 public void setName(PetName name) {
 this.name = name;
 }

 public Person getOwner() {
 return owner;
 }

 public void setOwner(Person owner) {
 this.owner = owner;
 }
}
이 예에서 상용구의 대부분은 캡슐화를 제공하기 위해 쓰였다. 변수 name 과 owner를 public으로 선언하였다면, 접근자(accessor)와 변경자(mutator)는 필요없다.

이렇게 자주 사용되는 생성자를 언어에서 기본으로 제공하면, 좀 더 적은 분량의 상용구로도 동일한 기능을 수행할 수 있다. 예를 들어 스칼라로는 단 한 줄의 코드로 위의 자바 코드와 동일한 코드를 표현할 수 있다.

class Pet(var name: PetName, var owner: Person)

C#의 경우 컴파일러가 backing fields를 생성하는 Automatic Properties를 사용해 다음과 같이 간단히 나타낼 수 있다.

public class Pet
{
 public PetName Name { get; set; }
 public Person Owner { get; set; }
}

HTML 
HTML에서는 다음의 상용구가 기본 탬플릿으로 대부분의 웹페이지에 포함되어 있다.
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title></title>
</head>
<body>

</body>
</html>

같이 보기 
 지시자 (프로그래밍)
 범용 매크로
 라이브러리
 메타 프로그래밍
 매크로
 전처리기
 템플릿 처리기
 웹 템플릿 처리기
 웹 템플릿 시스템

소스 코드