readValue()Jackson에서 JSON을 DTO 클래스(POJO)에 매핑할 때 사용String json = "{ \"id\": 1, \"name\": \"Alice\", \"age\": 28 }";ObjectMapper mapper = new ObjectMapper();User user = mapper.readValue(json, User.class);convertValue()JsonNode를 POJO 또는 Map/Collection으로 변환하는 메서드JsonNode node = mapper.readTree(json);User user = mapper.convertValue(node, User.class);Jackson 내부적으로는:JsonNode를 중간에 직렬화(serialization) → J..
Jackson의 3가지 JSON 처리 모델모델특징장점단점Streaming API빠른 처리, 메모리 효율가장 빠름, 대용량 데이터에 적합사용법이 복잡하고 직관적이지 않음Tree Model유연한 구조 탐색 가능구조가 복잡하거나 동적일 때 유용전체 JSON을 메모리에 올려야 함Data Binding자바 객체 ↔ JSON 자동 매핑가장 사용하기 쉬움속도는 스트리밍보다 느림Streaming API (스트림 기반 처리)Streaming API는 Jackson에서 가장 저수준이며, 빠르고 메모리 효율적입니다. JSON을 한 줄씩 읽고 쓰는 방식 (JsonParser, JsonGenerator)으로 동작스트리밍 방식(Forward-only 방식)을 사용하면 메모리 사용량이 적습니다. 대용량 JSON 처리에 적합pull..
무한대 크기 지원: long 범위(±9경)를 넘는 정수도 표현 가능이론적으로 메모리가 허용하는 한 무한대에 가까운 숫자까지 표현불변 객체(Immutable): 기존 값을 바꾸지 않고 항상 새로운 객체를 반환정수 연산 지원: 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지, 거듭제곱, GCD 등 다양한 연산 지원java.math 패키지에 포함import java.math.BigInteger;public class Main { public static void main(String[] args) { BigInteger big1 = new BigInteger("9223372036854775808"); // long 범위 넘어선 수 BigInteger big2 = new BigInteger(..
BigDecimal은 Java에서 정밀한 소수 계산이 필요할 때 사용하는 클래스float나 double 타입은 부동소수점 오차가 있어서 정확한 소수 계산이 필요할 때는 적합하지 않다.import java.math.BigDecimal;public class Main { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("10.25"); BigDecimal num2 = new BigDecimal("3.1"); // 덧셈 BigDecimal sum = num1.add(num2); // 나눗셈 (소수점 자릿수 지정 필요) BigDecimal resul..

고수준 모듈(High-level Module)은 저수준 모듈(Low-level Module)에 의존해서는 안 된다. 둘 다 추상화(인터페이스 또는 추상 클래스)에 의존해야 한다. DIP를 위반한 코드 (Bad Code)class EmailNotification { void sendEmail(String message) { System.out.println("이메일 전송: " + message); }}class NotificationService { private EmailNotification emailNotification = new EmailNotification(); void notifyUser(String message) { emailNotificat..
Bounded Wildcard (? extends T, ? super T)제네릭의 타입 파라미터를 특정 범위로 제한하는 기능와일드카드(?)를 사용하면 다양한 타입을 허용할 수 있지만, 어떤 타입까지 허용할지를 제어하기 위해 extends 또는 super를 사용? extends T (상한 제한, Upper Bounded Wildcard)import java.util.List;import java.util.ArrayList;class Animal { void sound() { System.out.println("동물이 소리를 냅니다."); }}class Dog extends Animal { void sound() { System.out.println("멍멍!"); ..
Java에서 데이터 타입을 일반화하여 다양한 타입을 하나의 코드로 처리할 수 있도록 해주는 기능컴파일 시 타입을 체크하면서도, 다양한 데이터 타입을 유연하게 사용할 수 있도록도와줍니다.제네릭 사용 방법import java.util.ArrayList;public class WithGeneric { public static void main(String[] args) { ArrayList list = new ArrayList(); // 타입 지정 list.add("Hello"); // list.add(123); // 컴파일 오류 발생 (잘못된 타입) String str = list.get(0); // 형 변환 필요 없음 System.out...
try-with-resourcesJava 7에서 도입된 기능으로, AutoCloseable 인터페이스를 구현한 리소스를 사용한 후 자동으로 닫아주는 기능을 제공합니다. 주로 파일, 소켓, 데이터베이스 연결 등과 같은 외부 리소스를 사용할 때 유용합니다.import java.io.BufferedReader;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class MultiResourceExample { public static void main(String[] args) { try ( BufferedReader br = new BufferedReader(new F..
@JsonPropertyJSON 데이터의 필드 이름과 Java 객체의 필드 이름이 다를 때 매핑을 도와줍니다.주로 직렬화(Serialization, Java 객체 → JSON) 및 역직렬화(Deserialization, JSON → Java 객체) 시 사용됩니다.import com.fasterxml.jackson.annotation.JsonProperty;public class User { @JsonProperty("user_name") // JSON에서 "user_name"을 Java 객체에서 name 필드에 매핑 private String name; @JsonProperty("user_age") // JSON에서 "user_age"를 Java 객체에서 age 필드에 매핑 ..