본문 바로가기

java

(15)
[Java] Time에 관한 여러 클래스 정리 회사에서 작업하다가 Time에 관한 여러 클래스들이 여러가지 사용되어 있는 걸 봤다.이번 기회에 Time 관련된 클래스들 한번 정리하고 넘어가려고 한다. 1. Instant"절대 시점"을 UTC로 나타내는 가장 순수한 타입내부적으로 Epoch Time (1970-01-01T00:00:00Z 이후의 초)을 사용한다.항상 UTC 기준이다.타임존이 없다.Instant now = Instant.now(); // 2025-07-04T12:00:00Z장점: DB 저장용, 타임존 간 연산 시 기준점으로 사용할 수 있다.주의: 시간대 표시가 필요할 때는 변환해서 사용해야 한다.JVM 설정을 KST로 해두면 Instant 객체가 한국 시간 기반으로 될까 ?-> ✖️, Instant는 항상 UTC 기준 ! 영향을 받는 것..
[Spring] 단위 테스트 단위 테스트 ?  단위 테스트는 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지를 검사하는 테스트 기법이다. 버그 발견 시간이 늦어질수록 해결비용이 기하급수적으로 늘어나기때문에 단위 테스트를 통해 문제가 발생하는 부분을 빠르고 정확하게 확인하는 과정이 필요하다.  JUnit5  JUnit5는 자바 단위 테스트 프레임워크이다. 테스트 코드를 작성할 때 쓰이는 어노테이션들과 함수들을 몇개 정리해보려고 한다. 1. Befor / After test  각각의 테스트 코드가 실행되기 전이나 후에 실행되는 함수들이다.package com.sparta.junit5practice;import org.junit.jupiter.api.*;public class BeforeAfterTest { @BeforeEach ..
[Java] 배열 / 리스트 정렬 (sort) 배열 정렬import java.util.Collections;import java.util.Arrays;int[] arr = {5,2,1,3,4} 1) 오름차순 정렬Arrays.sort(arr); // {1,2,3,4,5} 2) 내림차순 정렬Arrays.sort(arr, Collections.reverseOrder()); // {5,4,3,2,1}    리스트 정렬 import java.util.Collections;import java.util.Arrays;Integer[] arr = {1,2,4,5,3};List intList = Arrays.asList(arr); 1) 오름차순 정렬Collections.sort(intList); // 1 2 3 4 5 2) 내림차순 정렬 Collections.sor..
[Java] 문자열 자르기 (split / substring) split특정 문자열을 기준으로 문자열을 자를 수 있다.String phoneNumber = "010-1234-5678"String[] arr = phoneNumber.split("-");//arr[0] = 010//arr[1] = 1234//arr[2] = 5678 특수 문자(. , | 등)를 사용하여 자를 땐 이스케이프 문을 붙여줘야한다.String phoneNumber = "010.1234.5678"String[] arr = phoneNumber.split("\\.");//arr[0] = 010//arr[1] = 1234//arr[2] = 5678   substring특정 인덱스 기준으로 문자열을 자를 수 있다. 문자열의 index는 앞에서부터 0으로 시작한다.String string = "문자열자..
[Spring 입문] 3 layer architecture / IoC와 DI 3 layer architecture가 필요한 이유 Controller 클래스 하나로 모든 API를 처리한다면, 한 개의 클래스에 너무 많은 양의 코드가 존재하기 때문에 코드를 이해하기 어렵고 코드의 추가 혹은 변경 요청이 계속 생길 수 있기에 역할을 분리해줄 필요가 있다. controller(출입문, 출구) ←→ service(사용자 요구사항 (logic) 처리) ←→ repository (DB 저장, 조회 필요할 때) 전체 흐름 Client ←(Request,Response)→ controller ←→ service ←→ repository ←→ DB  IoC와 DIIoC(설계원칙 = 제어의 역전 ), DI(디자인 패턴 = 의존성 주입 )   의존성 강하게 결합된 Consumer와 Chickenpub..
[Spring 입문] HTTP 데이터 객체로 처리하기 @ModelAttribute vs @RequestBody ControllerHTTP Sample RequestAnnotation생략@ModelAttributeOPOST http://localhost:8080/hello/request/form/modelHeaderContent type: application/x-www-form-urlencodedBodyname=Robbie&age=95@RequestBodyXPOSThttp://localhost:8080/hello/request/form/jsonHeaderContent type : application/jsonBody{"name":"Robbie","age":"95"}   POST @ModelAttribute  예시 코드// [Request sample] ..
[Spring 입문] Request : Path Variable / Request Param Request Client에서 서버로 HTTP 요청을 보낼 때 데이터를 함께 보낼 수 있다.   Path Variable 방식  서버에 보내려는 데이터를 URL 경로에 추가할 수 있다. package org.sparta.springmvc.request;import lombok.Getter;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;@Controllerpublic class RequestController { @GetMapping("/form/html") public String helloForm() { return "hello-request-form"..
[Spring 입문] Jackson으로 타입 변환하기 Object to JSON@Test@DisplayName("Object To JSON : get Method 필요")void test1() throws JsonProcessingException { Star star = new Star("Robbie", 95); ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper String json = objectMapper.writeValueAsString(star); System.out.println("json = " + json);}  JSON to Object@Test@DisplayName("JSON To Object : 기본 생성자 & (get OR ..