추상 팩토리 패턴 (Abstract Factory Pattern)
·
Computer Science/Design Pattern
추상 팩토리 패턴추상 팩토리 패턴은 팩토리 메서드 패턴보다 상위 수준의 생성 패턴입니다.서로 관련된 객체들의 집합을 생성하기 위한 인터페이스를 정의하고, 구체적인 팩토리 구현 클래스가 실제 제품군을 생성하는 방식입니다. public interface Button { void render();}public class WindowsButton implements Button { public void render() { System.out.println("윈도우 버튼"); }}public class MacButton implements Button { public void render() { System.out.println("맥 버튼"); }}public ..
Spring DispatcherServlet은 왜 필요할까?
·
framework/spring
SpringMVC의 기본이 되는 DispatcherServlet이 생겨난 이유에 대해 알아보려 합니다.DispatcherServlet의 등장 배경에 대해 알아보기 위해 먼저 Servlet과 템플릿 엔진 정리해보고, DispatcherServlet에 대해 얘기해보려 합니다. Servlet이란?DispatcherServlet을 이해하기 위해서는 먼저 서블릿에 대해 알아야 합니다.서블릿은 java에서 사용하는 웹 프로그래밍을 할 때 사용하는 기술로, 클라이언트 요청을 처리하고 결과를 반환하는 역할을 합니다.서블릿은 정적인 웹 페이지 생성에서 더 나아가 사용자 정보에 따라, 동적으로 응답값을 생성하기 위해 만들어진 기술입니다.@WebServlet(name = "responseHtmlServlet", urlPat..
java의 불변 리스트 (Arrays.asList vs. List.of)
·
language/java
정말 많이 사용되지만 혼동하기 쉬운 Array.asList와 List.of에 대해 정리해보려 합니다. 불변 리스트불변 리스트는 생성한 후 수정할 수 없는 리스트를 의미합니다. 말 그대로 불변성을 가진 리스트를 말하는데요.불변 리스트는 값이 변경되지 않기 때문에 일반적인 리스트에 비해 안정성이 높습니다. 여러 쓰레드에서 동시에 리스트에 접근하더라도 읽기 작업만을 할 수 있기 때문에 동기화를 신경 쓸 필요가 없고, 의도치 않은 변경을 막을 수 있습니다. java에서는 크게 3가지 방법을 이용해 불변 리스트를 만들 수 있습니다.Arrays.asListList.ofunmodifiableList순서대로 하나씩 사용 방법에 대해 알아봅시다. 가짜 불변 리스트: Arrays.asList// 인자를 하나씩 전달List..
Lombok의 @Builder와 @SuperBuilder
·
language/java
lombok 라이브러리는 반복되는 패턴을 줄여주어 코드의 간결성과 유지보수성을 크게 높여줍니다.lombok은 Builder 패턴을 편리하게 사용할 수 있도록 @Builder 애노테이션을 제공해줍니다.애노테이션 중에는 @Builder 외에도 @SuperBuilder 애노테이션이 존재합니다.그렇다면 @SuperBuilder는 무엇일까요?@Builder 애노테이션과 @SuperBuilder 애노테이션의 차이에 대해 알아보려 합니다. @Builder@Builder는 lombok에서 제공하는 기본적인 빌터 패턴 구현 애노테이션입니다. 특정 클래스에 대해 빌더 클래스를 생성하여, 객체를 유연하게 생성할 수 있도록 도와줍니다. 주요 특징단일 클래스에서 사용@Builder는 상속 관계가 없는 단일 클래스 객체를 생성할..
Java Map의 동시성 문제 (HashMap vs. ConcurrentHashMap vs. Hashtable)
·
language/java
Map은 key-value 형태의 자료를 저장할 수 있는 컬렉션 자료구조 중 하나입니다.key-value 형태는 사람이 알아보기 쉽고, 제공되는 api 또한 간단하기 때문에 많이 사용되는 자료구조인데요.Map의 구현체 중 가장 많이 사용되는 구현체 중 하나로는 HashMap 자료구조가 있습니다.하지만, 멀티 쓰레드 환경에서는 동시성 문제가 발생할 수 있기 때문에 사용에 주의가 필요합니다. HashMap의 동시성 문제HashMappublic class MapExample { private final Map map; public MapExample() { this.map = new HashMap(); } public void add(String key) { ma..