전체 글
-
데드락(Deadlock)이란?Computer Science/OS 2024. 4. 3. 23:09
1. 데드락이란? 데드락이란, 두 개 이상의 프로세스나 스레드가 서로 상대방이 점유한 자원의 해제를 무한히 기다리게 되어, 아무런 진행도 할 수 없는 상태를 말합니다. 이러한 상태가 발생하면, 해당 프로세스들은 영원히 진행되지 못하고 멈춰 있는 상태가 됩니다. 2. 데드락 예시코드 Java: public class DeadlockExample { private static final Object lock1 = new Object(); private static final Object lock2 = new Object(); public static void main(String[] args) { Thread thread1 = new Thread(() -> { synchronized (lock1) { Sys..
-
프로토타입 패턴(Prototype Pattern)이란?Design Pattern/생성 디자인 패턴 2024. 4. 2. 22:35
1. 프로토타입 패턴이란? 프로토타입 패턴은 생성 디자인 패턴의 한 종류로, 기존 객체를 복제하여 새 객체를 생성하는 방식입니다. 이 패턴은 특히 객체 생성 비용이 크거나 복잡한 경우, 또는 클라이언트가 객체의 타입을 미리 알 수 없는 경우에 유용합니다. 프로토타입 패턴은 원본 객체의 정확한 복사본을 제공함으로써, 새 객체의 생성과 초기화 과정을 단순화합니다. 2. 프로토타입 패턴은 주로 어디에 쓰이나? 프로토타입 패턴은 다음과 같은 상황에서 주로 사용됩니다: 객체 생성 비용이 높고, 비슷한 객체가 여러 개 필요한 경우 객체의 타입이 런타임에 결정되는 경우 클론을 지원하여 객체의 상태를 쉽게 복제할 수 있는 경우 이 패턴은 게임 개발에서 캐릭터, 아이템 등의 인스턴스를 만들 때나, 소프트웨어 개발에서 설..
-
빌더 패턴(Builder Pattern)이란?Design Pattern/생성 디자인 패턴 2024. 4. 1. 23:15
1. 빌더 패턴이란? 빌더 패턴은 복잡한 객체의 생성 과정과 그 표현 방법을 분리함으로써 동일한 생성 과정에서 서로 다른 표현 결과를 만들 수 있게 하는 디자인 패턴입니다. 이는 객체가 가질 수 있는 여러 옵션들을 명확하게 설정할 수 있게 하며, 최종 객체가 생성될 때까지 변경 불가능(immutable) 상태를 유지할 수 있도록 도와줍니다. 2. 빌더 패턴과 팩토리 패턴의 차이점 빌더 패턴과 팩토리 패턴은 모두 객체 생성을 추상화하는 패턴이지만, 주 사용 시나리오가 다릅니다. 팩토리 패턴은 생성할 객체의 타입이 서브클래스에 의해 결정되는 경우에 사용되며, 주로 객체 생성 로직을 캡슐화할 때 사용됩니다. 반면, 빌더 패턴은 하나의 복잡한 객체를 단계별로 생성해야 할 때 사용되며, 최종적으로 조립하는 방식으..
-
팩토리 패턴(Factory Pattern)이란?Design Pattern/생성 디자인 패턴 2024. 3. 31. 18:16
1. 팩토리 패턴이란? 팩토리 패턴(Factory Pattern)은 객체 생성을 위한 인터페이스를 제공하며, 서브클래스가 인스턴스화할 클래스를 결정하게 합니다. 이를 통해 객체 생성을 캡슐화하고, 클라이언트 코드가 특정 클래스에 의존하지 않도록 도와줍니다. 이 패턴은 객체 생성 로직과 클라이언트 코드를 분리하여, 코드의 유연성과 확장성을 향상시킵니다. 2. 팩토리 패턴의 종류 팩토리 패턴에는 주로 세 가지 종류가 있습니다: a. 단순 팩터리 패턴 (Simple Factory Pattern) 단순 팩터리 패턴은 팩토리 클래스가 객체 생성의 전체 로직을 처리합니다. 클라이언트는 팩토리 클래스를 통해 필요한 객체를 요청합니다. Java 예시: public class ShapeFactory { public Sh..
-
싱글턴 패턴(Singleton Pattern)이란?Design Pattern/생성 디자인 패턴 2024. 3. 30. 22:15
I. 싱글턴 패턴이란? 싱글턴 패턴(Singleton Pattern)은 객체의 인스턴스가 오직 하나만 생성되도록 보장하는 디자인 패턴입니다. 이 패턴은 전역 상태를 관리하거나, 공통된 리소스에 대한 일관된 접근 지점을 제공하는 등의 필요성 때문에 소프트웨어 개발에서 중요한 역할을 합니다. 예를 들어, 데이터베이스 연결이나 로깅 시스템과 같은 공유 리소스 관리에 있어서 중복 생성을 방지하고, 전역적으로 접근 가능한 단일 인스턴스가 필요할 때 유용하게 사용됩니다. 싱글턴 패턴을 올바르게 구현하기 위해서는 몇 가지 중요한 조건을 충족시켜야 합니다: Private 생성자: 싱글턴의 생성자는 private 접근 제한자를 사용하여 외부에서 new 키워드를 통한 인스턴스 생성을 방지합니다. - Private 생성자를..
-
스레드 세이프(Thred Safe)란?Computer Science/OS 2024. 3. 30. 14:35
스레드 세이프(Thread-Safe)란 멀티스레딩 환경에서 여러 스레드가 동시에 같은 코드 영역에 접근하거나 데이터를 공유할 때, 올바른 실행 결과를 보장하는 코드의 속성을 의미합니다. 즉, 코드가 여러 스레드로부터 동시에 호출되더라도 각 스레드의 실행 경로가 서로를 방해하지 않도록 안전하게 설계되어 있다는 것입니다. 이는 데이터 무결성과 일관성을 유지하는 데 필수적인 조건입니다. 스레드 세이프를 보장하기 위한 전략은 여러 가지가 있습니다. 가장 흔한 전략은 상호 배제(mutual exclusion), 동기화(synchronization) 기법을 사용하는 것입니다. 이 외에도 불변성(immutability), 스레드 로컬 저장소(thread-local storage), 원자적(atomic) 연산 등을 활..
-
golang: 포인터(Pointer)란?Back-End/Golang 2024. 3. 30. 12:34
Go 언어에서 포인터는 변수의 메모리 주소를 저장합니다. 포인터를 사용하면, 변수의 메모리 주소를 통해 직접 변수의 값을 읽거나 수정할 수 있습니다. 이는 데이터를 효율적으로 처리할 수 있게 하며, 특히 큰 데이터 구조를 다룰 때나 함수 간에 데이터를 전달할 때 유용합니다.포인터의 기본 개념:포인터 선언: * 키워드를 사용해 포인터 타입을 선언합니다. 예를 들어, var p *int는 정수형 변수의 메모리 주소를 저장할 수 있는 포인터 p를 선언합니다.주소 연산자 &: 변수 앞에 &를 붙여 해당 변수의 메모리 주소를 얻습니다.역참조 연산자 *: 포인터 앞에 *를 붙여 포인터가 가리키는 메모리 주소의 실제 값을 얻습니다.코드 예시: 포인터 사용하기아래 코드는 포인터를 사용하여 변수의 값이 함수에 의해 어떻..
-
golang: 컨텍스트(Context)란?Back-End/Golang 2024. 3. 30. 12:13
Go 언어에서 context 패키지는 고루틴 간에 데이터, 취소 신호, 타임아웃 등을 전파하는 데 사용됩니다. context.Context 인터페이스는 요청 처리에 필요한 모든 정보를 담고, 고루틴의 실행 제어를 가능하게 합니다. 이는 주로 API 호출, 데이터베이스 요청 등의 작업을 취소하거나, 작업의 마감 시간(deadlines)을 설정하고, 요청 스코프의 값(value)을 전달하는 데 유용합니다. Context의 주요 사용 사례: 요청 취소: 사용자 요청 취소나 타임아웃 시, 모든 관련된 작업을 중단시킵니다. 타임아웃 설정: 특정 작업에 대한 최대 실행 시간을 지정합니다. 값 전달: 요청 스코프에 있는 데이터를 여러 고루틴 사이에서 전달합니다. Context 사용 예제: 아래 예제에서는 contex..