go
-
golang: Tee 패턴이란?Back-End/Golang 2024. 5. 15. 21:12
Tee 패턴은 하나의 입력 채널에서 읽은 데이터를 여러 출력 채널로 복사하여 동시에 여러 곳에서 사용할 수 있게 하는 패턴입니다. 이 패턴은 이름 그대로 "티" 모양처럼 데이터를 여러 갈래로 나누는 기능을 합니다. 이 패턴은 데이터를 여러 곳에서 병렬로 처리할 때 유용합니다.Tee 패턴의 구조입력 채널: 데이터를 제공하는 채널입니다.출력 채널들: 입력 채널에서 읽은 데이터를 복사하여 전달할 여러 개의 출력 채널입니다.예제 코드아래 예제에서는 tee 함수가 입력 채널에서 데이터를 읽어 두 개의 출력 채널로 복사하는 기능을 수행합니다.package mainimport ( "fmt" "sync")// tee 함수는 입력 채널에서 데이터를 읽어 여러 출력 채널로 복사합니다.func tee(done 코..
-
golang: 파이프라인(pipeline)이란?Back-End/Golang 2024. 5. 15. 20:36
파이프라인(pipeline)은 데이터를 단계별로 처리하는 시스템에서 자주 사용되는 패턴입니다. 각 단계는 특정 작업을 수행하며, 한 단계의 출력이 다음 단계의 입력이 되는 방식입니다. 파이프라인 패턴을 사용하면 복잡한 작업을 작은 단계로 나누어 처리할 수 있어 코드의 이해와 유지보수가 쉬워집니다. Go 언어에서는 고루틴과 채널을 사용하여 파이프라인을 구현할 수 있습니다.파이프라인의 구성 요소생산자(Producer): 데이터를 생성하여 파이프라인에 입력하는 역할을 합니다.처리자(Processor): 데이터를 처리하여 다음 단계로 전달하는 역할을 합니다.소비자(Consumer): 최종 데이터를 받아 처리하는 역할을 합니다.파이프라인의 기본 구조단계(Stage): 각 단계는 독립적인 고루틴으로 실행됩니다.채널..
-
golang: 배열(Array)과 슬라이스(Slice)Back-End/Golang 2024. 5. 11. 13:10
I. 정의 및 기본 개념배열(Array): 배열은 Go에서 고정된 크기의 연속적인 메모리 영역에 동일한 타입의 요소들을 순차적으로 저장하는 데이터 구조입니다. 배열의 길이는 선언 시에 정해지며, 이후에는 변경할 수 없습니다. 배열 초기화 방법1. 기본 초기화: 배열을 선언하고, Go의 기본값으로 초기화됩니다. 숫자 타입의 배열은 0, 불리언 배열은 false, 포인터와 슬라이스, 맵, 채널은 nil로 초기화됩니다.var arr1 [3]int 2. 리터럴을 사용한 초기화: 배열 선언과 동시에 특정 값으로 초기화합니다.arr2 := [3]int{10, 20, 30} 3. 인덱스 지정 초기화: 특정 인덱스에 값을 할당합니다. 할당되지 않은 인덱스는 타입의 기본값으로 초기화됩니다.arr3 := [5]int{1:..
-
고루틴 누수(Goroutine Leak)란?Back-End/Golang 2024. 5. 10. 11:59
고루틴 누수(Goroutine Leak)는 고루틴이 끝나지 않고 계속 메모리와 시스템 리소스를 소비하는 상태를 말합니다. 고루틴은 Go 언어에서 경량 스레드처럼 동작하며, 고루틴 누수는 프로그램의 성능 저하나 예상치 못한 동작을 초래할 수 있습니다. 고루틴이 제대로 종료되지 않으면 그에 따른 채널이나 다른 리소스도 해제되지 않아 리소스 누수로 이어질 수 있습니다. 고루틴 누수가 어떤 피해를 주나요?고루틴 누수는 프로그램의 성능과 안정성에 여러 가지 해로운 영향을 미칠 수 있습니다. 이러한 영향을 구체적으로 살펴보겠습니다:1. 메모리 사용 증가고루틴은 스택 메모리를 사용하고, 각 고루틴은 일반적으로 몇 킬로바이트의 메모리를 소비합니다. 고루틴이 계속 누적되면 사용되지 않는 메모리가 점점 증가하여 전체 시스..
-
조합(Combination)과 순열(Permutation)Algorithm & Data Structure/Algorithm 2024. 5. 4. 17:28
조합 (Combination) 조합은 주어진 집합에서 몇 개의 원소를 선택할 때, 선택 순서를 고려하지 않고 몇 가지 방법으로 선택할 수 있는지를 나타냅니다. 다시 말해, 조합은 "n개 중에서 k개를 선택하는 방법의 수"를 의미합니다. 예를 들어, 'A', 'B', 'C' 세 개의 원소에서 두 개를 선택하는 조합을 생각해 보면, 가능한 조합은 ('A', 'B'), ('A', 'C'), ('B', 'C')로 총 세 가지입니다. 여기서 중요한 점은 순서가 결과에 영향을 주지 않는다는 것입니다. 즉, ('A', 'B')와 ('B', 'A')는 같은 조합으로 간주됩니다.package mainimport ( "fmt")// combination 함수는 재귀적으로 조합을 생성하고 출력합니다.func combi..
-
golang: 1급 시민(First-class citizen)이란?Back-End/Golang 2024. 4. 28. 22:20
프로그래밍 언어에서 "1급 시민" 또는 "1급 객체"라는 용어는 해당 언어의 요소가 다음과 같은 특성을 갖추었을 때 사용됩니다:변수나 데이터 구조 안에 담길 수 있음: 1급 객체는 변수에 할당될 수 있습니다. 예를 들어, 함수가 1급 객체인 언어에서는 함수를 변수에 할당할 수 있습니다.함수의 인자로 전달될 수 있음: 함수를 다른 함수의 인자로 전달할 수 있습니다. 이는 고차 함수(higher-order function)를 가능하게 합니다.함수의 결과로 반환될 수 있음: 함수에서 다른 함수를 결과로 반환할 수 있습니다. 이는 함수를 동적으로 생성하고 조작할 수 있음을 의미합니다.할당에 사용된 표현식 내에서 리터럴로 표현될 수 있음: 객체를 코드 내에서 직접적으로 리터럴 형태로 표현할 수 있어야 합니다. 예..
-
golang: Go 언어의 장점Back-End/Golang 2024. 4. 21. 22:31
Go 언어의 장점 요약 Go 언어의 장점들을 나열하고 그 이유를 설명하면 다음과 같습니다: 강력하고 정적 타입 시스템: 이유: Go는 컴파일 시 타입 체크를 수행합니다. 이는 런타임에 발생할 수 있는 오류를 최소화하고, 프로그램의 안정성과 유지 보수성을 향상시킵니다. 가비지 컬렉션 지원: 이유: 메모리 관리를 자동화하여 개발자가 메모리 누수와 같은 문제에 대해 걱정하지 않도록 합니다. 이로 인해 개발자는 애플리케이션 로직 구현에 더 집중할 수 있습니다. 동시성 프로그래밍 지원: 이유: '고루틴(goroutine)'과 채널을 사용하여 동시성을 쉽게 구현할 수 있습니다. 이는 멀티코어 프로세서의 이점을 최대화하고, I/O 대기 시간 등을 효율적으로 관리하여 애플리케이션의 성능을 향상시킵니다. 패키지 관리 시..
-
golang: 문자열 함수Back-End/Golang 2024. 4. 21. 13:39
Go 언어에서 문자열을 다루는 데 사용되는 주요 함수들은 대부분 strings 패키지 내에 있습니다. 여기서는 strings 패키지의 주요 함수들을 나열하겠습니다. 이 함수들은 다양한 문자열 조작 작업에 사용될 수 있습니다: Compare: 두 문자열을 비교하고, 첫 번째 문자열이 두 번째 문자열보다 작으면 -1, 같으면 0, 크면 1을 반환합니다. Contains: 하나의 문자열이 다른 문자열에 포함되어 있는지 확인합니다. ContainsAny: 주어진 문자들 중 하나라도 문자열에 포함되어 있는지 확인합니다. ContainsRune: 문자열이 특정 룬을 포함하고 있는지 확인합니다. Count: 하나의 문자열이 다른 문자열에 몇 번 등장하는지 세어 반환합니다. EqualFold: 두 문자열이 대소문자를 ..