본문 바로가기
반응형

Study/Go21

[Go] Heap 자료구조를 사용하는 우선순위 큐 (Priority Queue) 서론 Go 에는 Priority Queue가 없다. 심지어 Queue 조차 없다. 그 이유는 예상컨데 너무 쉽게 Queue라 불리우는 자료구조를 구현할 수 있기 때문이 아닐까 싶다. 아무리 쉽지만 이해하지 않고 사용한다면 쉽게 느껴지지 않을테다. 내가그랬다.. 우선순위큐를 사용해야한다면 다른 언어를 통해 알고리즘을 풀어버린 나약한 선택을 했다.. 간단히 공부를 하고보니 예전에 예제를 보며 왜 이 복잡한 일을 개발자에게 맡기는거야! 라고 생각했지만 그 정도로 복잡한 내용이 아니었다. 살펴보자. Priority Queue 란? FIFO(First In First Out)의 특징을 가지는 자료구조인 Queue. 이 Queue 자료구조에서 우선순위를 주어 힙을 통해 우선순위를 기준으로 O(nlogn)의 시간 복.. 2021. 10. 4.
[Go] 클로저(Closure)를 활용하여 생성기(generator) 제작 클로저란? 클로저는 더 가까이란 뜻의 Closer가 아니라 닫힘을 의미하는 Closure이다. 일반적으로 함수 외부에서 작성된 데이터를 함수에서 사용하기 위해서는 매개변수를 사용하여 받은 값을 수정한 후 이를 리턴하는 방식을 사용한다. 하지만 이 클로저라는 기법을 사용한다면 함수 외부에서 작성된 지역변수를 함수 내에서 마음대로 접근하는 것이 가능해 진다. 예시 간단한 코드를 통해 알아보는 것이 가장 확실한 방법이 아닐까 한다. func main() { val := 0 f := func() { val++ } f() fmt.Println((val)) } 결과 : 1 생성기란? 하나의 분리된 캡슐화된 객체를 생성하는 패턴이라 생각할 수 있다. 클로저를 이용한 생성기 코드 import "fmt" func gen.. 2021. 10. 2.
[Go] 고루틴(Goroutine) 알고쓰기(2) - Block 처리방식, Channel 동시성과 병행성의 차이 그리고 고루틴의 간단한 사용법을 이전 포스팅에 남겼다. 이 포스팅은 조금 더 고루틴을 맛깔나게 쓰기위한 Channel에 대해 알아보려 한다. ( 고루틴의 간단한 사용법은 이전 포스팅 글에서 확인하시길 바란다. ) Channel이란? Channel은 Golang의 고루틴 간의 통신을 위한 수단. Channel은 Thread Safe한 Queue이다. Channel은 Golang에서 기본 자료형으로 주어지며 일급 객체의 역할을 한다. Channel의 표기법은 chan [자료형]이며 주고 받는 역할을 하는 양방향 channel, 주기만 또는 받기만 하는 단방향 channel을 지정할 수 있다. Channel은 레퍼런스 자료형이다. Channel은 Block 형태의 처리방식을 가진다. B.. 2021. 9. 17.
[Go] 고루틴(Goroutine) 알고쓰기(1) - 동시성, 병렬성 프로그래밍 그리고 고루틴 그냥 가져다 쓰면 되는줄 알았는데 공부할게 정말 많은 부분이었다. 간단히 기억하기 위해 포스팅을 하려 했으나 생각보다 모르는 부분이 많았고 공부할 가치가 있다 판단하여 조금 깊게 들여다 보았다. 동시성? 병렬성? 무어의 법칙을 아는가? 인텔의 공동 창업자인 무어가 반도체가 1년에 2배씩 빨라 질 것을 예언하였고 어느 시기까지는 들어 맞았다. 하지만 발열량과 같은 물리적 한계에 부딪혔고 더이상 무어의 법칙이 적용되기 어려운 시기까지 도달하게 됐다. 하지만 컴퓨터와 같은 기기들은 계속해서 빨라졌다. 해답을 찾은 것이다. 바로 반도체 하나의 성능을 높일 수 없으니 여러개의 반도체를 사용하기로...!( 공부하다 재밌어서.. + 연관 있음 ) 동시성 컴퓨터의 코어가 하나(싱글 코어)일 때를 생각해 보자. 우리는 .. 2021. 9. 1.
[Go] Json 활용 방법 JSON이란? JSON은 Key-Value 쌍의 형태로 인간이 보기에 알맞은 형태로 데이터 오브젝트를 표현해주는 표준 포맷이다. Value값에 사용할 수 있는 자료형으로는 수, 문자열, Bool, 배열, 객체, Null이 있다. 직렬화, 역직렬화란? 직렬화란 객체의 상태를 보관이나 전송 가능한 상태로 변환하는 것을 말한다. 직렬화된 상태의 객체를 다시 사용할 수 있는 객체로 변환하는 것을 역직렬화라 한다. GoLang에서 JSON을 사용하는 방법 기본 사용 방법 JSON을 사용하기 위해서는 기본적으로 데이터를 담을 수 있는 객체가 필요하다. 테스트에 객체로 사용할 구조체는 간단한 구조의 jsonTestStructure를 사용한다. type jsonTestStructure struct { TestNum i.. 2021. 8. 12.
[Go] 웹 서버(Web Server) 열기 Go가 정말 좋은점은 도큐먼트가 굉장히 잘 돼 있다는 점인듯 하다. 아주 간단한 함수에게도 자세한 주석과 도큐먼트에 정리가 잘 돼 있다. 이점을 잘 활용한다면 어렵지 않게 웹 서버와 만들고자 하는 웹을 구축할 수 있을 것이다. Open Web Server package main import ( "fmt" "log" "net/http" ) const port string = ":4000" func home(rw http.ResponseWriter, r *http.Request) { fmt.Fprintf(rw, "%s", "Hello go web") } func main() { http.HandleFunc("/", home) fmt.Printf("test on http://localhost%s\n", por.. 2021. 7. 27.
반응형