다익스트라 VS 플로이드 워셜 다익스트라 알고리즘은 한 지점에서 다른 특정 지점까지의 최단 경로를 구하는 경우 사용할 수 있는 최단 경로 알고리즘이다. 플로이드 워셜 알고리즘은 모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우 사용할 수 있는 알고리즘이다. 다익스트라의 경우, 단계마다 최단 거리를 가지는 노드를 하나씩 반복적으로 선택한다. 그리고 해당 노드를 거쳐가는 경로를 확인하며, 최단 거리 테이블을 갱신하는 방식으로 동작한다. 그리디 알고리즘에 속한다. 플로이드 워셜의 경우 또한, 단계마다 거쳐 가는 노드를 기준으로 알고리즘을 수행한다. 하지만, 매번 방문하지 않은 노드 중에서 최단 거리를 갖는 노드를 찾을 필요가 없다는 점이 다익스트라와의 차이점이다. 다이나믹 프로그래밍에 속..
앞서 배운 대로 역할과 구현 즉, 인터페이스와 구현 객체로 나누어 하나의 예제를 개발할 것인데, 스프링의 도움 없이 순수한 자바만을 사용하여 개발을 할 것이다. 이를 통해 추후에 실제 요구사항의 변화가 발생했을 때, 정말 유연하게 대처가 가능한가 와 다형성, OCP, DIP가 잘 지켜졌는지를 확인하고 문제가 있다면 다음 포스팅에서 객체 지향의 원리를 적용하여 해결해 나가 보자. 목차는 다음과 같다. 프로젝트 생성 비즈니스 요구사항과 설계 회원 도메인 설계 회원 도메인 개발 회원 도메인 실행과 테스트 주문과 할인 도메인 설계 주문과 할인 도메인 개발 주문과 할인 도메인 실행과 테스트 프로젝트 생성 이번 프로젝트는 순수한 자바만을 사용하지만, 프로젝트를 Setting 할 때는 편의를 위해 스프링 부트를 사용..
스프링에 왜 객체 지향 이야기가 나올까? 스프링은 DI(Dependency Injection)을 통해서 OCP, DIP를 가능하게 지원한다. DI는 의존관계 주입, 의존성 주입이라고 하며, DI 컨테이너를 제공한다. DI 컨테이너는 자바의 객체들을 컨테이너 안에 넣어두고 이 안에서 의존관계를 연결해주고 주입해주는 기능을 제공하는 것이다. 이것을 활용하여 클라이언트 코드의 변경 없이 기능을 확장할 수 있다. 이제까지의 포스팅을 정리해보면, 모든 설계에 역할과 구현을 분리할 필요가 있다. 애플리케이션 설계도 공연을 설계 하듯이 배역(인터페이스, 역할)만 만들어두고, 배우(구현)는 언제든지 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계이다. 이것이 가능하려면 다형성 뿐만아니라, SOLID원칙도 ..
클린코드(Clean Code)로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리한 것이다. 이 5가지 원칙을 줄여 SOLID라 한다. SRP Single Responsibility principle(단일 책임 원칙) 하나의 클래스는 하나의 책임만 가져야 한다는 원칙이다. 하지만 정의만 이런 것이고 실제로는 하나의 책임이라는 것은 매우 모호하다. 책임이라는 것이 클 수도 있고 작을 수도 있다. 또한 문맥과 상황에 따라 다르다. 여기서 중요한 기준은 변경이다. 즉, 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것이라 볼 수 있다. OCP Open/Closed principle(개방-폐쇠 원칙) 5가지 중 가장 중요한 원칙으로, 소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 ..
들어가기에 앞서, 먼저 스프링에 대해 잠깐 알아보자. 스프링의 생태계 스프링은 단순한 하나의 개념이 아니라, 여러 가지 기술의 모음이라 볼 수 있다. 위의 그림을 살펴보면, 먼저 스프링의 가장 핵심이 되는 스프링 프레임워크, 여러 스프링 기술들을 편리하게 사용할 수 있도록 도와주는 스프링 부트는 스프링의 필수적인 요소이다. 스프링 데이터는 데이터베이스를 편리하게 사용할 수 있도록 도와주는 것이며, 제일 많이 사용하는 것은 스프링 데이터 jpa이다. 스프링 세션은 세션 기능을 편리하게 사용할 수 있도록 도와주는 것이며, 스프링 시큐리티는 보안과 관련된 것, 스프링 Rest Docs는 API 문서화를 편리하게 해주는 것이다. 마지막으로 스프링 배치는 배치 처리에 특화된 기술이며, 스프링 클라우드는 클라우드에..
라우터 구조 개요 라우터는 인터넷 상의 Network를 서로 연결해주는 매개체 역할을 한다. Input port function line termination = Physical Layer 담당 link layer protocol = Link Layer 담당 decentralized switching = 들어온 패킷을 forwarding table을 참조하여 도착된 패킷이 스위칭 구조를 통해 라우터가 어떤 출력 포트로 나갈지를 결정 라우팅 프로토콜 정보를 전달하는 패킷은 Input port에서 “Routing Process”로 전달된다. decentralized switching의 forwarding기법에는 2가지 있는데, destination-based forwarding은 전통적인 방식으로 오직 목적..