본문 바로가기

분류 전체보기74

[Algorithm] BOJ_18809_Gaaaaaaaaaarden - Go 오래간만에 Go를 사용해 통해 알고리즘을 풀어보았다. 감을 살리기 위해 적당한 난이도처럼 보이는 구현 문제를 건드려보았는데.. 쒯.. 내가 너무 어렵게 생각했을 수도 있지만 정말 다양한 것들을 엮어서 푼 것 같다.(뿌듯함 :D) 문제 링크 BOJ_18809_Gaaaaaaaaaarden 코드 package main import ( "bufio" "fmt" "os" ) type queue struct { data []pos } type pos struct { x, y int } func (q *queue) pop() pos { if len(q.data) == 0 { return pos{} } val := q.data[0] q.data = q.data[1:] return val } func (q *queue).. 2022. 4. 29.
[Go] 고루틴(GoRoutine) 심화(2) - 클로저 함수, 메모리 클로저 함수를 통해 고루틴을 생성한다면 어떤 일이 생길까? 그리고 이 부분에서 무엇을 배울 수 있을까? 책에서는 짧게 설명하고 넘어가는 부분이다. 하지만 나는 쉽게 이해할 수 없었고 그 이유를 찾기 위해 노력했다. 그리고 그 이유는 Go 언어가 메모리를 어떻게 사용하는지 모르기 때문인 것을 알 수 있었다. 그렇기에 이번 포스팅에서는 클로저 함수를 통해 고루틴을 생성하는 것에 대한 예제와 결과를 통해 Go에서 메모리를 어떻게 사용하는지 까지 정리해 보려 한다. 우선 짧은 예제를 살펴보자. 예제 코드 package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup val := "memory 1" wg.Add(1) go func() { defe.. 2022. 4. 28.
[Go] 고루틴(GoRoutine) 심화(1) - 합류지점 최근 고루틴에 대해 깊이 이해하고 사용하고 싶은 욕심이 있어 캐서린 콕스 부데이가 짓고 O'Reilly에서 출판한 Concurrency in Go 책을 읽으며 공부하고 있다. 하지만 어느 정도 용어에 대한 지식이 필요한 듯해 보이고 나는 아직은 그 정도 내공을 갖추지 못한 듯하다. 그렇기에 이렇게 블로그에 기록하며 공부하려 한다. 기존의 게시물에서는 고루틴을 사용하는 방법을 알아봤다면 이 게시물에서는 보다 풍부하게 사용하기 위한 원리를 함께 알아보고자 한다. 고루틴 간단한 고루틴을 사용하는 예시 코드를 보겠다. 코드 package main import ( "fmt" ) func main() { go sayHello() } func sayHello() { fmt.Println("hello") } 결과 고루.. 2022. 4. 16.
[Go] Go에서 DI는(1) - DI란? 우리나라는 왜 Java를 사용할까? Java 중에서도 왜 Spring 프레임워크를 사용할까? 단지 선점효과일까? 하지만 그렇게 생각한다 해도 개발에 있어 효율적이지 않다면 선점이 되지도 않았을테다. 그렇다면 Spring을 사용함으로써 얻는 이점이 무엇이길래 Spring을 사용할까? 나는 궁금해졌다. 그리고 확인해 보고싶었다. 그래서 나는 인프런에서 스프링 기본 강의를 결제해서 들어 보았고 사람들이 많이 사용하는 이유를 어렴풋이라도 이해할 수 있었다. Spring을 공부하고 사용한다면 가장 처음 배우고 가장 강조되는 개념인 DI(Dependency Injection), 의존성 주입. 어떠한 언어를 사용한다 해도 꼭 필요한 기술인 듯 했다. 프로젝트를 위해, 그리고 개발자를 위해. DI(Dependency .. 2022. 4. 9.
[Go] Go의 메모리 할당 들어가기 전 Java를 공부하기 시작하면서 JAVA가 어떻게 메모리를 사용하는지 확인하게 됐다. JAVA는 Static, Stack, Heap 이렇게 세 종류의 구분을 두어 메모리를 관리했고 이 부분은 다음에 다시 언급할 기회가 있을 듯하다. 그렇다면 Go는 어떨까? JAVA에서의 Static은 Class를 주로 저장하는 듯한데 Class가 없는 Go는 어떨까?라는 의문을 가지고 Go가 메모리를 사용하는 방법을 살펴보았다. Go의 메모리 할당 우선 Class가 없어서 인지는 모르겠지만 Go는 Stack과 Heap 두 종류로 구분돼 있음을 확인했다..! 그렇다면 이 두 메모리를 어떻게 사용하고 있을까? 같이 알아보도록 하자! Stack Stack을 사용할 때의 코스트는 적다.(가볍다.) Stack에 메모리.. 2022. 4. 8.
[Spring Boot] 스프링 컨테이너, @Bean, @Component 스프링 프로젝트에서 Configuration 관련 코드를 스프링 컨테이너에 Bean으로 등록시키는 데는 2가지 방법이 있다. 어노테이션 Bean을 사용하는 방법과 어노테이션 Component를 사용하는 방법이 그것이다. 해당 포스팅에서는 스프링 컨테이너, @Bean, @Component, 그리고 스프링 컨테이너에 등록된 Bean을 가져오는 방법을 기록해 보려 한다. 스프링 컨테이너 생성 방법 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext는 인터페이스이다. AnnotationConfigA.. 2022. 3. 29.