티스토리 뷰
Java에서 boolean 타입의 필드를 다룰 때 발생할 수 있는, 예상치 못한 문제와 그 해결 방법에 대해 이야기하고자 합니다. 필드 이름이 “is”로 시작할 경우 발생하는 getter와 setter 관련 문제를 중점적으로 다룰 예정입니다.
문제 상황
Java에서는 boolean 타입의 변수에 대한 getter 메소드를 is로 시작하는 이름으로 정의하는 것이 일반적입니다. 예를 들어, active라는 boolean 필드에 대해서는 isActive()라는 메소드를 사용하곤 합니다. 이는 JavaBeans 명세에서도 권장하는 방법입니다. 그런데, 문제는 필드 이름 자체가 isActive, isEnabled 같이 이미 ‘is’로 시작하는 경우가 종종 있다는 것입니다. 이 경우, Java의 일반적인 규칙에 따라 isIsActive(), isIsEnabled()와 같은 형태로 getter 메소드를 기대하게 되는데, 이는 분명 직관적이지 않습니다.
이런 문제는 특히 JSON이나 XML로 객체를 직렬화할 때, 또는 ORM 라이브러리를 사용할 때 자주 발생합니다. 객체의 필드를 자동으로 JSON 필드로 매핑하거나 데이터베이스 테이블에 매핑할 때, 이러한 규칙 때문에 예상치 못한 동작이 발생할 수 있습니다. 실제로 API로 isActive 값을 내려줬을 때, 예상했던 "is" 필드 이름이 아닌 active가 내려왔습니다.
원인 분석
이 문제의 원인은 JavaBeans 명세에서 boolean 필드의 getter가 ‘is’ 접두사를 사용하도록 규정하고 있기 때문입니다. 많은 Java 기반의 프레임워크와 라이브러리는 이 규칙을 따르며, 리플렉션을 통해 메소드 이름을 분석하고 객체를 자동으로 만들어 내곤 합니다. 따라서, 필드 이름이 ‘is’로 시작하는 경우, 이러한 프레임워크나 라이브러리가 올바른 getter나 setter 메소드를 찾지 못하고, 데이터 바인딩에 실패할 수 있습니다.
해결 방법
1. 필드명 변경
가장 간단하고 확실한 해결 방법은 ‘is’로 시작하는 필드 이름을 사용하지 않는 것입니다. 예를 들어, isBoolean 대신 booleanValue나 booleanFlag와 같이 명확하고 혼동이 없는 이름을 사용합니다.
2. 명시적 Getter/Setter 정의 (비추천)
만약 필드 이름을 변경할 수 없는 상황이라면, getter와 setter 메소드를 명시적으로 정의해야 합니다. 이를 통해 프레임워크나 라이브러리가 올바르게 메소드를 인식할 수 있도록 해야 합니다. 일관성과 가독성 측면에서 사용을 지양해야합니다.
public class BooleanExample {
private boolean isBoolean;
public boolean getIsBoolean() {
return isBoolean;
}
public void setIsBoolean(boolean isBoolean) {
this.isBoolean = isBoolean;
}
}
3. 직렬화 어노테이션 사용
Jackson 같은 라이브러리를 사용할 때는 @JsonProperty 어노테이션을 활용하여 직렬화될 때 사용될 필드명을 직접 지정할 수 있습니다. 이 방법은 필드명과 메소드명 사이의 불일치를 해결하는 데 유용합니다.
public class BooleanExample {
@JsonProperty("isBoolean")
private boolean isBoolean;
public boolean isBoolean() {
return isBoolean;
}
public void setBoolean(boolean isBoolean) {
this.isBoolean = isBoolean;
}
}
마무리
이렇게 해서, boolean 필드명이 ‘is’로 시작할 때 발생할 수 있는 문제와 그 해결 방법에 대해 알아보았습니다. 이 포스트가 비슷한 문제를 겪고 계신 분들에게 도움이 되기를 바랍니다.

- Total
- Today
- Yesterday
- db성능개선
- SQL
- readtracker
- Ai
- db
- 페이지네이션
- grammarly
- 데이터베이스삭제
- 데이터베이스
- 개발
- 디스크사용량
- 개발자면접
- 개발지식
- 진행률
- 쿼리튜닝
- read-tracker
- 개발자
- NoSQL
- 크롬
- setter
- 역직렬화
- keyset
- 쿼리최적화
- 개발기
- 인덱스
- 확장프로그램
- 쿼리
- vimium
- 삭제쿼리
- 기술면접
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |