맨위로가기

상용구 코드

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

상용구 코드는 본질적으로 변경되지 않고 여러 곳에서 반복적으로 사용되는 코드 조각을 의미한다. 이 용어는 원래 신문 업계에서 유래되었으며, 인쇄 신디케이션을 통해 배포되는 기사의 반복적인 텍스트를 지칭하는 데 사용되었다. 프로그래밍에서 상용구 코드는 프로그램의 논리나 언어의 필수 구문은 아니지만, 관례적으로 소스 파일 시작 부분에 추가되는 선언이나 객체 지향 프로그래밍에서 인스턴스 변수를 가져오거나 설정하기 위한 메서드와 같이 반복적으로 나타나는 코드를 포함한다. HTML에서는 ``, `` 등의 태그가 상용구의 예시이다. 상용구 코드는 코드의 중복을 야기하고 가독성을 저해할 수 있으며, 이를 줄이기 위해 다양한 프로그래밍 언어와 프레임워크에서 자동화된 기능과 구문을 제공한다.

더 읽어볼만한 페이지

  • 소스 코드 - 헤더 파일
    헤더 파일은 프로그래밍 언어에서 코드 재사용성, 모듈화, 컴파일 시간 단축에 기여하며 함수 프로토타입, 변수 선언 등을 포함하고 `#include` 지시어로 소스 코드에 포함되어 사용되는 파일이다.
  • 소스 코드 - 헝가리안 표기법
    헝가리안 표기법은 변수 이름에 데이터 타입이나 목적을 나타내는 접두사를 붙이는 명명 규칙으로, 찰스 시모니가 고안하여 마이크로소프트에서 널리 사용되었으나, 코드 가독성 향상에 대한 유용성 논란과 함께 최신 IDE 환경에서는 불필요하다는 비판도 있다.
상용구 코드
일반 정보
명칭상용구 코드
다른 이름보일러플레이트 코드
정형 코드
용도여러 곳에서 거의 또는 전혀 변경 없이 사용되는 코드
특징반복적인 코드 패턴
사용 이유개발 시간 단축, 코드 재사용성 증진
예시클래스 정의
함수 정의
반복적인 설정 코드
프로그래밍 언어자바
C
C++
스위프트
델파이
파이썬
관련 개념디자인 패턴
코드 생성
장점코드의 일관성 유지
개발 속도 향상
코드의 가독성 향상
단점코드의 양 증가
유지보수 어려움
유연성 저하 가능성
일본어
일본어 명칭ボイラープレートコード (Boira-purēto kōdo)
영어
영어 명칭Boilerplate code

2. 역사

이 용어는 신문 업계에서 유래했다. 인쇄 신디케이트에서 배포하는 칼럼 및 기타 기사는 준비된 인쇄판 형태로 구독 신문에 전송되었다. 보일러 제작에 사용되는 금속판과 유사하여 "보일러 플레이트"라고 불렸고, 결과적인 텍스트는 "상용구 텍스트"가 되었다. 보일러 플레이트에서 배포되는 기사는 일반적으로 "진지한" 뉴스가 아닌 "채움" 기사였기 때문에 이 용어는 독창적이지 않고 반복적인 텍스트와 동의어가 되었다.[2][3]

관련 용어는 데이터 구조를 업데이트하거나 프로그램의 보조 측면을 처리하기 위해 비즈니스 로직의 일부가 아니지만 함께 사용되는 코드를 지칭하는 ''장부 코드''이다.

3. 프로그래밍에서의 상용구

상용구 코드는 프로그램 논리나 언어의 필수 구문은 아니지만, 관례적으로 사용되는 코드를 의미한다.

의 예시

```perl

#!/usr/bin/perl

use warnings;

use strict;

```

C/C++ 프로그래밍 언어의 `#include` 가드의 예시

```cpp

#ifndef MYINTERFACE_H

#define MYINTERFACE_H

...

#endif

3. 1. Preamble (서문)

프로그램의 로직이나 언어의 필수 구문은 아니지만, 관례적으로 소스 파일 시작 부분에 추가되는 선언들을 상용구의 예로 들 수 있다.

다음 예제는 이러한 상용구를 보여준다.

```perl

#!/usr/bin/perl

use warnings;

use strict;

```

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

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

```cpp

#ifndef _MYINTERFACE_H

#define _MYINTERFACE_H

...

#endif

```

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

3. 2. 객체 지향 프로그래밍

객체 지향 프로그래밍에서는 인스턴스 변수를 가져오거나 설정하기 위한 메소드(접근자(accessor)와 변경자(mutator))를 제공하는 경우가 많다. 이러한 메소드 정의는 상용구로 볼 수 있다. 클래스에 따라 코드가 다를 수 있지만, 구조가 동일하기에 직접 작성하기 보다는 자동으로 생성하는 것이 더 낫다.

예를 들어 다음의 자바 클래스는 애완 동물을 표현하고 있는데, ''Pet'', ''name'', ''owner''에 대한 선언을 제외하면 대부분이 상용구이다.

```java

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)는 필요없다.

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

