전체 글(73)
-
[JAVA] Immutable(불변) / Mutable(가변)
1. 가변(Mutable) 객체 가변 객체는 값을 변경할 수 있는 객체 여기서 값은 메모리의 주소를 의미합니다. 가변 객체의 경우 값을 변경한다고 해서 저장되어있는 메모리의 위치가 변하지 않습니다. 언제든지 값을 바꿀수 있다보니, 멀티 스레드 환경에서 사용하려면 별도의 동기화 처리가 필요합니다. 대표적인 가변객체로는 ArrayList, HashMap, StringBuilder, StringBuffer 2. 불변(Immutable) 객체 Java에서 Class의 인스턴스가 생성된 이후에 내부 상태를 변경 할 수 없는 객체 불변 객체는 멀티스레드 환경에서도 안전하게 사용할 수 있다는 신뢰성 보장하며, 대표적으로 String등 이 존재한다 이외에도 커스텀 객체를 생성하여 내부 상태가 변경되지 않게 만들면(pr..
2024.02.23 -
[JAVA] 래퍼 클래스 (Wrapper Class)
프로그래밍을 하다보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 종종 생기게 된다. 예를 들어 메소드의 인수로 객체 타입만이 요구되면, 기본 타입의 데이터를 그대로 사용할 수 없기때문에 어떠한 변환 작업이 필요해진다. 멀티스레드 환경에서 동기화 데이터를 사용해야 할 경우 이를 객체화 해야 할 필요성이 생긴다. (멀티 스레드 환경에서 동기화 할 시 기본형 타입에는 lock을 걸수가 없기 때문에) Wrapper Class 기본 타입(Primitive type)을 객체로 다루기 위해서 사용하는 클래스 래퍼 클래스를 이용하면 각 타입에 해당하는 데이터를 파라미터로 전달받아 해당 값을 가지는 객체로 만들어 준다. 박싱(Boxing) & 언박싱(UnBoxing) 위에서 래퍼 클래스는 값을 포장하여 객체로 만..
2024.02.23 -
[Java] 원시타입 / 참조타입
자바의 데이터 타입 - 자바에서 데이터 타입에 대해 크게 두 가지를 제공한다. 바로 원시 타입(Primitive Type)과 참조 타입(Reference Type)이 있다. - 원시 타입은 논리형, 문자형, 정수형, 실수형 등의 실제 데이터(값)를 저장하는 타입이고, 참조 타입은 객체가 생성된 메모리의 주소를 저장하는 타입이다. 원시타입(Primitive Type) - 기본형 타입에는 크게 논리형 (boolean), 문자형 (char), 정수형 (byte, short, int, long) 실수형 (float, double) 으로 나뉜다. 모두 소문자로 시작한다. 비객체 타입이므로 null 값을 가질수 없다. 변수 선언과 동시에 메모리 새성 모든 값 타입은 메모리의 Stack에 저장됨 저장공간에 실제 값을..
2024.02.23 -
[Java] 메모리 관리
Java는 JVM이라는 가상머신에서 컴파일/실행 시키는것, JVM을 이해하여 자바의 메모리 할당부분 이해를 도운다. JVM의 메모리 할당은 결국, Java Garbage Collection을 통해 메모리를 관리한다. Java의 GC에 대한 이해를 통해 메모리 관리에 대한 부분을 이해하자. 1. 일반적인 메모리의 구조 코드(code) 영역 메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부릅니다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다. 데이터(data) 영역 메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역입니다. 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램..
2024.02.23 -
WireMock을 이용하여 서버간 통신 테스트
Wiremock 이란? 간단히 말해서 Wiremock은 통합 테스트를 위한 모의 설정 서버 주어진 요청에 대해 예상되는 응답을 반환하도록 고도로 구성 할 수있는 단순한 모의 서버 HTTP-based API를 위한 시뮬레이터 Mock 으로 만드는 웹서버 https://wiremock.org/ WireMock - flexible, open source API mocking WireMock is a tool for building mock APIs. API mocking enables you build stable, predictable development environments when the APIs you depend on are unreliable or don’t exist. wiremock.org ..
2024.02.19 -
MapStruct 편리한 객체 간 맵핑
1. MapStruct 란? Java 객체 간의 맵핑을 단순화하는 코드 생성 라이브러리입니다. Annotation processor를 이용하여 객체 간 매핑을 자동으로 제공합니다. 반복되는 객체 매핑에서 발생할 수 있는 오류를 줄일 수 있으며, 구현 코드를 자동으로 만들어주기 때문에 사용이 쉽습니다. 컴파일 시점에 코드를 생성하여 런타임에서 안정성을 보장합니다. 2. 설정 방법 Dependency를 먼저 추가해 주어야합니다. 주의할 사항으로는 Lombok 라이브러리에 먼저 dependency (의존성) 추가가 되어있어야 합니다. MapStruct는 Lombok의 getter, setter, builder를 이용하여 생성되므로 Lombok 보다 먼저 의존성이 선언된 경우 실행할 수 없습니다. org.map..
2024.02.14