Boolean 객체의 사용법

등록일: 2014. 08. 11

자바 코딩, 이럴 땐 이렇게: PMD로 배우는 올바른 자바 코딩 방법

  • 배병선 지음
  • 426쪽
  • 28,000원
  • 2014년 05월 28일

Boolean 객체를 사용할 때 Boolean 객체를 인스턴스화하는 것은 불필요한 작업이다. 이 객체는 Integer나 Float 등과는 달리 실제로 가질 수 있는 값이 true 또는 false밖에 없으며, 이미 이 값이 Boolean 객체 내에 정의돼 있으므로 예제 1.9.1과 같이 new Boolean을 통해 객체를 인스턴스화하거나 valueOf( ) 메서드를 사용할 필요가 없다.

예제 1.9.1 잘못된 Boolean 객체 사용법

package com.software.basic.problem;

public class BooleanExample {
    // 불필요한 Boolean 객체를 생성한 예
    public static void main(String[] args) {
        Boolean bool = new Boolean(true);
    }
}

문제점 진단

예제 1.9.1과 같은 불필요한 Boolean 객체 생성을 방지하기 위해 PMD에서 제공하는 BooleanInstantiation 룰은 이런 문제점을 진단하고 그림 1.9.1과 같이 권고한다.

figure1-9-1
그림 1.9.1 BooleanInstantiation 룰로 진단한 결과

해결 방안

불변 객체인 Boolean 객체는 불필요한 인스턴스화를 방지하기 위해 static 필드로 TRUE와 FALSE를 포함하고 있으며, 예제 1.9.2와 같은 식으로 불필요한 인스턴스의 생성을 방지할 수 있다.

예제 1.9.2 올바른 Boolean 객체 사용법

package com.software.basic.solution;

public class BooleanExample {
    // Boolean 객체를 올바르게 사용하는 예
    public static void main(String[] args) {
        //Boolean bool = new Boolean(true);
        Boolean bool = Boolean.TRUE;
        //Boolean bool2 = Boolean.valueOf(false);
        Boolean bool2 = Boolean.FALSE;
    }
}
박싱과 언박싱

자바의 타입은 int, float, double, char, boolean과 같은 기본 자료형(primitive type)을 기반으로 만들어진다. 아울러 이러한 기본 자료형을 객체로 감싼 Integer, Float, Double, Boolean과 같은 박스화한 기본 자료형(boxed primitive type)도 자주 사용된다. 이때 기본 자료형에서 박스화된 기본 자료형으로 변환하는 과정을 박싱(Boxing), 반대로 박스화된 기본 자료형을 기본 자료형으로 변환하는 것을 언박싱(Unboxing)이라 한다. 자바 1.5 이상에서는 이런 형변환이 자동으로 이뤄지므로 개발자가 쉽게 사용할 수 있지만, 반복문에서 박스화된 기본 자료형을 사용할 때는 조심해야 한다L. ist와 Map으로 잘 알려진 컬렉션에서는 객체만을 받아들일 수 있으므로 기본 자료형이 아닌 박스화된 기본 자료형만을 사용할 수 있다. 예를 들어, List를 사용할 때, List<Integer>와 같이 객체화된 자료형은 사용할 수 있지만, List<int>처럼 객체가 아닌 기본 자료형은 사용할 수 없다.