Java 35

[Java] static

개요2026.04.22-[Java] 접근 제어자에 이어서 오늘도 변수나 함수 앞에 위치할 수 있는 키워드 중 하나인 static에 대해서 알아보고자 한다. static'고정된'이라는 의미를 가지며, Java에서는 static 키워드를 사용해 static 변수와 static 메서드를 만들 수 있다. 정적 변수, 정적 메서드라고도 하는데 둘을 묶어 정적 멤버, 클래스 멤버라고 말하기도 한다. 정적 멤버는 객체가 아닌 클래스에 고정된 멤버로, 클래스 로더가 클래스를 메모리 영역에 적재할 때 클래스 별로 관리한다. 클래스 로딩이 끝나면 바로 사용할 수 있다. 정적 멤버 생성static 키워드로 생성된 정적 멤버는 Heap이 아닌 Static 영역에 할당된다. static 영역은 모든 객체가 공유하고 있어 ..

Java 2026.04.28

[Java] 접근 제어자

개요최근 Java 코드를 계속 유지보수하고 있는데, 정말 기본적인 public, private 외에는 접근 제어자 개념이 제대로 잡혀 있지 않아 프로그래밍할 때 애로사항이 있다. 이번 기회에 개념을 좀 잘 잡아보려고 한다. 접근 제어자접근 제어자란 클래스, 클래스 멤버(필드, 메서드, 생성자)에 대한 접근 법위를 제어하는 역할을 한다. 필드, 인터페이스를 다른 패키지에서 사용하지 못 하도록 하거나, 객체 생성, 메서드 호출을 제한함으로써 개발자가 의도하지 않은 동작을 방지하기 위해 사용한다. 접근 제어자 종류접근 제어자 자체는 private, protected, public이 존재하며, 만약 세 가지 모두 적용되어 있지 않으면 default가 적용된다.보통 private, protected, pub..

Java 2026.04.22

[Java] 가드 절 (Guard Clause)

