멀티스레딩 환경에서 여러 스레드가 동시에 같은 리소스에 접근하려 할 때, 데이터의 일관성과 무결성을 유지하는 것이 중요합니다. 이를 위해 자바에서는 뮤텍스(Mutex)와 세마포어(Semaphore) 같은 동기화 메커니즘을 제공합니다. 이 글에서는 뮤텍스와 세마포어의 개념을 설명하고, 차이점을 자바 예제와 테스트코드로 함께 살펴보겠습니다. 뮤텍스(Mutex) 뮤텍스는 Mutual Exclusion(상호 배제)의 약자이다. 한 번에 하나의 스레드만이 특정 리소스나 코드 섹션에 접근할 수 있도록 합니다. 리소스에 접근하는 스레드가 뮤텍스를 1. '잠그고(lock)' 2. 작업을 한다 3. '해제(unlock)' 즉 한 시점에 단 하나의 스레드만이 리소스를 사용할 수 있게 됩니다. 자바에 ReentrantLoc..
java
Form 데이터를 파싱해보자 웹 개발에서 사용자 입력을 처리하는 것은 필수적인 작업입니다. 1. application/x-www-form-urlencoded 타입 2. application/json 타입 두 MIME 타입은 HTML 폼 데이터를 서버로 전송하는 데 자주 사용되는 인코딩 방식입니다. 그 중에 application/x-www-form-urlencoded 타입을 알아 볼 겁니다. application/x-www-form-urlencoded의 MIME 타입은 폼 데이터를 키-값 쌍으로 인코딩하며, 각 쌍은 &으로 구분되고 키와 값은 =으로되고 띄어쓰기는 +로 됩니다. 예를 들어, 사용자가 웹 폼에 이름, 나이, 도시를 입력하는 경우를 보겠습니다. 이름 : sumin Kim 나이 : 30 도시 :..
자바 리플렉션의 기본 원리와 사용 예 1. 리플렉션이란? 리플렉션(Reflection)은 Java에서 런타임에 클래스의 메타데이터를 조회하거나 수정할 수 있는 강력한 기능입니다. 이를 통해 개발자는 실행 중인 Java 애플리케이션 내부의 클래스, 메서드, 변수 등에 대한 정보를 동적으로 액세스하고 조작할 수 있다. 2. Person 클래스를 통한 리플렉션 사용 예 Person 클래스는 구성은 아래와 같습니다. 속성 : name, age 메서드 : sayHello 생성자 : 전부 public class Person { private String name; private int age; public Person(String name) { this.name = name; } public Person(int a..
팩토리 메서드 패턴이란 이 방법은 인스턴스 생성을 위한 인터페이스를 정의하고, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 내리도록 합니다. 이로써 객체 생성과 클래스의 구현이 밀접하게 결합되는 것을 방지합니다. 팩토리 메서드 패턴의 구성 1. Creator 객체의 생성 과정을 추상화한 클래스 또는 인터페이스. 팩토리 메서드를 선언, 구체적인 객체 생성은 서브클래스(ConcreteCreator)가 담당한다. 2. ConcreteCreator 팩토리 메서드를 오버라이드 하여서, 구체적인 제품을 구현한다. 3. Product 생성될 객체들의 공통 인터페이스. ConcreteProduct 클래스들이 구현해야 하는 메서드를 정의. 4. ConcreteProduct Product 인터페이스를 구현..