no image
HashMap vs ConcurrentHashMap
HashMap vs ConcurrentHashMap - 실시간 채팅 프로젝트에서 왜 ConcurrentHashMap을 사용하나?HashMap 이란?HashMap은 Java의 Map 인터페이스를 구현한 대표적인 자료 구조로, Key의 hashCode() 값을 이용해 데이터를 빠르게 저장하고 검색할 수 있습니다.장점빠른 성능 : 평균적으로 O(1)의 시간복잡도로 검색, 삽입, 삭제가 가능합니다.단일 스레드 환경에서 최적 : 멀티스레드 처리를 고려하지 않을 경우, 가장 빠르고 효율적인 Map입니다.단점스레드에 안전하지 않음여러 스레드가 동시에 접근할 경우, 예외 발생 및 데이터 정합성 문제가 발생할 수 있습니다.발생 가능한 문제ConcurrentModificationException : 반복 도중 다른 스레드..
2025.04.10
no image
인터페이스와 추상클래스
Interface vs Abstract개념설명인터페이스클래스가 꼭 구현해야 하는 메서드를 명시해 놓은 설계서 라고 할 수 있으며 기능 구현은 없고 형식만 정의추상클래스공통된 기능을 미리 정의하거나, 자식 클래스가 반드시 구현해야 할 부분은 추상 메서드로 남겨둔 미완성 클래스인터페이스란?"이 기능을 반드시 구현해라" 라는 기능 명세서  : 형태만 있는 순수 추상 구조라고 할 수 있습니다.인터페이스 특징 모든 메서드는 기본적으로 public이고 구현이 없음변수는 선언할 수 없고, 상수만 가능(publid static final)다중 상속이 가능상수만 가질 수 있고 일반 변수는 없음의존성 낮고, 유연한 코드 구조 가능인터페이스 예제 1interface Vehicle { void move();}class ..
2025.04.10
no image
팩토리 메서드 패턴
Factory Method Pattern팩토리 메서드 패턴은 객체 생성의 책임을 서브클래스로 위임하여, 객체 생성을 캡슐화하는 디자인 패턴입니다. 이 패턴을 사용하면 객체 생성 로직을 별도의 메서드로 분리하여 유지보수를 용이하게 하고, 확장성을 높일 수 있습니다.1. 팩토리 메서드 패턴의 핵심 구조Product (제품): 생성될 객체의 인터페이스ConcreteProduct (구체적인 제품): 인터페이스를 구현하는 실제 클래스Creator (창조자, 팩토리 역할): 팩토리 메서드를 선언하는 추상 클래스 또는 인터페이스ConcreteCreator (구체적인 창조자): 팩토리 메서드를 오버라이딩하여 실제 객체를 생성하는 클래스2. 동작 흐름클라이언트는 Creator 클래스를 사용하여 객체를 요청합니다.Crea..
2025.02.17
no image
MySQL/MariaDB windows
MySQL과 MariaDB 동시 실행 및 서비스 제어 방법 MySQL과 MariaDB는 동일한 포트를 사용하는 경우가 많아 동시에 실행이 불가능합니다.따라서 한쪽을 정지시키고 다른 한쪽을 실행해야 하는 번거로움이 발생할 수 있습니다.이를 해결하기 위해 Windows의 서비스 관리 도구를 사용하는 대신, 명령어를 통해 간단히 서비스를 제어하는 방법을 사용할 수 있습니다. net start 명령어는 Windows에서 서비스(서비스 관리자에 등록된 서비스)를 시작할 때 사용하는 명령어입니다.반대로 서비스를 정지할 때는 net stop 명령어를 사용합니다.MariaDB 서비스를 시작하는 명령어net start MariaDB 이 명령어를 실행하면 Windows 서비스 관리자에 등록된 MariaDB 서비스가 시작됩..
2025.01.27
no image
데코레이터(Decorator) 패턴
Decorator Pattern왜 데코레이터 패턴이 필요할까?소프트웨어를 개발하다 보면, 객체에 새로운 기능을 추가하거나 변경해야 하는 경우가 많습니다.하지만 기존 클래스의 코드를 수정하거나 새로운 서브클래스를 만들어 기능을 확장하면 다음과 같은 문제가 생깁니다:기존 코드 수정 위험 : 기존 클래스 수정은 오류를 유발할 수 있습니다.서브클래스 폭발 문제 : 모든 조합을 처리하려면 서브클래스가 기하급수적으로 늘어납니다.해결책데코레이터 패턴은 객체를 감싸는 방식으로 기능을 동적으로 확장할 수 있습니다.이를 통해 코드 수정 없이도 새로운 기능을 추가하고, 서브클래스 증가를 방지할 수 있습니다.데코레이터 패턴의 구조 : 트리 비유로 이해하기데코레이터 패턴은 기본 객체를 꾸미는 과정을 비유적으로 설명할 수 있습니..
2025.01.26
no image
옵저버 패턴 이해하기
소프트웨어 개발에서 디자인 패턴은 문제를 효과적으로 해결하는 데 도움을 주는 재사용 가능한 솔루션을 제공합니다. 그중 옵저버 패턴은 한 객체의 상태 변화가 다른 객체에 자동으로 전파되어야 할 때 유용합니다.옵저버 패턴이란?옵저버 패턴은 1:N 관계에서 사용됩니다.한 객체(발행자 Subject)의 상태가 바뀌면 이 객체를 관찰하는 다른 객체(옵저버, Observer)에게 자동으로 알림이 전달됩니다. 이를 통해 객체 간의 결합도를 낮추고 시스템을 유연하게 설계할 수 있습니다.헤드헌터와 개발자구성 요소Recruiter (헤드헌터)발행자(Observable) 역할을 하며, 새로운 채용 공고를 구독 중인 개발자들에게 알립니다.새로운 공고가 등록되면 notifyDevelopers() 메서드를 통해 모든 구독자 알림..
2025.01.20
no image
전략 패턴(Strategy Pattern)
전략 패턴이란전략 패턴은 여러 가지 방법(알고리즘)을 미리 만들어 놓고, 필요할 때 그중 하나를 골라 사용하는 것입니다. 이렇게 하면 필요할 때마다 새로운 방법을 쉽게 추가할 수 있습니다.전략 패턴을 사용 시 이점1. 동작의 유연한 변경 : 실행 중에 원하는 전략(행동)을 교체할 수 있습니다.2. 코드 수정 최소화 : 새로운 전략을 추가해도 기존 코드를 수정하지 않아도 됩니다.3. 유지보수성 향상 : 코드가 분리되어 있어 가독성과 유지보수가 쉬워집니다.예시 : 택배 배송 시스템문제 사항우리는 택배를 고객에게 배송해야 합니다.배송 방법은 오토바이, 트럭, 드론 중 하나를 선택할 수 있습니다.고객의 위치, 물건의 크기, 긴급성에 따라 적절한 배송방법을 선택해야 합니다.새로운 배송 방법이 추가될 가능성도 있습..
2025.01.12
no image
Entity LifeCycle
JPA에서 Entity의 생명주기는 엔티티가 생성되고 영속성 컨텍스트에 저장되며, 분리되거나 삭제되기까지의 과정을 말합니다. 엔티티는 비영속(New/Transient), 영속(Managed), 준영속(Detached), 삭제(Removed) 삭제로 구분됩니다.1. 비영속(New/Transient)비영속 상태는 엔티티가 단순히 메모리에 존재하지만 영속성 컨텍스트에 포함되지 않은 상태입니다. 따라서 JPA가 전혀 관리하지 않으며, 데이터베이스와도 연결되지 않습니다.Member member = new Member(); // 비영속 상태여기서 member는 영속성 컨텍스트에 저장되지 않았기에 비영속 상태입니다. 이 상태일 때는 EntityManager의 도움 없이 일반 객체로 사용할 수 있습니다. 2. 영속(M..
2024.10.25
no image
-parameters 플래그 Error
Spring MVC 애플리케이션 개발 시, @RequestParam 애너테이션을 사용할 때 종종 발생할 수 있는 오류가 있습니다. 이 오류는 컴파일 시 -parameters 플래그가 설정되지 않아 발생합니다. 오류 메시지는 다음과 같습니다Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via re..
2024.08.24