go
-
빌더 패턴(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..
-
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..
-
golang: 채널(Channel)이란?Back-End/Golang 2024. 3. 30. 12:10
채널(Channel)은 Go 언어의 핵심 기능 중 하나로, 고루틴 간에 데이터를 안전하게 주고받을 수 있는 통신 메커니즘입니다. 채널을 사용하면 고루틴 사이에서 동기화 없이 데이터를 전달할 수 있으며, 이는 동시성 프로그래밍에서 발생할 수 있는 복잡한 문제들을 효과적으로 해결할 수 있게 해줍니다. 채널의 특징: 타입 안전성: 채널은 특정 타입의 데이터만을 전송할 수 있으며, 이는 프로그램의 안정성을 높여줍니다. 동기화: 채널을 통해 데이터를 보내거나 받을 때, Go 런타임은 이 과정이 안전하게 이루어지도록 자동으로 동기화를 관리합니다. 블로킹과 넌블로킹 동작: 채널은 기본적으로 블로킹(Blocking) 동작을 합니다. 데이터를 보내거나 받을 준비가 되지 않았을 경우, 해당 고루틴은 대기 상태에 머물게 됩..
-
golang: 고루틴(Goroutines)이란?Back-End/Golang 2024. 3. 30. 12:02
고루틴(Goroutines)은 Go 언어에서 동시성(concurrency)을 구현하는 핵심적인 부분입니다. 간단히 말하자면, 고루틴은 Go에서 실행되는 경량 스레드(lightweight threads)와 유사합니다. 하지만 전통적인 스레드에 비해 훨씬 적은 메모리를 사용하며, 쉽게 수천 개 이상을 생성하고 관리할 수 있습니다. 고루틴은 Go 런타임에 의해 관리되며, 고루틴 사이의 통신은 주로 채널(Channels)을 통해 이루어집니다. 고루틴의 특징: 경량: 고루틴은 매우 작은 메모리 스택을 사용하여 시작되며, 필요에 따라 동적으로 확장됩니다. 비동기 실행: 고루틴은 비동기적으로 실행됩니다. 즉, 메인 프로그램의 실행을 차단하지 않고 동시에 실행될 수 있습니다. 쉬운 생성: go 키워드를 사용하여 함수 ..