개요업무에서 서비스 중인 Java 앱의 코드를 분석하다 보면 메서드 상단에 return 문이 위치하는 경우가 있다.public void process(Data data) { // 가드 절 if (data == null || !data.isValid()) return; // 핵심 로직 System.out.println("Processing...");}주로 짧은 문장이고 괄호 없이 작성되어있는데, 이것은 가드 절(Guard Clause)이라고 한다. 개인적으로는 중첩을 줄이기 위해 사용하게 되던 방식인데, 개념적으로 정리한 적은 없어서 기록해 둔다. 가드 절가드 절은 메서드 진입 시 전제 조건을 검사하고, 조건을 만족하지 않으면 즉시 반환하는 패턴이다. "가드(Guard)"라..

Java 2026.04.20

[Java] 라벨문(Labeled Statement)

개요Java를 break와 continue만으로 루프를 제어하던 중, 중첩 루프에서 원하는 위치로 한 번에 빠져나오지 못해 불필요한 플래그 변수를 쓴 적이 있었다. 이후 라벨문 개념을 다시 떠올리게 되었는데, 이중·삼중 반복문을 마주치는 상황은 생각보다 자주 오는 만큼 기억을 되살릴 겸 내용을 정리한다. 라벨문라벨문(Labeled Statement)은 특정 구문(주로 반복문)에 이름표(label)를 붙여, break 또는 continue가 어느 반복문을 대상으로 동작할지 명시적으로 지정하는 Java의 제어 흐름 문법이다. 일반 break/continue는 자신이 속한 가장 안쪽 반복문에만 영향을 주지만, 라벨문을 사용하면 중첩된 바깥쪽 반복문까지 직접 제어할 수 있다. Java 1.0부터 존재하는 문법..

Java 2026.04.16

[Java] 패턴 매칭

개요최근 Java 코드를 유지보수하고 개발하다 보니 패턴 매칭이라는 개념을 접하게 되었다. 처음에는 정규 표현식과 관련된 내용인가 했는데, 확인해 보니 전혀 다른 개념이라 정리 차원에서 짚고 간다. 패턴 매칭패턴 매칭은 Java 14에서 프리뷰 기능으로 처음 도입되어 Java 16에서 정식 기능으로 확정된 기능이다. 객체가 특정 타입인지 검사하면서 동시에 변수에 바인딩할 수 있게 해 주며, 기존의 타입 체크 + 캐스팅 패턴을 단순화할 수 있다. 기존에는 instanceof로 타입을 확인하더라도, 값을 활용하려면 명시적으로 형변환을 따로 수행해야 했다.Object obj = "Hello Java";if (obj instanceof String) { String s = (String) obj; //..

Java 2026.04.15

[Java] Jackson - ArrayNode 다루기

개요Jackson에서 다루는 JsonNode, ObjectNode는 기본적으로 단일 JSON 데이터를 취급한다. 하지만 JSON 데이터는 Array도 지원하고 있다. 때문에 이번 글에서는 Java에서 JSON Array를 다룰 때 사용하는 ArrayNode에 대해 알아본다. ArrayNodeArrayNode는 Jackson 라이브러리에서 JSON 배열([...])을 표현하는 클래스이다. ObjectNode와 동일하게 JsonNode의 자식 클래스이고, 불변성을 가진 JsonNode와 다르게 데이터의 추가와 수정이 가능하다. 사용법생성 및 요소 추가생성은 ObjectNode와 같이 ObjectMapper.createArrayNode를 사용하고, 값 추가는 add 함수를 사용한다.아래는 ArrayNod..

Java 2026.04.13

[Java] Jackson - ObjectNode 다루기

개요2026.04.08-[Java] Jackson - JsonNode 다루기에서 JSON 데이터를 다루기 위한 기본적인 클래스인 JsonNode에 대해 알아보았다. 하지만 JsonNode는 불변 객체로 값 수정을 할 수 없기 때문에 값을 수정하거나 추가하는 등의 작업을 수행하기에는 적합하지 않다. 이런 경우를 위해 Jackson은 ObjectNode라는 클래스를 제공한다.사용법을 알아보자. ObjectNodeJackson의 ObjecNode는 JSON 객체를 Java 코드 상에서 동적으로 생성, 수정, 삭제할 수 있는, 즉 변경 가능한(Mutable) JsonNode 하위 클래스다. 빈 ObjecNode를 생성하여 put, set과 같은 메서드로 키와 값을 추가할 수 있어 유영한 데이터 조작이 필요할 ..

Java 2026.04.10

[Java] Jackson - JsonNode 다루기

개요2026.04.07-[Java] Jackson - JSON 문자열을 Map으로 변환에서 JSON 문자열을 Java Map으로 변환하는 방법을 살펴봤는데, 이 방식에는 타입 안정성이 낮다는 한계점이 존재한다. 때문에 DTO(Data Transfer Object)를 생성하지 않고 데이터를 Java 객체로 변환할 때에는 일반적으로 좀 더 안정적인 JsonNode를 활용한다.이번 글에선 JsonNode에 대해서 알아보려고 한다. JsonNodeJackson이 제공하는 불변 추상 클래스로, JSON 데이터를 트리 구조로 다루기 위해 제공한다. DTO 정의 없이 유연하게 데이터에 접근하고, 복잡한 JSON 구조를 탐색하고 가공할 때 적합한다. 특징- 트리 기반 : JSON 데이터를 노드 단위로 표현하여 구조 ..

Java 2026.04.08

[Java] Jackson - JSON 문자열을 Map으로 변환

개요2026.04.06-[Java] Jackson - JSON 다루기에서 JSON 문자열과 Java 객체 간에 데이터 변환 수행 방법을 알아보았다. 다만 이 방법은 데이터 모델 클래스를 별도로 만들어주어야 한다는 번거로움이 있다. 클래스가 아니라 단순 Map으로 처리할 방법은 없을까? 정리해 둔다. JSON 문자열 -> MapJSON 문자열을 Map으로 변환하는 건 별도 클래스로 변환하는 것과 동일한 방식으로 처리할 수 있다.import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import java.util.Map;public class main { publ..

Java 2026.04.08

[Java] Jackson - JSON 다루기

JacksonJackson은 대표적인 Java JSON 라이브러리 중 하나로, Java 객체(POJO, Plain Old Java Object)를 JSON 형식의 데이터로 직렬화하거나 JSON 형식의 데이터를 Java 객체(POJO)로 역직렬화한다. 또한 JSON 뿐만 아니라 Avro, BSON, Smile, Properties 등 다양한 데이터 형식을 지원하기도 한다.현재는 2.x(com.fasterxml.jackson), 3.x(tools.jackson) 버전이 유지보수되고 있다. 2.x 버전 기준으로 Jackson은 세 개의 코어 모듈로 이루어져 있다.jackson-core : 스트리밍. 가장 낮은 수준의 입출력 처리를 지원하면 JsonParsor, JsonGenerator을 통해 코튼 단위로 데이..

Java 2026.04.07
1 2 3 4