전략 패턴(Strategy Pattern)이란?
·
JAVA
전략 패턴을 알아보자 1. 전략 패턴이란?전략 패턴이란?전략 패턴은 알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 하는 디자인 패턴이다. 이를 통해 알고리즘을 사용하는 클라이언트 코드에 영향을 주지 않고 알고리즘을 독립적으로 변경할 수 있다. 전략 패턴의 구성 요소Strategy 인터페이스알고리즘을 정의하는 공통 인터페이스다.특정 작업을 수행하기 위한 메서드를 선언한다.Concrete StrategyStrategy 인터페이스를 구현하는 구체적인 알고리즘 클래스다.다양한 알고리즘이나 행동을 구현한다.ContextStrategy 객체를 가지고 있으며, 클라이언트로부터 요청을 받아 Strategy에 작업을 위임한다.전략을 설정하고 실행하는 역할을 한다.전략 패턴의 작동 방식클라이언트가 C..
커맨드 패턴(Command Pattern)이란?
·
JAVA
Command 패턴 알아보기 1. Command 패턴이 왜 필요하고 어떤 장점을 제공할까?지금부터 레스토랑 주문 시스템을 예로 들어, Command 패턴이 왜 필요하고 어떤 장점을 제공하는지 알아보자.  Command 패턴을 사용하지 않은 경우먼저, Command 패턴을 사용하지 않고 간단한 주문 시스템을 구현해 보자.// OrderSystem 클래스: 주문 처리 담당public class OrderSystem { public void placeOrder(String item) { System.out.println(item + " 주문이 접수되었습니다."); } public void cancelOrder(String item) { System.out.println..
[Java] List를 Optional로 처리할 때 고려해야 할 사항
·
JAVA
Optional에 List를 담았을 때 착각할 수 있는 점이 있다.📌 서론개발 작업을 하던 도중 외부 api를 호출하여 받은 응답 객체(DTO) 내부의 List 필드를 가져다 사용하는 경우가 있었다. 이때 NPE가 생기지 않도록 하기 위해 Optional로 List 필드를 한번 감싸게 되는 상황이 있었다. 이게 선호되는 방법은 아니지만 NPE를 방지하고자 로직을 이렇게 작성하게 되었다. 문제는 내가 착각을 해서 Optional로 감싼 리스트가 빈 리스트(Empty List) 일 때도 ifPresentOrElse() 메서드의 else에 잡힌다고 생각했다. 근데 빈 리스트는 null이 아니기 때문에 orElse에 잡히지 않는다. 그래서 로직을 또 바꾸게 되는 일이 생겼다. 바보 같은 실수일 수도 있지만 충..
[Test] HTTP 부하 테스트 도구 'hey'를 사용한 성능 측정
·
스레드(Thread)
http 테스팅 툴 hey 사용하기 1. hey가 뭘까?hey는 Go 언어로 개발된 간단한 HTTP 부하 테스트 도구다. 원래 rakyll/boom으로 알려졌지만, 이후에 hey로 이름이 변경되었다. 이 도구는 웹 서버의 처리 능력을 테스트하고 성능 병목 현상을 식별하는 데 유용하다. 깃허브 주소아래 깃허브에 소스코드가 공개되어 있다. README를 읽어보는 것도 도움이 될 것이다. GitHub - rakyll/hey: HTTP load generator, ApacheBench (ab) replacementHTTP load generator, ApacheBench (ab) replacement. Contribute to rakyll/hey development by creating an account o..
[Spring] ApplicationRunner 활용하기
·
Spring 기초/Spring 기초 지식
스프링의 ApplicationRunner를 활용해 보자.📌 서론스프링 부트(Spring Boot) 애플리케이션에서 ApplicationRunner를 사용하면 애플리케이션이 시작될 때 특정 로직을 실행할 수 있다. 특히 @Configuration 클래스 내에서 @Bean으로 등록하면 필요한 빈들을 주입받아 유연하게 사용할 수 있다. 이번 포스팅에서는 실무에서 바로 적용할 수 있는 몇 가지 예제와 함께 ApplicationRunner의 활용 방법을 자세히 알아보도록 하자. 1. ApplicationRunner란 무엇인가?ApplicationRunner는 스프링 부트 애플리케이션(서버)이 완전히 초기화된 후 실행되는 콜백 인터페이스다. 이를 구현하면 애플리케이션 시작 시점에 필요한 작업을 수행할 수 있다. ..
[Thread] 코루틴(Coroutine)의 동시성 제어
·
스레드(Thread)
코루틴의 동시성 제어 방식을 알아보자.📌 서론코루틴은 비동기 프로그래밍을 간편하게 만들어주는 강력한 도구다. 하지만 여러 코루틴이 동시에 실행되면서 공유 자원에 접근할 때는 동시성 문제(concurrency issues)가 발생할 수 있다. 이번 포스팅에서는 코루틴에서 동시성을 안전하게 관리하기 위한 주요 방법들을 실전에 유용한 예제와 함께 쉽게 이해할 수 있도록 설명할 예정이다. 1. 뮤텍스(Mutex)와 동기화뮤텍스의 개념과 필요성멀티스레드 환경에서 여러 스레드가 동시에 공유 자원에 접근하면 데이터 일관성 문제가 발생할 수 있다. 코루틴도 마찬가지로 여러 코루틴이 동시에 동일한 자원에 접근할 때 동기화가 필요하다. 이를 위해 뮤텍스(Mutex)를 사용하여 임계 구역을 보호할 수 있다.Mutex의 기..
[Spring] 빈 스코프란?
·
Spring 기초/Spring 기초 지식
스프링의 빈 스코프를 알아보자📌 서론스프링으로 개발을 하다 보면 스프링 빈을 정말 많이 사용하게 된다. 요즘은 "모 개발자(영한쌤)의 강의"를 잘 듣는다면 스프링 빈에 대한 개념을 정말 잘 배울 수 있다고 생각한다. 나도 영한쌤의 강의를 들어가며 성장했고 덕분에 스프링에 대해 단단하게 기초를 잡고 현업에 적응할 수 있었다. 이렇게 무럭무럭 성장하는 주니어 시절을 보내던 와중 스프링의 빈 등록 원리를 더 자세히 알고 싶다는 생각이 들어 겁도 없이 공식 가이드 자료를 살펴보기 시작했다.나는 가끔 스프링의 공식 업데이트 내용을 보고 싶어서 가이드 정보를 구경하러 들어갔기에 처음 확인한 것은 아니지만 이 정도로 자세히 살펴본 적은 없었다. 이번에 가이드를 자세히 읽으면서 계속해서 놀랐다. 왜냐하면 영어로 되어..
[Thread] 코루틴(Coroutine)의 예외처리
·
스레드(Thread)
코루틴의 예외처리 방법을 알아보자. 1. 테스트 환경언어Kotlin (Java21)프레임워크SpringBoot3.x.x라이브러리코루틴(core, reactor), retrofit, gsonIDEIntelliJAI toolChatGPT 4o, Claude3.5 Sonnet마음가짐호기심, 참을성, 노력SpringBoot: build.gradle 설정코루틴 설정과 retrofit 설정은 꼭 추가해 줘야만 끝까지 실습을 함께할 수 있다.plugins { kotlin("jvm") version "1.9.25" kotlin("plugin.spring") version "1.9.25" id("org.springframework.boot") version "3.3.3" id("io.spring.dependency-ma..
[Java] 자바 생성자의 초기화 방법
·
JAVA
자바 생성자는 어떻게 초기화될까?  1. 생성자에서 모든 필드를 초기화할 필요가 없는 이유자바에서 생성자는 객체가 생성될 때 특정 필드를 초기화하기 위해 사용된다. 그러나 모든 필드를 반드시 생성자에서 초기화해야 하는 것은 아니다.  다음과 같은 이유로 일부 필드는 생성자에서 초기화하지 않아도 된다.선택적 초기화일부 필드는 기본값으로 초기화해도 문제가 없는 경우가 있다. 예를 들면 숫자형 필드는 기본적으로 0, 객체형 필드는 null로 초기화된다.다중 생성자여러 생성자를 정의하여 다양한 방식으로 객체를 생성할 수 있다.각 생성자에서 초기화할 필드를 선택적으로 지정할 수 있다.필드 초기화 블록 또는 선언 시 초기화필드를 선언할 때 기본값을 지정할 수 있다.초기화 블록을 사용하여 공통적으로 초기화할 수도 있..