분류 전체보기

[Spring] Spring에서 DI하는 3가지 방법 0. 들어가기 전에 스프링은 POJO(순수한 자바 객체) 형태의 객체 지향 설계를 만족하기 위해 탄생했습니다. 그렇다면 순수하게 객체 지향적으로 어떻게 코드를 작성할까요? 스프링은 DI와 IoC를 사용하는데, 이번 글에서는 DI에 대해서 설명을 하겠습니다. 1. DI 란? DI는 Dependency Injection의 약자로, 의존관계 주입이라고 한다. DI는 스프링의 핵심 기능 중 하나로 관심사 분리를 할 수 있게 도와준다. '의존관계를 주입한다'라는 말을 살펴보자. 주입은 집어 넣는다는 것이라고 생각하면 되는데, 여기에서 말하는 의존관계는 무엇일까? 자바 예제 코드로 알아보자. 1.1 예제 public interface DiscountPolicy ..
[Spring] RestAssured로 API 테스트 진행하기 0. 들어가기 전에 API를 테스트하기 위해 RestAssured를 사용하게 되었는데, ''응답 값을 어떻게 테스트할까?' 하는 생각으로 사용 방법을 찾아봤습니다. 테스트 방식으로 REST-assured에서 나온 것처럼 then()절 뒤에 body()를 사용해서 테스트하는 방식과 JsonPath를 사용하는 방식이 있습니다. body()를 사용하는 방식은 한 메서드의 길이가 길어지고 주로 사용하는 given / when / then 패턴을 사용하기 어렵습니다.. 그래서 이 글에서는 JsonPath를 사용하여 테스트를 진행하는 방식을 소개하겠습니다. 1. RestAssured란? REST 기반 서비스를 간단히 테스트하기 위한 Java DSL(Do..
나만 알고싶은 Github 플러그인 0. 들어가기 전에 제가 사용하고 있는 Github관련 크롬 플러그인을 정리해서 올립니다. 다른 플러그인도 있지만(Github CodeFolding, File Icons for GitHub and GitLab) 자주 사용되지 않아서 따로 올리지는 않았습니다. 이것보다 더 많은 플러그인이 필요하다면, 개인적으로 clone을 하고 보는 게 더 편할 것 같다고 생각합니다. 1. Octotree Github 저장소에서 파일들 사이를 쉽게 이동할 수 있게 도와주는 플러그인 다른 크루들의 코드를 쉽게 보고 싶으신가요? 그럴 때는 Octotree가 도움이 됩니다. Octotree는 IDE의 폴더 탐색처럼 만들어주는 플러그인입니다. 위와 같이 화면 왼쪽에 위치해 패키지 구조를 쉽게 ..
[Java] EnumMap이란? 0. 들어가기 전에 체스 미션을 진행하면서, HashMap을 EnumMap으로 리팩토링을 해봤습니다. 처음 쓰는거라 어떤 역할을 하는지 몰라 정리해 봅니다. 1. EnumMap 이란? Enum 타입의 Key를 갖는 특화된 맵 EnumMap은 하나의 Enum을 Key로 갖는다. 또한 HashMap과는 달리 HashMap을 사용하지 않고 Array로 구현이 되어서 효율적이다. 2. EnumMap의 특징 2.1 속도 public class EnumMap extends AbstractMap implements java.io.Serializable, Cloneable { private final Class keyType; private transient K[] keyUniverse..
[Java] LinkedHashMap의 방어적 복사 0. 들어가기전에 이번 블랙잭 미션을 하면서 결과 출력을 할 때, LinkedHashMap을 방어적 복사를 하려고 Map.copyOf()를 쓴 적이 있었다. 하지만, 이 방법은 기존 순서를 유지하지 못했다. 이 글을 통해 순서가 깨지는 이유와 방어적 복사를 하는 방법을 알아보자. 1. LinkedHashMap이란? Hash table and linked list implementation of the Map interface, with predictable iteration order. This implementation differs from HashMap in that it maintains a doubly-linked list running thr..
[Java] JVM - Garbage Collector 0. 들어가기전에 GC는 여러 종류가 있고, 자바 버전별로 기본적으로 채택하는 GC가 다릅니다. JAVA 8에는 Parallel GC, JAVA 9이상 부터는 G1 GC가 사용이 됩니다. Parallel GC까지는 이전 GC와 동작방식이 비슷하지만, G1 GC는 동작하는 방법이 달라 부득이하게 내용이 나뉘게 되었습니다. 1. Garbage Collector 런타임에 실행 중인 프로그램에 대한 메모리 할당 및 회수를 관리하는 자동 메모리 관리 시스템 가비지 컬렉터는 가비지 컬렉션(Garbage Collection)이라는 과정을 통해 자바 어플리케이션에서 자동으로 메모리 관리를 해주는 시스템이다. 그렇다면 '가비지 컬렉션(이하 GC)를 자주 실행하는게 ..
[Java] JVM - 메모리 구조 0. 들어가기 전에 static 변수는 static 영역 메모리에 올라간다. 그래서 GC가 되지 않기 때문에 남용하면 성능 문제를 일으킬 수 있다. 이 문장은 자바와 관련된 내용을 다루는 블로글들을 돌아다니면 한 번쯤 볼 수 있는 문구이다. '문법 공부가 바빠서', '프로젝트가 있어서' 이해가 안되지만 그냥 넘어간적이 한 두 번이 아니다. 그래서 이번엔 이 문장들을 이해하기 위해서 자바의 기초이자 심화과정인 JVM에 대해서 알아보려고 한다. 1. JVM이란? JVM(Java Virtual Machine)은 자바를 실행하기 위한 가상머신이며, 자바 바이트 코드를 OS에 맞게 해석 해주는 역할을 한다. 또한, 프로그램 메모리를 최적화 해주고 관리한다. 자바는 다른 프로그래..
[Design Pattern] 전략 패턴 0. 들어가기 전에 이 글은 예제 코드를 이용하여 템플릿 메서드 패턴을 적용시켜보고, 어떠한 장단점이 있는지 설명하는 글입니다. 이전 글인 템플릿 메서드 패턴을 읽고 오시면 더 좋습니다. 1. 전략 패턴 적용 전 현재 주문 로직과 결제 로직이 있다.(간단하게 로그로 표현했다.) @Slf4j public class DefaultOrderLogic { private void order() { log.info("주문 로직 실행"); } } @Slf4j public class DefaultPayLogic { private void pay() { log.info("결제 로직 실행"); } } 그런데 여기에 요구사항으로 메서드의 시작과 끝에 로그를 출력하는 기능을 추가한다고..
쿠엔크
'분류 전체보기' 카테고리의 글 목록 (4 Page)