본문 바로가기

반응형

IT

(30)
[Golang] 채널로 큐(Queue)를 만들어보자! 이번에는 번외 프로젝트로 큐를 만들어보도록 하자. 이 프로젝트를 통해 Golang의 채널(chan)이라는 연산자/자료형이 갖는 성질을 터득해볼 수 있다. 소스 코드는 아래와 같다. 우리는 5칸 짜리 큐를 만들고, 1, 2, 3을 차례대로 넣었다가 Pop 시킬 것이다. // making queue with Go channel package main import "fmt" type Queue struct { item chan int } // save inputs func (q *Queue) Append(val int) { q.item
[Golang] Go Routine (고 루틴) - Golang의 꽃 [기본] Golang에는 Go Routine(이하 "고루틴")으로 불리는 동시성 예약어가 있다. 즉, main 함수를 돌리면서 순차적이 아니라 익명함수나 함수를 동시에 실행시킬 수 있다는 뜻이다. 바로 아래 예제를 살펴보자. // Go Routine package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup var cnt int = 10 var n int = 1 for i := 0; i < 10; i++ { wg.Add(1) go func(n int) { defer wg.Done() cnt-- switch n { case 1: fmt.Println("I'm", n, "st Go Routine! :D and now cnt is:", cnt) c..
[Golang] Go Routine (고 루틴) - Golang의 꽃 [심화] 이 론 어느 프로그래밍 언어나 해당 언어만의 강점, 혹은 "꽃"이라고 불릴 만한 것이 있다. 예를 들어 C언어의 꽃이라고 한다면 누가 물어도 "포인터"일 것이며, Python 같은 경우 "Life is too short, you need Python."으로 대표되는 "초고도의 생산성"일 것이다. (필자의 경우 이 초고도의 생산성이 파이썬의 에 따라 Call by Assignment로 자료형을 다루기 때문이 아닐까 조심스레 추측해본다.) 그렇다면, Go언어에서는 "Go Routine"이 있다. (이하 "고루틴") 고루틴은 가벼운 스레드와 같은 것으로, 현재 수행 흐름과 별개의 흐름을 만들어준다. 스레드는 으레 SW직군 면접 질문에 나오는 단골 질문인 "프로세서와 스레드의 차이점이 뭔가요?"에서 단 한 줄로..
[Golang] 문자열과 문자열의 종류 Golang에서는 char 자료형이 없다. 대신 string 자료형이 굉장히 유연하고 유용하게 사용된다. string 자료형은 크게 2 종류로 나뉜다. Raw String Literal: Back Quote(` `)로 둘러싸인 string. '\n' 등을 NewLine으로 해석하지 않고 있는 그대로 표기한다. 즉, 여러 줄의 문자를 치기 좋다. 주의할 점: 작은 따옴표(' ')가 아닌, shift와 같이 누르면 물결표(~)가 나오는 문자인 Back Quote(` `)를 사용해야한다! Interpreted String Literal: 큰 따옴표(" ")로 둘러싸인 string. 복수라인으로 선언할 수 없으며 연산자들을 제대로 반영한다. C/C++의 String과 비슷하게 사용 가능하다. Raw String..
[Golang] 데이터 타입 (자료형) 불대수 자료형 bool 문자열 자료형 string (immutable: 생성 후 변경 불가능) 정수형 자료형 int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr Float 및 복소수 자료형 float32 float64 complex64 complex128 기타 byte: byte 코드(단위: unsigned 8-bit) rune: 유니코드 코드(단위: signed 32-bit) 채널 chan: 추후 배울 고 루틴(Go Routine)에서 사용될 채널형 자료형
[Golang] Go 예약어 (선점 키워드) 아래의 25개의 예약어는 미리 정의되어 있는 키워드로써 변수명, 상수명, 함수명 등에 사용될 수 없다. break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
[Golang] 변수와 상수 변수와 상수의 문법적 선언은 다음과 같다. (변수/상수) - 변수명 - ([])(변수 타입) = (값) 괄호 안의 것은 생략 가능하다. 변수는 var로 시작하며 상수는 const로 시작한다. Golang에서 변수와 상수는 함수 밖에서도 사용 가능하다. //예시 var a int = 16 const b char = 'c' var s []byte = 'abcd' var c float32 Assignment Statement (:=) a := 1 s := "Hello, World!" 단, Assignment Statement는 함수 안에서만 사용할 수 있으며, 함수 밖에서 사용하기 위해서는 반드시 var로 선언해줘야한다. 복수의 상수 한꺼번에 쓰기 const a = 10 const b = 15 const c ..
[C] 백준(BOJ) - 1193 분수찾기 이번 포스트는 처음으로 Python이 아닌 C로 풀어보는 문제이다. 원래 필자는 임베디드 개발로 개발을 시작했기 때문에 C가 주언어였고, 처음 백준을 접했을 때에는 C로 문제를 풀었다. 하지만 취업을 위한 코딩 테스트 준비에서 C의 비효율성(시간복잡도나 CS적 측면이 아닌 문제 풀이를 위한 비생산성)의 문제로 Python으로 갈아타게 되었다. 그래서 이번에는 어떤 문제를 풀까, 하다가, 옛날에 C로 풀었던 규칙성 문제를 찾게 되어 C 코드를 올릴까 한다. 한 번 바로 살펴보도록 하자. 소스 코드 //BOJ 1193 분수찾기 #include int main() { int i = 1, j = 2, k = 1, tmp = 0, cnt = 1, n = 0, m = 0; scanf("%d", &i); while ..

반응형