어떤 서비스나, 제품의 소프트웨어를 개발할때 설계가 굉장히 중요하고 설계을 어떻게 잡느냐에 따라 생산성과 비용이 판이하게 달라집니다. 그러한 아키텍쳐 관점 중의 하나가 바로 클린아키텍쳐인데요. Go 언어에서는 어떻게 적용하고 구성하는지 알아보도록 하겠습니다. Clean Architecture Go 언어에서 Clean Architecture는 Robert C. Martin의 'Clean Architecture' 책에서 제시한 소프트웨어 아키텍쳐의 일종입니다. 이 아키텍쳐는 의존성 역전 원칙(Dependency Inversion Principle)을 중심으로 구성되어 있고, 비즈니스 로직과 프레임워크 또는 라이브러리와 같은 기술적 세부 사항을 분리하는 것을 강조합니다. Clean Architecture는 다..
흔히 개발하다보면 디자인 패턴에 대한 이야기를 쉽게 접할 수 있는데요, 어떠한 구조로 개발을 하느냐는 글을 쓸때나 건물을 지을때나 설계 관점에서 굉장히 중요합니다. 건축물을 예를 들어 잠실타워같은 모습의 건물을 짓기위해선 어떤 공법을 사용하는게 좋을까요? 100층이 넘는 건물을 지을 때 비단 5층짜리 건물을 지을 때 공법과는 분명 다른 점들이 있을 것입니다. 그 반대의 경우도 마찬가지일 것이구요. 앞으로 디자인 패턴 이야기도 해보려고 하는데요, 디자인 패턴하면 떠오르는 패턴은 여러분은 어떤 것들이 있으신지요? 가장 많이 접하는 싱글톤! 이 있겠지만 오늘은 어답터 패턴에 대해서 이야기해보려고 합니다. 어답터 패턴(Adapter Pattern) 위키피디아의 정의에 따르면 어답터 패턴은 클래스의 인터페이스를 ..
어떤 솔루션이 일출, 일몰 시간을 기반으로 판단할 때 서버에서 일출/일몰 시간이 필요한데요. 다만 각 나라별로 일출, 일몰의 시간이 다르기 때문에 정확한 값은 일출, 일몰 시간을 제공해주는 자료를 통해서 확인 할 수 있습니다. 제공하는 API 사용하는 방법 https://sunrise-sunset.org/api Sunset and sunrise times API - Sunrise-Sunset.org Sunset and sunrise times API We offer a free API that provides sunset and sunrise times for a given latitude and longitude. Please note that attribution is required if you u..
조합의 알고리즘은 이전에 설명했던 순열과는 다르지만 알고리즘 문제에 굉장히 많이 나오는 유형중의 하나이다. 거의 공식같이 사용되기 때문에 잘 이해햐두고 변행해서 쓰면 알고리즘 풀이에 유용할 듯하다. 조합은 Combination으로 5개중 3개를 선택하되 중복을 허락하지 않는 것을 의미한다. 중학교인가 고등학교 수학시간에 배웠던 것 같은 기억이 나는데 수학적인 계산 법은 아래와 같다. 5 X 4 X 3 / 3 X 2 X 1 = 10 가지, 그래서 5개중 3개를 선택하되 중복되지 않는 경우는 10가지 이다. 근데 중복되는게 어떤건지 햇갈리다면 다시 한번 봐보자. 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 4 5 2 3 5 3 4 5 눈치챗을지 모르지만, 1 2 3 과 2 ..
오늘 구해볼 내용은, 바로 소수 구하기이다.알고리즘 문제중에 메인보다는 곁들여져서 문제가 나오는 경우가 많은데 이를테면, 어떤 순열을 구해서 그 수가 소수인지 판별 후 최대값을 구해보라. 이런식의 문제류가 많은데, 소수의 정의부터, 어떻게 구할 수 있는지 한번 생각해보도록 하자.#소수란?1과 자신만을 배수로 갖는 수이다. 이를 테면 2, 3, 5, 7, 11... 이런수를 소수라고 할 수 있는데 1은 소수가 아니다. 사실 100이라는 수를 입력받았을때 소수인지 아닌지 판별할 수 있는 방법은 무엇일까? 2부터 100까지 쭈욱 나눠보고 100이 아닌 수중에 나눠진다면 소수가 아니기에 아래와 같이 구현할 수 있다.#include int main(void){int num;int flag = 0;scanf("%d..
이번에 풀어볼 알고리즘은 카프리카 상수 구하기이다. 어떤 자연수 n이 있을때, d(n)을 n의 각 자릿수 숫자들과 자기 자신을 더한 숫자라고 정의하자. 예를 들어 d(91) = 9 + 1 + 91 = 101 이다. 이 때, n을 d(n)의 제너레이터(generator)라고 한다. 위의 예에서 91은 101의 제너레이터 이다.어떤 숫자는 하나 이상의 제너레이터를 가지고 있는데 101의 제너레에티는 91뿐 아니라 100도 있다. 그런데 반대로 제너레이터가 없는 숫자들도 있고, 이런 숫자는 수학자 카프리카가 셀프넘버라 이름을 붙였다.예로 1, 3, 5, 7, 9, 20, 31은 셀프 넘버들이다.입력) 첫 번째 줄에 테스트 케이스의 수 T가 주어진다.(1
전 시간에 순열에 대해서 재귀를 이용해 구현해 보았다.DFS(Depth First Search)라고도 불리는 이 방법은, 처음부터 끝까지 탐색해서 찾아보고 다시 올라와서 그 다음 찾는 방식인데 이제 여러분은 DFS 알고리즘을 기본적으로 알고 있는 셈이라고 생각하면 된다. DFS는 결국 Backtracking이라고 불리는 알고리즘 문제와 유사하기 때문에 한번에 순열, DFS, Bactkracking 문제를 풀 어보면서 감을 늘려야 한다. 이번 시간엔 실전 문제를 한번 해볼까 한다. 다음은 문제이다. 3X3 마방진이라는 수열이 있다.아래 수와 같이, 가로행의 합과, 세로열의 합이 모두 같은 수가 되게 만드는 경우 마방진 수열이라고 한다. 1 2 3 3 2 1 2 2 2 첫번째 열 합 : 1 + 2 + 3 =..
수학에서 순열을 공부해 본 기억은 있지만 당체 생각이 나지 않는다, 다만 순열과 조합의 개념을 이용한 알고리즘 문제는 굉장히 많다. # 순열보통 4H3 이런식으로 표기하는데 4개의 숫자 중 3개를 선택해서 나타낼 수 있는 모든 수열이 되겠다.(중복 포함)계산은 4 X 3 X 2 = 24가지 인데 어떤 수열이 나오는지 보자.1, 2, 3, 4 중에 3가지 숫자를 뽑아서 만들어 보면 진짜 24개가 나온다.123 124 132 134 142 143 213 214 231 234 241 243312 314 321 324 341 342412 413 421 423 431 4323개의 숫자를 뽑을때 중복을 허용한다는 의미는 같은 숫자를 뽑을 수 있다는게 아니라, 123, 132 같이 숫자를 같은 거를 뽑았으나 위치가 ..