보일러플레이트

원래 보일러플레이트는 19세기에 증기 보일러를 만들때 틀로 사용하는 강철판을 의미했다. 보일러플레이트에는 보일러 이름 등의 제조 정보가 음각으로 새겨져 있어서 보일러플레이트를 통과한 강철판에는 보일러 이름 등이 새겨지게 되었다. 이게 인쇄 분야로 이어져서 반복해서 사용하는 텍스트(주로 광고나 로고)를 의미하게 되었다.

몇 번을 찍어도 똑같이 찍히기 때문에 편집자나 작가들은 천편일률적인 작품이나 글을 비판할때 이 용어를 사용하기 시작하였다.

이 단어는 컴퓨터 프로그래밍 분야에도 사용하게 되었다. 컴퓨터 프로그래밍에서 보일러플레이트 코드(혹은 그냥 보일러플레이트)는 변화없이 여러 군데에서 반복되는 코드를 말한다. 주로 옛날에 만들어진 언어에서 많이 나타나는데, 프로그래머는 사소한 기능 하나 만드는데도 수 많은 코드를 작성해야 한다.

Java의 예를 들자면 속성으로 name, company를 가진 User라는 클래스를 하나 만든다고 하면 아래와 같은 코드가 만들어진다.

public class User {
    private String name;
    private String company;

    public Pet(String name, String company) {
        this.name = name;
        this.company = company;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getcompany() {
        return company;
    }

    public void setcompany(String company) {
        this.company = company;
    }
}

단순히 클래스 하나 만드는데 getter, setter가 모두 정의되어야 한다. 언어가 발전할수록 이런 보일러플레이트 코드가 없어지는데 Java를 염두에 두고 만들어진, 그리고 언어 자체 측면만 비교하면 Java보다 낫다고 평가를 받는 C#을 보면 위의 보일러플레이트는 아래와 같이 표현할 수 있다.

public class User
{
    public string Name { get; set; }
    public string Company { get; set; }
}

이렇게 보면 보일러플레이트 코드가 없어져야할 악의 축인것 같지만, 실제로 코딩할 때에는 수시로 보일러플레이트 코드를 사용한다. Nest.js를 개발한다면 어떤 모듈에 서비스를 만들거나 컨트롤러를 수 없이 만들어야 한다. 예를 들어 user의 서비스를 만든다면 Nest CLI로 아래와 같이 입력하면 된다.

$ nest g service user

그러면 user 디렉토리에 userService.ts, userService.spec.ts 파일이 생기며 각각의 파일에는 아래와 같은 코드가 생성된다.

// userService.ts
import { Injectable } from "@nestjs/common";

@Injectable()
export class MoveService {}
// userService.spec.ts
import { Test, TestingModule } from "@nestjs/testing";
import { MoveService } from "./move.service";

describe("MoveService", () => {
  let service: MoveService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [MoveService],
    }).compile();

    service = module.get<MoveService>(MoveService);
  });

  it("should be defined", () => {
    expect(service).toBeDefined();
  });
});

이런 코드는 서비스를 만들기 위해서 가장 기본적인 틀이 되며 최소한의 변경으로 재사용할 수 있다. 이런 코드 역시 보일러플레이트 코드라고 한다.