보일러플레이트
거의 변경 없이 반복적으로 작성해야 하는 정형화된 코드를 뜻합니다.
비유
보일러플레이트의 어원:
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를 활용해 이를 제거할 수 있습니다. 보일러플레이트를 줄이면 핵심 로직에 집중할 수 있고, 필드 변경 시 수정 누락으로 인한 버그도 방지됩니다.