본문 바로가기

분류 전체보기90

[그래프] 다익스트라 알고리즘 (Dijkstra algorithm) 다익스트라 알고리즘 에지에 가중치가 있는 그래프(weighted graph)에서 최단 경로를 찾는 알고리즘 에지의 가중치가 양수일때만 사용 가능하다. 시작 노드 S로부터 다른 모든 노드까지의 최단 경로를 찾는다. 기본 원리 필요한 자료구조 노드 사이의 관계를 표현할 그래프: graph 시작 노드로부터 각 정점까지의 거리를 기록할 배열: distance 최단 경로가 확정된 노드를 꺼내올 최소힙: min_heap 우선 시작 노드를 제외한 모든 노드의 비용을 가장 큰 값(이를테면, 무한대)으로 초기화한다. 시작 노드를 최소힙에 넣는다. 최소힙에서 노드를 꺼낸 후 인접한 노드를 확인한다. 이때, 인접한 노드로 이동하는 비용(현재까지의 비용+이동하는데 드는 비용)이 해당 노드에 기록되어있는 값보다 작다면? 값을 .. 2021. 7. 27.
[정렬] 퀵정렬 (Quick Sort) 앞에서 살펴본 선택 정렬, 삽입 정렬, 버블 정렬은 모두 구현은 간단하지만 느린 정렬 알고리즘이었다. 이번 글에서 살펴볼 퀵 정렬은 가장 많이 쓰이는 정렬 알고리즘이며 분할과 정복을 기반으로 하는 알고리즘이다. 평균적인 시간 복잡도는 O(NlogN)이다. 기본 아이디어 우선 배열 안에서 임의의 요소를 고른다. 이 요소를 피벗(pivot)이라고 부른다. 설명을 위해 중간에 위치한 원소를 피벗으로 잡았지만, 아무 원소나 잡아도 상관없다. 이 피벗을 선택하는 방법에도 여러 알고리즘이 있다. 가장 왼쪽의 요소를 피벗으로 삼는 방법도 있고, 랜덤으로 선택하는 방법도 있고, 또 가장 오른쪽의 요소를 피벗으로 삼는 방법도 있는데, 최종적인 성능은 모두 비슷하다. 피벗을 잡았으면, 배열을 순회하면서 피벗보다 작은 쪽과.. 2021. 7. 27.
[JPA] JPA는 왜 사용하나요? JPA란 무엇인가 JPA(Java Persistence API)는 javax.persistence 패키지에 정의되어 있는 자바 진영의 ORM 기술 표준이다. ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매팡한다는 것인데, 쉽게 말하면 객체를 데이터베이스에 저장할 때 마치 자바 컬렉션에 저장하듯이 SQL문을 직접 작성하지 않고도 프로그래밍할 수 있도록 도와주는 기술이다. JPA는 자바 ORM 기술에 대한 API 표준 명세, 즉 인터페이스의 집합이다. 따라서 JPA를 사용하려면 JPA를 구현한 ORM 프레임워크를 사용해야한다. 대표적으로 하이버네이트, EclipseLink, DataNucleus 등이 있다. 출처: 자바 ORM 표준 JPA 프로그래밍 왜 JPA를 사용.. 2021. 7. 13.
[SpringMVC] 스프링 MVC의 구조를 이해해보자 (2/3) V2: JSP 포워드 중복 제거 이전 포스팅에서 단순히 프론트 컨트롤러만 도입한 V1 을 만들어봤다. 이때는 단순히 프론트 컨트롤러를 도입하는 것에 의의를 두고 딱히 설계상 진보된 점은 없었다. 이번에는 V1에서 조금 더 진보된 형태인 V2를 만들어본다. 이번에는 V1에 화면을 그리는 책임을 가지는 오브젝트인 View를 도입해서 JSP를 포워드하는 코드의 중복을 없애보도록 하겠다. 아래의 코드 말이다. RequestDispatcher requestDispatcher = request.getRequestDispatcher(viewPath); requestDispatcher.forward(request, response); V2의 구조는 아래와 같다 이번에는 Controller가 View를 반환하는데, Co.. 2021. 7. 9.
[SpringMVC] 스프링 MVC의 구조를 이해해보자 (1/3) 애너테이션 기반의 스프링 MVC는 정말 편리하다. 얼마나 편리하나면 그 구조를 모르고 사용할때는 마치 마법처럼 느껴질 정도이다… 나는 그냥 문자열만 반환했는데 어떻게 뷰를 찾는건지, 나는 그냥 객체를 반환했는데 어떻게 Json으로 변환해서 HTTP 메시지 바디에 값을 입력하는지… 또 어떻게 컨트롤러의 파라미터에 맞춰서 필요한 컨트롤러를 동작시키는지… 이 과정이 어떻게 일어나는지 정확히 알려면 RequestMappingHandlerAdapter와 HttpMessageConverter, ArgumentResolver의 동작 방식과 구조를 알아야한다. 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의를 들으면서 스프링이 어떤 구조로 이런 다양한 변화에 맞게 컨트롤러를 호출하고 뷰를 반환하는지 .. 2021. 7. 9.
[토비의스프링] Ch.1-(2) 스프링 IoC, 싱글톤, DI 본 포스팅은 을 읽고 공부하면서 이해한 내용을 정리한 것입니다. 정확하고 자세한 내용은 반드시 원문 서적에서 확인바랍니다. 스프링의 IoC 이전 포스팅에서 코드를 리팩토링하면서 IoC를 적용하는 과정을 살펴봤다. 이렇게 그냥 IoC를 적용하는 것과 스프링을 이용하는 것에는 어떤 차이가 있을까? 스프링을 사용하면 아주 편리하게 IoC를 적용할 수 있음은 물론이고 스프링 컨테이너가 제공하는 여러 기능적 이점을 얻을 수 있다. 우선 기존의 코드에 스프링을 적용해보자. 스프링 적용 스프링에서는 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 Bean이라고 부른다. 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 Bean Factory라고 부른다. 보통 빈 팩토리보다는 이를 좀 더 확.. 2021. 7. 8.