목록분류 전체보기 (138)
DOing
💡 Disjoint Sets(서로소 집합)? 서로소 집합이란, 공통 원소가 없는 두집합을 의미한다. 왼쪽 그림에서 집합 A와 B는 서로소 관계이고, 오른쪽 그림에서 집합 A와 B는 서로소 관계가 아니다. 서로소 집합 자료구조는 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조이다. 서로소 집합 자료구조는 union-find 자료구조라고도 불린다. 사용되는 연산의 이름 자체가 union과 find이기도 하고, 두 집합이 서로소 관계인지 확인할 수 있다는 말은 각 집합이 어떤 원소를 공통으로 가지고 있는지를 확인할 수 있다는 말과 같기 때문이다. 💡 Disjoint Sets 동작 과정 Disjoint Sets 를 구현할 때는 트리 자료구조를 이용하여 집합을 표현한다. 트리로 부분집합을 ..
스프링의 본질은 엔터프라이즈 서비스 기능을 POJO에 제공하는 것이다 - Professional Spring Framework, 2005 🌱 POJO란? Plain Old Java Object, 단순한 자바 오브젝트 POJO란, 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다. 그러한 POJO에 애플리케이션의 핵심로직과 기능을 담아 설계하고 개발하는 방법을 POJO 프로그래밍이라고 할 수 있다. 🌱 POJO의 조건 1. 특정 규약에 종속되지 않는다. 자바언어와 곡 필요한 API외에는 종속되지 말아야한다. EJB2와 같이 특정 규약을 따라 만들게 하는 경우는 대부분 규약에서 제시하는 특정 클래스를 상속하도록 요구한다. 그럴 경우 ..
스프링 프로젝트를 마무리하고 하니, '내가 과연 스프링 프레임워크를 제대로 사용할것일까?'라는 의문이 들어서 요즘에는 스프링 프레임워크의 코드 예제가 많이 있는 서적보다 스프링 프레임워크의 개념에 대해 설명하는 서적을 보고 있다. 그중 '토비의 스프링 3(이일민 저)'의 8장 스프링이란 무엇인가를 읽고 정리하려고 한다. 🌱 스프링 정의 스프링에 대해 가장 잘 알려진 정의는 다음과 같다. 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크 👉 자바 엔터프라이즈 개발을 편하게? : 보안, 트랜잭션과 같은 엔터프라이즈 개발에서 요구되는 기술에 신경쓰지 않고 비지니스 로직에만 집중할 수 있게 만든다는 의미이다. 👉 오픈 소스? : 스프링의 오픈소스 라이브러리는 아파치 라이선스 2.0이..
Spring 프로젝트 중에 Domain, Entity, VO(value object)라는 용어들이 반복적으로 등장하지만, 정작 이들의 차이를 모르고 있다는 생각이들었다. 이에 관련되어 더 공부하고자 DDD START 도메인 주도 설계(최범균 저)의 책을 읽고 정리하였다. 💡 도메인(Domain) 온라인서점 사이트에서 책을 조회하고 구매한다고 가정하자. 개발자 입장에서 온라인서점은 구현해야할 소프트웨어의 대상이 된다. 온라인서점 소프트웨어는 상품의 조회, 구매, 결제등의 기능을 제공해야한다. 이때 온라인 서점은 소프트웨어로 해결하고자하는 문제 영역, 즉 도메인(domain)에 해당된다. 한 도메인은 다시 하위 도메인으로 나눌 수 있다. 예를 들어 '온라인 서점' 도메인은 다시 주문, 결제, 배송같은 하위 ..
💡 최단 경로 알고리즘 가장 짧은 경로를 찾는 알고리즘이다. 그래서 '길찾기'문제라고도 불린다. 학부 수준에서 사용하는 최단 거리 알고리즘은 다익스트라 최단 경로 알고리즘, 플로이드 워셜, 벨만 포드 알고리즘 이렇게 3가지이다. 이 중 플로이드 워셜 알고리즘을 이번 포스팅에서 다뤄보려고 한다. 💡 플로이드 워셜 알고리즘 다익스트라 알고리즘은 '한 지점'에서 다른 모든 노드까지의 최단경로를 계산하는 알고리즘이였다. 플로이드 워셜 알고리즘은 '모든 노드'에서 다른 모든 노드까지의 최단경로를 모두 계산하는 알고리즘이다. 플로이드 워셜 알고리즘은 노드의 개수가 N이라고 할때 N번만큼의 단계를 반복하며 '점화식'에 맞게 2차원 리스트를 갱신하기 때문에 다이나믹 프로그래밍으로 볼 수 있다. 구현 난이도가 다익스트라..
💡 최단 경로 알고리즘 가장 짧은 경로를 찾는 알고리즘이다. 그래서 '길찾기'문제라고도 불린다. 학부 수준에서 사용하는 최단 거리 알고리즘은 다익스트라 최단 경로 알고리즘, 플로이드 워셜, 벨만 포드 알고리즘 이렇게 3가지이다. 이 중 다익스트라 최단 경로 알고리즘을 이번 포스팅에서 다뤄보려고 한다. 💡 다익스트라 최단 경로 알고리즘 하나의 출발 노드로 부터 다른 모든 노드까지의 최단거리를 구하는 알고리즘이다. 단, '음의 간선'이 없을 때만 정상적으로 동작한다. 다익스트라가 연구한 알고리즘 중 가장 대표적인 알고리즘이기 때문에 간단하게 다익스트라 알고리즘이라고도 불린다. 다익스트라 알고리즘은 기본적으로 그리디 알고리즘으로 분류된다. 매번 가장 비용이 가장 적은 노드를 선택하는 과정을 반복하기 때문이다...
💡 다이나믹 프로그래밍 필요한 계산 값을 저장해두었다가 재사용하는 알고리즘 설계 기법이다. 큰 문제를 한번에 해결하기 어려울 때, 여러개의 작은 문제로 나누어 푸는 '분할 정복' 알고리즘이 있다. 이때 동일한 작은 문제들이 반복적으로 계산되는 경우가 생길 수 있다. 그 문제를 매번 재계산 하지 않고 값을 저장했다가 재사용하는 기법이 바로 다이나믹 프로그래밍이다. 메모리 공간을 약간 더 사용하여 시간을 획기적으로 줄일 수 있는 방법이다. 여담이지만 다이나믹 프로그래밍의 Dynamic은 동적 할당(Dynamic Allocation)의 Dynamic과 아무런 관계가 없다. 동적할당에서 Dynamic은 '프로그램이 실행되는 도중'에라는 의미이지만 다이나믹 프로그래밍에서 Dynamic은 고안자인 벨만(Richar..
💡 이진 탐색 알고리즘 탐색 범위를 반으로 좁혀가며 빠르게 탐색하는 알고리즘이다. 단, 데이터가 정렬되어 있어야지만 사용할 수 있다. 순차탐색의 시간 복잡도는 O(N)이지만 이진탐색의 시간복잡도는 O(logN)으로 빠르게 탐색이 가능하다. 만약 데이터의 탐색 범위가 2,000만이 넘어가면 이진탐색으로 문제에 접근해보는 것이 좋다. 💡 이진 탐색 동작과정 1. 시작점과 끝점 사이의 중간점을 지정한다. 중간점이 실수라면 소수점 이하는 버린다. 2. 중간점과 찾으려는 데이터를 비교한다. 3. 찾으려는 데이터가 중간점보다 크다면 시작점을 중간점 이후로 변경한다. 4. 찾으려는 데이터가 중간점보다 작다면 끝점을 중간점 이후로 변경한다. 5. 찾으려는 데이터가 중간점과 일치할때까지 1~4과정을 반복한다. 찾으려는 ..