보일러플레이트

거의 변경 없이 반복적으로 작성해야 하는 정형화된 코드를 뜻합니다.

비유

보일러플레이트의 어원:
19세기 신문사에서 반복 사용하는 기사 템플릿을 금속판(boilerplate)에 찍어 돌려 씀
→ "매번 똑같이 반복되는 것"이라는 의미로 확장
비유:
매번 편지를 쓸 때마다 반복하는 부분

┌──────────────────────────┐
│ 받는 사람: OOO 님         │ ← 보일러플레이트 (매번 동일한 형식)
│ 보내는 사람: △△△          │
│ 날짜: 2026.02.03         │
├──────────────────────────┤
│                          │
│ 실제 내용 ...             │ ← 진짜 전달하고 싶은 핵심
│                          │
├──────────────────────────┤
│ 감사합니다.               │ ← 보일러플레이트
│ △△△ 드림                 │
└──────────────────────────┘

Java에서의 대표적 보일러플레이트

단순히 데이터를 담는 클래스인데 이만큼 필요

public class Person {
    private String name;          // ──┐
    private int age;              //   │ 핵심: 필드 2개뿐
                                  // ──┘

    // ── 여기서부터 전부 보일러플레이트 ──

    public Person(String name, int age) {   // 생성자
        this.name = name;
        this.age = age;
    }

    public String getName() {               // getter
        return name;
    }

    public int getAge() {                   // getter
        return age;
    }

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

    public void setAge(int age) {           // setter
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {       // equals
        if (this == o) return true;
        if (!(o instanceof Person p)) return false;
        return age == p.age &&
               Objects.equals(name, p.name);
    }

    @Override
    public int hashCode() {                 // hashCode
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {              // toString
        return "Person{name=" + name + ", age=" + age + "}";
    }
}
핵심 코드:   2줄  (필드 선언)
보일러플레이트: 30줄+ (생성자, getter, setter, equals, hashCode, toString)

핵심 비율: ~6%

보일러플레이트를 줄이는 방법들

1. Lombok

@Data
@AllArgsConstructor
public class Person {
    private String name;
    private int age;
}
// 컴파일 시 getter, setter, equals, hashCode, toString, 생성자 자동 생성

2. record (Java 16+)

record Person(String name, int age) { }
// 불변 필드 + 생성자 + 접근자 + equals + hashCode + toString 자동 생성

3. 비교

방식코드량외부 의존성
직접 작성~35줄없음
Lombok~5줄Lombok 필요
record~1줄없음 (JDK 내장)

다른 언어의 보일러플레이트 비교

같은 기능을 각 언어로 작성

// Java — 보일러플레이트 많음
public class Person {
    private final String name;
    private final int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() { return name; }
    public int getAge() { return age; }
}
// Kotlin — data class로 해결
data class Person(val name: String, val age: Int)
# Python — dataclass로 해결
@dataclass
class Person:
    name: str
    age: int

보일러플레이트가 많으면 생기는 문제

문제설명
가독성 저하핵심 로직이 반복 코드에 묻힘
유지보수 어려움필드 하나 추가 시 생성자·getter·equals 등 전부 수정
실수 유발equals에서 새 필드 빠뜨리는 등 휴먼 에러
개발 속도 저하핵심이 아닌 코드 작성에 시간 소모
필드 하나 추가 시 수정해야 하는 곳:

직접 작성:  필드 선언, 생성자, getter, setter, equals, hashCode, toString
           → 7곳 수정

record:    record Person(String name, int age, String email) { }
           → 1곳 수정

핵심 정리

보일러플레이트는 핵심 로직과 무관하지만 반복적으로 작성해야 하는 정형화된 코드입니다. Java에서는 getter, setter, equals, hashCode, toString 등이 대표적이며, Lombok이나 record를 활용해 이를 제거할 수 있습니다. 보일러플레이트를 줄이면 핵심 로직에 집중할 수 있고, 필드 변경 시 수정 누락으로 인한 버그도 방지됩니다.

CSLOG에서 보기