보일러 플레이트 코드
Boilerplate code컴퓨터 프로그래밍에서 보일러 플레이트 코드 또는 단순히 보일러 플레이트는 거의 또는 전혀 변화하지 않고 여러 곳에서 반복되는 코드 섹션입니다.상세하다고 생각되는 언어를 사용하는 경우 프로그래머는 사소한 [1]기능만을 수행하기 위해 많은 보일러 플레이트 코드를 작성해야 합니다.
보일러 플레이트의 필요성은 메타프로그래밍(컴퓨터가 필요한 보일러 플레이트의 코드를 자동으로 작성하거나 컴파일 시에 삽입하도록 함), 구성에 대한 규칙(디폴트값이 양호하여 모든 프로젝트에서 프로그램 세부사항을 지정할 필요가 감소함) 및 모델 구동 엔진과 같은 고급 메커니즘을 통해 줄일 수 있습니다.(모델과 모델 투 코드 제너레이터를 사용하여 수동 보일러 플레이트 코드가 필요 없음)
기원.
그 용어는 신문 사업에서 생겨났다.신문사에서 배포한 칼럼 등은 준비된 인쇄판 형태로 구독신문에 발송됐다.보일러 제조에 사용되는 금속판과 유사하기 때문에 "보일러 플레이트"로 알려지게 되었고, 그 결과 "보일러 플레이트 텍스트"로 알려지게 되었습니다.보일러 판에 의해 배포되는 이야기는 보통 "심각한" 뉴스라기보다는 "채우는 것"이었기 때문에, 이 용어는 독창적이지 않고 반복되는 [2][3]텍스트와 동의어가 되었다.
관련 용어는 부기 코드이며, 비즈니스 로직의 일부가 아니지만 데이터 구조를 최신 상태로 유지하거나 프로그램의 2차적인 측면을 처리하기 위해 코드와 인터리브되는 코드를 말합니다.
프리암블
보일러 플레이트의 한 형태는 프로그램 로직이나 언어의 기본 구문의 일부는 아니지만 관례에 따라 소스 파일의 시작 부분에 추가되는 선언으로 구성됩니다.다음 Perl의 예는 보일러 플레이트를 나타내고 있습니다.
#!/usr/bin/module 사용하다 경고.; 사용하다 엄격한.;
첫 번째 행은 shebang으로, 파일을 Unix/Linux 시스템의 명령줄에서 직접 실행할 수 있는 Perl 스크립트로 식별합니다.다른 두 가지는 경고와 엄격한 모드를 켜는 플러그마입니다.이것은 패셔너블한 Perl 프로그래밍 스타일에 의해 필수적입니다.
다음 예는 C/C++ 프로그래밍 언어 보일러 플레이트, 가드입니다.
#ifndef MYINTERFACE_H #정의 MYINTERFACE_H ... #엔디프
그러면 myinterface.h 파일이 이미 포함되어 있는지 여부를 컴파일러에 알리기 위한 글로벌플래그가 체크되고 설정됩니다.모듈 컴파일에는 많은 상호의존 파일이 관련되어 있기 때문에 동일한 헤더를 여러 번 처리하는 것을 피할 수 있습니다(같은 이름의 정의가 여러 개 있기 때문에 오류가 발생합니다).
객체 지향 프로그래밍에서
객체 지향 프로그램에서 클래스는 인스턴스 변수를 가져오고 설정하는 메서드와 함께 제공되는 경우가 많습니다.이러한 방법의 정의는 종종 보일러 플레이트로 간주될 수 있다.코드는 클래스마다 다르겠지만 손으로 쓰는 것보다 자동으로 생성되는 것이 훨씬 더 좋은 구조입니다.예를 들어 애완동물을 나타내는 다음 Java 클래스에서는 Pet, name 및 owner 선언을 제외한 거의 모든 코드가 보일러 플레이트입니다.
자바
일반의 학급 애완동물 { 사적인 스트링 이름.; 사적인 사람인 주인; 일반의 애완동물(스트링 이름., 사람인 주인) { 이것..이름. = 이름.; 이것..주인 = 주인; } 일반의 스트링 getName() { 돌아가다 이름.; } 일반의 무효 setName(스트링 이름.) { 이것..이름. = 이름.; } 일반의 사람인 소유자 취득() { 돌아가다 주인; } 일반의 무효 set Owner(설정 소유자)(사람인 주인) { 이것..주인 = 주인; } }
이 예에서 대부분의 보일러 플레이트는 캡슐화를 제공하기 위해 존재합니다.변수 이름과 소유자가 public으로 선언된 경우 접근자 및 변환자 메서드는 필요하지 않습니다.
보일러 플레이트의 양을 줄이기 위해 Lombok for Java [4]등 많은 프레임워크가 개발되었습니다.위와 같은 코드는 Lombok에서 Java 주석을 사용하여 자동으로 생성됩니다. 이는 메타프로그래밍의 한 형태입니다.
@AllArgsConstructor @게터 @설정자 일반의 학급 애완동물 { 사적인 스트링 이름.; 사적인 사람인 주인; }
스칼라
일부 다른 프로그래밍 언어에서는 언어가 이러한 공통 구조를 기본적으로 지원할 때 더 적은 보일러 플레이트로 동일한 작업을 수행할 수 있습니다.예를 들어 위의 Java 코드와 동등한 것을 Scala로 표현할 수 있습니다.코드의 행은 다음과 같습니다.
사례. 학급 애완동물(변화하다 이름.: 스트링, 변화하다 주인: 사람인)
C#
또는 C#에서는 컴파일러가 생성한 backing 필드와 함께 Automatic Properties를 사용합니다.
일반의 학급 애완동물 { 일반의 스트링 이름. { 얻다; 세트; } 일반의 사람인 주인 { 얻다; 세트; } }
C# 9.0부터는 Properties를 가진 클래스를 자동으로 생성하는 Records를 사용할 수 있습니다.
일반의 기록. 애완동물(스트링 이름., 사람인 주인);
방법 보일러 플레이트
선언과 더불어 OOP 언어로 된 방법도 보일러 플레이트의 양에 기여합니다.2015년 인기 Java 프로젝트에 대한 연구에 따르면 60%의 방법은 토큰의 4.6% 발생으로 고유하게 식별될 수 있으며 나머지 95.4%의 보일러판은 논리와 무관합니다.연구진은 이 결과가 일반적으로 [5]절차적 언어로 서브루틴으로 변환될 것이라고 믿고 있다.
HTML
HTML에서는 다음 보일러 플레이트가 기본 빈 템플릿으로 사용되며 대부분의 웹 페이지에 있습니다.
<!DO3}PE html> <blang="en"> <head> <blang> <blang> <blang> "en"> <block charset="UTF-8"/> <제목>테스트 </title> </head> </body> </html>
WHATWG HTML Living Standard는 다음과 같이 정의하고 있습니다.<html>
,<head>
그리고.<body>
태그는 대부분의 [6]상황에서 안전하게 생략할 수 있습니다.그<meta charset="UTF-8">
HTTP 헤더로 문자 인코딩을 송신하도록 설정되어 있는 Web 서버로부터 직접 착신하는 경우, 태그는 기술적으로 용장합니다만, HTML 응답이 Web 서버에 보존되어 있는 경우는 편리합니다..html
파일,[7] 캐시 또는 웹 아카이브입니다.Google의 HTML/CSS 스타일 가이드에서는 모든 옵션 태그를 [8]생략할 것을 권장하고 있으며, 결과적으로 상용판이 훨씬 더 적게 생성됩니다.World Wide Web Consortium은 다음과 같은 요소를 언급하고 있습니다.<title>
비워 [9]둘 수 없습니다.
<!DO3}PE html> <제목>테스트 </title>
「 」를 참조해 주세요.
- Directive (프로그래밍)– 컴파일러의 입력 처리 방법을 지정하는 언어 구성
- 범용 매크로 프로세서– 특정 언어 또는 소프트웨어에 얽매이지 않거나 통합되지 않은 매크로 프로세서입니다.
- "Hello, World!" 프로그램– 기존 초보자용 컴퓨터 프로그램
- 라이브러리(컴퓨팅)– 컴퓨터 프로그램에서 사용되는 비휘발성 자원 수집
- 매크로(컴퓨터 사이언스)– 컴퓨터 프로그래밍에서 세트 입력을 세트 출력으로 대체하는 규칙
- 프리프로세서– 다른 프로그램의 입력을 처리하는 프로그램
- 발판(프로그래밍)– 코드 생성 기법 또는 프로젝트 생성 기법
- 단편(프로그래밍) – 재사용 가능한 소스 코드, 기계 코드 또는 텍스트의 작은 영역
- 템플릿 프로세서– 템플릿과 데이터 모델을 조합하여 결과 문서를 작성하도록 설계된 소프트웨어
- 웹 템플릿 시스템– 웹 퍼블리싱 시스템
레퍼런스
- ^ Lämmel, Ralf; Jones, Simon Peyton (2003). "Scrap your boilerplate: a practical design pattern for generic programming". Proceedings of the 2003 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation. TLDI '03. New York: ACM. pp. 26–37. doi:10.1145/604174.604179. ISBN 9781581136494. S2CID 9472305.
- ^ "Boilerplate". Dictionary.com. Retrieved 2018-01-27.
- ^ "Boilerplate". Merriam-Webster. Retrieved 2018-01-27.
- ^ Frankel, Nicolas (2009-12-07). "Lombok reduces your boilerplate code". DZone.com. Retrieved 2017-08-02.
- ^ Martin Velez; Dong Qiu; You Zhou; Earl T. Barr; Zhendong Su (5 Feb 2015). "On the Lexical Distinguishability of Source Code [was: A Study of "Wheat" and "Chaff" in Source Code]". arXiv:1502.01410 [cs].
- ^ "HTML Standard - The HTML syntax - Optional tags". WHATWG. 2017-05-05. Retrieved 2017-05-05.
- ^ "Is the charset meta tag required with HTML5?". stackoverflow.com. Retrieved 2017-05-05.
- ^ "Google HTML/CSS Style Guide". google.github.io. Retrieved 2017-05-05.
- ^ "HTML page has non-empty title". www.w3.org. Retrieved 22 July 2021.