```scala

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

```

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

```csharp

public class Pet

{

public PetName Name { get; set; }

public Person Owner { get; set; }

}

```

자바 프로그램에서, DTO 클래스는 종종 인스턴스 변수를 가져오고 설정하는 메서드를 제공한다. 이러한 메서드의 정의는 빈번하게 상용구로 간주될 수 있다. Java 14에서는 이 문제를 해결하기 위해 레코드 클래스가 추가되었다.[4][5][6]

상용구 코드의 양을 줄이기 위해 Lombok for Java와 같은 많은 프레임워크가 개발되었다.[7] 아래의 코드는 자바 어노테이션을 사용하여 Lombok에 의해 자동으로 생성되는데, 이는 메타프로그래밍의 한 형태이다.

```java

@AllArgsConstructor

@Getter

@Setter

public class Pet {

private String name;

private Person owner;

}

```

C# 9.0부터는 레코드를 사용하여 속성이 자동으로 생성되는 클래스를 만들 수 있다.

```csharp

public record Pet(string Name, Person Owner);

```

선언 외에도, 객체 지향 프로그래밍(OOP) 언어의 메서드 또한 상용구 코드의 양에 기여한다. 2015년 인기 있는 Java 프로젝트에 대한 연구에 따르면 메서드의 60%는 토큰의 4.6% 발생으로 고유하게 식별될 수 있으며, 나머지 95.4%는 논리와 관련이 없는 상용구 코드이다. 연구자들은 이 결과가 일반적으로 절차적 언어의 서브루틴으로도 이어질 것이라고 믿고 있다.[8]

3. 3. HTML



테스트









```

WHATWG HTML Living Standard는 ``, ``, `` 태그를 대부분의 경우 안전하게 생략할 수 있다고 정의한다.[9] `` 태그는 문자 인코딩을 HTTP 헤더로 전송하도록 구성된 웹 서버에서 직접 제공되는 경우 기술적으로 중복되지만, HTML 응답이 `.html` 파일, 캐시, 웹 아카이브에 저장될 때 유용해진다.[10] 구글의 HTML/CSS 스타일 가이드에서는 모든 선택적 태그를 생략하여 상용구를 훨씬 줄이는 것을 권장한다.[11] 월드 와이드 웹 컨소시엄은 `` 요소가 비어 있으면 안 된다고 명시한다.<sup class="ref"><a href="#ref-12" />[12]</a></sup><br /><br />```html<br /><br /><!DOCTYPE html><br /><br /><title>테스트

3. 4. 파이썬 (Python)

파이썬에서 사용하는 상용구 코드는 모듈 컨텍스트 내부 또는 외부에서만 실행되도록 수정하는 데 사용된다.[1]

```python

if __name__ == '__main__':

# 여기에 배치된 내용은 모듈 컨텍스트에서는 절대 실행되지 않는다.

pass

if __name__ != '__main__':

# 여기에 배치된 내용은 모듈 컨텍스트에서만 실행된다.

pass

참조

[1] 서적 Proceedings of the 2003 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation ACM 2003
[2] 웹사이트 Boilerplate https://www.dictiona[...] 2018-01-27
[3] 웹사이트 Boilerplate https://www.merriam-[...] 2018-01-27
[4] 웹사이트 Record Classes https://docs.oracle.[...]
[5] 웹사이트 JEP 395: Record https://openjdk.org/[...]
[6] 웹사이트 Records Come to Java https://blogs.oracle[...] 2020-11-01
[7] 웹사이트 Lombok reduces your boilerplate code https://dzone.com/ar[...] 2017-08-02
[8] 간행물 On the Lexical Distinguishability of Source Code [was: A Study of "Wheat" and "Chaff" in Source Code] 2015-02-05
[9] 웹사이트 HTML Standard - The HTML syntax - Optional tags https://html.spec.wh[...] 2017-05-05
[10] 웹사이트 Is the charset meta tag required with HTML5? https://stackoverflo[...] 2017-05-05
[11] 웹사이트 Google HTML/CSS Style Guide https://google.githu[...] 2017-05-05
[12] 웹사이트 HTML page has non-empty title https://www.w3.org/W[...] 2021-07-22
[13] 서적 Proceedings of the 2003 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation ACM 2003
[14] 웹사이트 Boilerplate https://www.dictiona[...] 2018-01-27
[15] 웹사이트 Boilerplate https://www.merriam-[...] 2018-01-27
[16] 웹사이트 Lombok reduces your boilerplate code https://dzone.com/ar[...] 2017-08-02
[17] 간행물 On the Lexical Distinguishability of Source Code [was: A Study of "Wheat" and "Chaff" in Source Code] 2015-02-05
[18] 웹사이트 HTML Standard - The HTML syntax - Optional tags https://html.spec.wh[...] 2017-05-05
[19] 웹사이트 Is the charset meta tag required with HTML5? https://stackoverflo[...] 2017-05-05
[20] 웹사이트 Google HTML/CSS Style Guide https://google.githu[...] 2017-05-05



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com