본문 바로가기

🧑🏻‍💻 Dev/Java

(12)
[디자인 패턴] 템플릿 메서드 패턴 Java를 공부하다 보니 상속을 통한 확장성에 대한 얘기를 많이 접해볼 수 있었다. 그중에서도 지금 공부하고 있는 스프링 프레임워크에서 많이 사용하고 있는 디자인 패턴인 "템플릿 메서드 패턴"에 대해서 짧게 적어보려고 한다. 먼저 디자인 패턴이란 무엇인가? 소프트웨어 설계를 할 때 자주 만나는 문제들이 존재한다. 반복되는 문제들을 해결할 수 있는 해결방안이 정해져 있으면 좋지 않을까? 그래서 있는 존재하는 것이 디자인 패턴입니다. 즉, 디자인 패턴이란 소프트웨어 설계 시 특정 상황에서 자주 만나게 되는 문제를 해결하기 위해 사용할 수 있는 재사용이 가능한 솔루션을 의미한다. 이제 템플릿 메서드 패턴에 대해서 알아봅시다. 템플릿 메서드의 특징은 다음과 같습니다. 1. 추상 메서드, 구현된 메서드를 이용하여..
[자바 자료구조] 스택(Stack)과 큐(Queue) 📘 스택과 큐 (Stack / Queue) 📖 Stack (스택) 스택 자료구조는 마지막에 들어간 데이터가 제일 먼저 나오는 LIFO(Last In First Out) 구조입니다. 자바에서는 스택을 Stack class로 구현하여 제공하고 있어서 아래와 같이 사용할 수 있습니다. Stack stack = new Stack(); 스택 활용의 간단한 예시로는 홈페이지의 뒤로가기, 앞으로가기 버튼의 기능과 같습니다. 초기 상태 (현재 있는 페이지는 "구글") BackStack ["네이버", "다음", "구글"] ForwardStack [] 뒤로가기 버튼을 눌렀을 때 (현재 있는 페이지는 "다음") BackStack ["네이버", "다음"] ForwardStack ["구글"] 뒤로가기 버튼을 다시 한번 눌렀을 ..
[자바 알고리즘] Greedy Algorithm (그리디 알고리즘) 📘 Greedy Algorithm (그리디 알고리즘) 📖 그리디 알고리즘이란? 미리 정한 기준에 따라서 매번 가장 좋아보이는 답을 선택하는 알고리즘을 말한다. 즉, 다시 말해 백트래킹을 하여 내가 선택한 결과에 대해서 검증하지 않고, 이미 어떤 선택을 했다면 다른 선택의 가능성을 전혀 고려하지 않는다. 그래서 그리디 알고리즘은 속도가 빠르다는 장점이 있지만, 다른 선택의 가능성을 고려하지 않기 때문에 생기는 문제점이 존재한다. 그 문제점은 바로 그리디 알고리즘을 통해 나오는 결과 값이 항상 최적의 값이 될 수 없다는 것이다. 📖 그리디 알고리즘의 문제점 예를 들어 노드 1번에서 노드 5번까지 가는 길이 아래 그림 처럼 존재한다고 가정하고, 우리는 가장 최적의 값(가까운 거리)을 선택하면서 직진해 나갈 것..
[자바 알고리즘] DFS와 BFS 📘 DFS (Depth First Search) 📖 DFS란? 깊이 우선 탐색이라고 하며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘입니다. 📖 DFS 동작 방식 스택(Stack) 자료구조를 사용합니다. 탐색을 시작할 노드를 스택에 넣고, 방문 처리를 진행합니다. 방문하지 않은 근접 노드가 존재한다면 스택에 넣고, 방문 처리를 진행합니다. 만약 근접 노드가 모두 방문처리가 되어있다면 해당 노드를 스택에서 제거합니다. 위 과정을 반복해서 진행하고, 더이상 진행할 수 없을 때 탐색을 종료합니다. (스택이 비어있을 때 종료) 📖 DFS 그림으로 이해하기 위와 같은 그래프가 존재한다고 생각해봅시다. 우리는 1번 부터 탐색을 시작할 것 입니다. 먼저 사용할 Stack과 방문처리용 Visit를 하나 만들어..