본문 바로가기

분류 전체보기

(54)
Primitive Type, Reference Type Primitive Type 기본형 데이터 타입은 Java에서 가장 기본적인 데이터 타입으로, 메모리(JVM의 스택)에 고정된 크기를 차지한다. Primitive values do not share state with other primitive values. 두 변수가 동일한 메모리 위치에 저장된 값을 가리키거나 서로 영향을 미치지 않는다. Primitive Type에는 아래와 같은 종류가 있다. 또한 Primitive Type은 default 값으로 초기화된다. 크기 default value 정수형 byte 1 byte 0 short 2 byte 0 int 4 byte 0 long 8 byte 0L 실수형 float 4 byte 0.0f double 8 byte 0.0d 문자형 char 2 byte &..
JVM과 GC JVM 컴파일 Java 소스코드는 Java 컴파일러 javac에 의해 바이트코드로 변환된다. 변환된 바이트코드는 플랫폼에 독립적인 이진 포맷으로, JVM 위에서 실행된다. 클래스 로더 실행 시간에 동적으로 바이트 코드를 로드하고 링크한다. Bootstrap 클래스 로더: JVM 구현의 일부로, Java 기본 클래스를 로드한다. Extension 클래스 로더: 확장 디렉토리에 있는 클래스를 로드한다. Application 클래스 로더: 사용자 정의 클래스와 클래스 경로에 있는 클래스를 로드한다. Runtime Data Area Method Area 바이트코드가 저장된다. 클래스의 메타데이터, 상수, 정적 변수 등이 저장된다. Heap 동적으로 생긴 객체가 저장되는 영역으로 가비지 컬렉션의 대상이 된다. S..
싱글턴 패턴 싱글턴 패턴 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공한다. public class Singleton{ private static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } } 위의 방식은 멀티스레딩 환경에서 getInstance() 메서드의 동기화를 보장해주지 않는다. 따라서 두 스레드가 다른 인스턴스를 return받을 수 있다. 방법 1. synchronized 키워드 사용하기 public class ..
[Java] HashMap, HashTable, HashSet HashMap Map 인터페이스를 구현하는 클래스이다. key-value 쌍으로 데이터를 저장한다. 키는 중복될 수 없다. 동일한 키를 가진 값을 추가하려고 하면, 기존 값이 새 값으로 대체된다. key와 value에 대해 null을 허용한다. 동기화되지 않는다. 속도가 빠르다. HashTable Map 인터페이스를 구현하는 클래스이다. key-value 쌍으로 데이터를 저장한다. 키는 중복될 수 없다. 동일한 키를 가진 값을 추가하려고 하면, 기존 값이 새 값으로 대체된다. key와 value에 대해 null을 허용하지 않는다. 동기화가 된다. thread-safe하다. 속도가 느리다. HashSet Set 인터페이스를 구현하는 클래스이다. 중복을 허용하지 않는다. null을 허용한다. 내부적으로 Ha..
DI와 IoC DI (의존성 주입) 이란 어떤 객체(B)를 사용하는 주체(A)가 객체(B)를 직접 생성하는게 아니라 객체를 외부에서 생성해서 사용하려는 주체 객체(A)에 주입시켜주는 방식으로, 생성자 주입 방식 Setter 주입 방식 필드 주입 방식 이 있다. 객체 지향 프로그래밍에서 의존성 관리를 위한 패턴 중 하나이다. 객체 간의 결합도를 낮추고, 코드 재사용성과 유지보수성을 향상시킨다. 그 중에서도 Spring은 생성자 주입 방식을 권장한다. 먼저 각각의 예시 코드를 보자. 생성자 주입 @Service public class AService { private final BService bService; public AService(BService bService) { this.bService = bService;..
Spring Container와 Bean의 Lifecycle Application Context 스프링 빈 객체의 생성, 설정 및 관리를 담당하는 IoC 컨테이너이다. 스프링에서는 Bean Factory 를 상속받아 확장한 Application Context 를 IoC 컨테이너로 사용한다. 애플리케이션 컨텍스트는 다음과 같은 기능을 수행한다: 빈 객체의 생성과 의존성 주입 빈 객체간의 상호 작용을 지원하고, 빈 객체의 생명주기를 관리 애플리케이션 전체에 걸쳐 공통적으로 사용되는 리소스 및 서비스를 제공 애플리케이션 컨텍스트는 스프링 애플리케이션의 중심이 되는 부분으로, 개발자는 애플리케이션 컨텍스트를 사용하여 빈 객체를 검색하거나 관리할 수 있다. 애플리케이션 컨텍스트를 사용함으로써, 개발자들은 빈 객체의 생성과 관리에 직접 신경 쓸 필요가 없고, 비즈니스 로직에..
Spring Boot Controller Test What You Will Build Application Context가 로드하는 것을 테스트한다. Spring의 MockMvc를 사용해 web layer를 테스트한다. Run the Application package com.example.testingweb; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class TestingWebApplication { public static void main(String[] args) { SpringApplication.run(TestingW..
Object Mapper 매퍼 object → object 매퍼 라이브러리 ObjectMapper ModelMapper MapStruct Object Mapper JSON 컨텐츠를 Java 객체로 deserialization 하거나 Java 객체를 JSON으로 serialization 할 때 사용하는 Jackson 라이브러리의 클래스이다. ObjectMapper는 생성 비용이 비싸기 때문에 bean/static으로 처리하는 것이 좋다. ObjectMapper객체를 다음과 같이 생성한다. ObjectMapper objectMapper = new ObjectMapper(); 직렬화를 하기 위해서는 getter가 필요하다. 역직렬화를 하기 위해서는 생성자가 필요하다. class User{ private String name; priv..