Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) Jackson에서 JsonFactory 설정을 조회하는 방법

Jackson 라이브러리의 JsonFactory 클래스는 스레드에 안전(thread-safe)하며, writer와 reader 인스턴스를 생성하는 역할을 담당합니다.

JsonFactory에서 켜거나 끌 수 있는(on/off) 다양한 설정 목록은 JsonFactory.Feature라는 열거형(enum)에 정의되어 있습니다. 이 열거형에는 지정된 이름에 해당하는 열거형 상수를 반환하는 정적 메서드 values()가 포함되어 있어, 모든 기능 설정을 손쉽게 순회하며 확인할 수 있습니다.

문법(Syntax)

public static enum JsonFactory.Feature extends Enum<JsonFactory.Feature>

예제 코드

아래 예제는 JsonFactory 객체를 생성한 후, values() 메서드로 모든 Feature를 반복하면서 각 설정이 활성화되어 있는지 isEnabled() 메서드로 확인하는 방법을 보여줍니다.

import com.fasterxml.jackson.core.JsonFactory;

public class JsonFactorySettingsTest {
    public static void main(String[] args) {
        JsonFactory jsonFactory = new JsonFactory();
        for(JsonFactory.Feature feature : JsonFactory.Feature.values()) {
            boolean result = jsonFactory.isEnabled(feature);
            System.out.println(feature.name() + ":" + result);
        }
    }
}

실행 결과

INTERN_FIELD_NAMES:true
CANONICALIZE_FIELD_NAMES:true
FAIL_ON_SYMBOL_HASH_OVERFLOW:true
USE_THREAD_LOCAL_FOR_BUFFER_RECYCLING:true

주요 설정 항목 설명

  • INTERN_FIELD_NAMES: 필드 이름을 String Pool에 intern하여 메모리 사용량과 비교 성능을 최적화합니다.
  • CANONICALIZE_FIELD_NAMES: 자주 사용되는 필드 이름을 내부 해시 테이블로 캐싱하여 파싱 속도를 향상시킵니다.
  • FAIL_ON_SYMBOL_HASH_OVERFLOW: 심볼 테이블 해시 오버플로우 발생 시 예외를 던져 잠재적인 충돌 공격(hash collision attack)을 방지합니다.
  • USE_THREAD_LOCAL_FOR_BUFFER_RECYCLING: ThreadLocal을 활용해 버퍼를 재사용함으로써 GC 부담을 줄이고 성능을 개선합니다.

이처럼 JsonFactory.Feature 열거형을 활용하면 현재 팩토리에 적용된 모든 설정 값을 프로그래밍 방식으로 쉽게 조회할 수 있습니다.