[JAVA] 너비 우선 탐색(BFS, Breadth-First Search)
·
코딩테스트/알고리즘
BFS: 너비우선탐색탐색과정시작하는 칸을 큐에 넣고 방문했다는 표시를 남김큐에서 원소를 꺼내어 그 칸에 상하좌우로 인접한 칸에 대해 3번을 진행해당 칸을 이전에 방문했다면 아무 것도 하지 않고, 처음으로 방문했다면 방문했다는 표시를 남기고 해당 칸을 큐에 삽입큐가 빌 때까지 2번을 반복처음 방문 했을 때만 방문 표시를 남기기 때문에 모든 칸이 큐에 1번씩 들어간다. 따라서 시간복잡도는 칸이 N개일 때 O(N)이다. 같은 원리로 행이 R개, 열이 C개인 2차원 평면을 BFS 탐색하면 시간복잡도는 O(RC)가 될 것이다. import java.util.*;public class Main { static int[][] board = { {1, 1, 1, 0, 1, 0, 0, 0, 0, 0},..
[JAVA] 스택(Stack)과 큐(Queue)
·
코딩테스트/알고리즘
스택이란?원소의 추가가 O(1)원소의 제거가 O(1)제일 상단의 원소 확인이 O(1)제일 상단이 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능LIFO(Last-in, First-Out)가 기본 원리.대표 내장함수 : PUSH, PEEK, POP자바에서 Stack 사용하기자바에서 스택은 Stack 클래스를 구현하여 제공하고 있다.Stack st = new Stack();메서드empty() Stack이 비어있는지 알려줌비어있으면 true, 아니라면 false를 반환peek() Stack의 맨 위에 저장된 객체를 반환Stack에서 객체를 꺼내지는 않음, Stack이 비었다면 null을 반환pop() Stack의 맨 위에 저장된 객체를 꺼냄push() Stack에 지정한 객체를 저장s..
[Clean Architecture 정리] 34장. 빠져 있는 장
·
IT/architecture
1.계층 기반 패키지2.기능 기반 패키지3.포트와 어댑터4.컴포넌트 기반 패키지34장. 빠져 있는 장클린 아키텍처는 잠시 제쳐놓고, 설계, 코드 조직화와 관련된 접근법을 살펴본다.I 계층기반패키지1.가장 단순한 첫번째 설계방식이고 전통적인 수평 계층형 아키텍처이다.2. 계층기반패키지란 ? 기술적인 관점에서 해당 코드가 하는일을 기반해 그 코드를 분할한다. 각 계층은 “업무규칙”으로 유사한 종류의 것들을 묶는 도구로 사용된다. 엄격한 계층형 아키텍처 경우 계층은 반드시 바로 아래 계층에만 의존해야 한다.[34.1 계층기반 패키지]OrdersController : 웹기반 요청처리OrdersService : 주문관련 “업무규칙" 정의OrdersServiceImpl : OrderService구현체OrdersRe..
[Clean Architecture 정리] 29장. 클린 임베디드 아키텍처
·
IT/architecture
클린 임베디드 아키텍처"소프트웨어는 닳지 않지만, 펌웨어와 하드웨어는 낡아 가므로 결국 소프트웨어도 수정해야 한다." - 더그 슈미트→ 소프트웨어는 닳지 않지만, 펌웨어와 하드웨어에 대한 의존성을 관리하지 않으면 안으로부터 파괴될 수 있다.임베디드 엔지니어가 아닌 당신도 코드에 SQL을 심어 놓거나 개발하는 코드 전반에 플랫폼 의존성을 퍼뜨려 놓는다면, 본질적으로 펌웨어를 작성하는 셈이다. 안드로이드 앱 개발자 역시 업무 로직을 안드로이드 API로부터 분리하지 않은다면 펌웨어를 작성하는 셈이다. 앱티튜드 테스트(App-titude test)켄트 벡 Kent Beck은 소프트웨어를 구축하는 세가지 활동을 다음과 같이 기술했다.-먼저 동작하게 만들어라-그리고 올바르게 만들어라코드를 리펙토링해서 타인이 이해하..
[Clean Architecture 정리] 28장. 테스트 경계
·
IT/architecture
테스트는 시스템의 일부이며, 아키텍처에도 관여한다.시스템 컴포넌트인 테스트아키텍처 관점에서는 모든 테스트가 동일하다.TDD 로 생성한 아주 작은 테스트이든, 아니면 대규모의 FitNesse, Cucumber, SpecFlow, JBehave 테스트이든, 이들 테스트는 아키텍처적으로 모두 동등하다.세부적이며 구체적인 것으로, 의존성은 항상 테스트 대상이 되는 코드를 향한다.실제로 테스트는 아키텍처에서 가장 바깥쪽 원으로 생각할 수 있다.시스템 내부 어떤 것도 테스트에는 의존하지 않으며, 테스트는 시스템의 컴포넌트를 향해, 항상 원의 안쪽으로 의존한다.1) 테스트는 의존성 규칙을 따른다.테스트는 세부적, 구체적인 것으로 의존성은 항상 테스트 대상이 되는 코드를 향한다.실제로 테스트는 아키텍처에서 가장 바깥쪽..
[Clean Architecture 정리] 27장. '크고 작은 모든' 서비스들
·
IT/architecture
서비스 지향 아키텍처(SOA)와 마이크로서비스아키텍처(MSA)는 최근에 큰 인기를 끌고 있는 이유는 다음과 같다.서비스를 사용하면 상호 결합이 철저하게 분리되는 것처럼 보인다.서비스를 사용하면 개발과 배포 독립성을 지원하는 것처럼 보인다.나중에 보겠지만, 이 역시도 일부만 맞는 말이다SOA: 기존 애플리케이션들의 기능을 비즈니스적인 의미가 있는 기능 단위로 묶고, 표준화된 호출 인터페이스를 통해 서비스라는 소프트웨어 컴포넌트 단위로 재조합한 후, 이 서비스들을 서로 조합하여 업무 기능을 구현한 애플리케이션을 만들어내는 소프트웨어 아키텍처MSA: 여러 개의 작은 서비스로 구성되어 각 서비스가 독립적으로 개발되고 배포되는 구조SOA와 마이크로서비스의 차이점 자세히서비스 아키텍처?서비스를 사용한다는 것은 본질..
[Clean Architecture 정리] 26장. 메인(Main) 컴포넌트
·
IT/architecture
들어가며모든 시스템에는 최소 하나의 컴포넌트가 존재함.이 컴포넌트가 나머진 컴포넌트를 생성, 조정, 관리함.저자는 이 컴포넌트를 메인(Main)이라고 부름.궁극적인 세부사항메인 컴포넌트는 궁국적인 세부사항으로 가장 낮은 수준의 정책임.메인은 팩토리, 전략, 시스템 전반에 필요한 객체들을 생성하고 더 높은 수준에 정책에 제어권을 넘긴다.메인은 클린 아키텍처에서 가장 바깥 원에 위치하는 지저분한 저수준 모듈임.메인은 고수준의 시스템을 위한 모든것을 로드한 후 제어권을 고수준의 시스템에게 넘김.→ 예를들면 책에 내용중인 움퍼스 게임에서도 main 함수에서 게임의 메인 루프, 입력 명령어 해석을 처리하지만 명령어의 실제 처리는 다른 고수준 컴포넌트로 위임시킴.아래 예제 코드는 최신 움퍼스 사냥 게임(Hunt t..
[Clean Architecture 정리] 23장. 프레젠터와 험블 객체
·
IT/architecture
험블 객체 패턴테스트하기 어려운 행위와 테스트하기 쉬운 행위를 분리하기 쉽게 하는 목적으로 고안행위를 두개의 모듈이나 클래스로 나눈다. 이들 모듈 중 하나가 험블이다.가장 기본적인 본질은 남기고, 테스트 하기 어려운 행위를 모두 험블 객체로 옮긴다.GUI의 경우 화면을 보며 요소들이 필요한 위치에 표시되었는지 단위 테스트가 어려움.하지만 GUI에서 수행되는 행위는 쉽게 테스트가능.이 부류의 행위를 험블 객체 패턴을 사용하면 프레젠터와 뷰로 나눌 수 있음.프레젠터와 뷰뷰는 험블객체이고 테스트하기 어렵다.뷰는 데이터를 GUI로 이동시키지만, 데이터를 직접 처리하지 않는다.프레젠터는 테스트하기 쉬운 객체다.프레젠터의 역할은 애플리케이션(server)으로부터 데이터를 받아 화면에 표현할 수 있는 포맷으로 만드는..
[Clean Architecture 정리] 22장. 클린 아키텍처
·
IT/architecture
험블 객체 패턴테스트하기 어려운 행위와 테스트하기 쉬운 행위를 분리하기 쉽게 하는 목적으로 고안행위를 두개의 모듈이나 클래스로 나눈다. 이들 모듈 중 하나가 험블이다.가장 기본적인 본질은 남기고, 테스트 하기 어려운 행위를 모두 험블 객체로 옮긴다.GUI의 경우 화면을 보며 요소들이 필요한 위치에 표시되었는지 단위 테스트가 어려움.하지만 GUI에서 수행되는 행위는 쉽게 테스트가능.이 부류의 행위를 험블 객체 패턴을 사용하면 프레젠터와 뷰로 나눌 수 있음.프레젠터와 뷰뷰는 험블객체이고 테스트하기 어렵다.뷰는 데이터를 GUI로 이동시키지만, 데이터를 직접 처리하지 않는다.프레젠터는 테스트하기 쉬운 객체다.프레젠터의 역할은 애플리케이션(server)으로부터 데이터를 받아 화면에 표현할 수 있는 포맷으로 만드는..
[Clean Architecture 정리] 21장. 소리치는 아키텍처
·
IT/architecture
소리치는 아키텍처건물의 청사진을 살펴보고 있다고 상상해보자. 아키텍트가 작성한 건물에 대한 일련의 계획을 보여주고 있다. 계획서가 사람이 거주 할 주택이라면 정문, 거실로 연결되는 현관, 그리고 부엌 가족방 등이 있을 가능성이 높다. 이러한 계획서를 보면 이건 한 가족이 사는 주택이라는 느낌을 받을 것이다. 다시 말해, 아키텍처가 난 집이야!!라고 소리칠 것이다.자, 여러분의 애플리케이션 아키텍처는 뭐라고 소리치는가? 상위 수준의 디렉터리 구조, 최상위 패키지에 담긴 소스 파일을 볼 때, 이 아키텍처는 "헬스케어 시스템이야!", "재고 관리 시스템이야!"라고 소리치는가??아니면 "스프링이야!", "ASP야!!"라고 소리치는가??- 의도를 우리에게 소리치는 아키텍처아키텍처의 테마이바 야콥슨(Ivar Jac..