본문 바로가기

개발지/Today I learn

(52)
[1212] 자바 스프링 - Spring MVC #Spring MVC - Srping MVC란? Spring-webmvc 모듈. Spring-webmvc 모듈은 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈이다. Spring Web MVC를 줄여 Spring MVC, 혹은 웹 프레임워크의 종류임을 나타내는 Spring MVC 프레임워크라고 부름. 더보기 - 서블릿 (Servlet Container) : 클라이언트의 요청을 처리하기 위해 규약에 맞춰 JAVA 코드로 작성한 클래스 파일. 이를 웹 애플리케이션으로 실행 하는 서블릿 컨테이너(Servlet Container)로 아파치 톰캣(Apache Tomcat)이 있음. - Model Spring MVC에서 M에 해당됨. Model은 웹 애플리케이션이 클라이언트의 요청을 처리..
[1208] 자바 스프링 - Spring Framework #Framework - Framework란? ▪ Frame의 뜻에서 알 수 있듯이 프로그래밍에서 Frame 역시 개발에 필요한 틀, 외형적 구조를 제공해주는 의미. ▪ 자바에서 Framework로 제공되는 예시로 Collections Framework가 있다. Collections Framework에서는 자바에서 사용되는 Map, Set, List 등의 자료구조를 미리 저장해 놓았다가 제공한다. 다시 말해 Colleciotns은 자바의 인터페이스(Interface) 클래스는 추상 메서드만 정의되어 있는 뼈대만 갖춘 클래스인 Map, Set, List 같은 인터페이스와 그 인터페이스들을 구현한 구현체들의 지밥과 같다. ▪ 정리하자면, Framework는 프로그래밍을 하기 위한 틀이나 구조를 제공하는 역할을..
[1205] 자바 - 알고리즘(탐욕 알고리즘, BFA, BSA) #알고리즘 - 알고리즘이란? ▪ 알고리즘이란 문제를 해결하는 최선의 선택. ▪ 컴퓨터가 문제의 답을 찾아나가는 방법은 수없이 많으나, 코드를 구성하는 방법은 매우 많다. ▪ 어떤 코드가 가장 효율적일지 문제의 유형마다 최선의 방식을 학습하는 것이 필요. #탐욕 알고리즘(Greedy) - 탐욕 알고리즘이란? ▪ 선택의 순간마다 당장 눈앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방법. ▪ 탐욕 알고리즘의 단계는 다음과 같이 나눌 수 있다. ① 선택 절차(Selection Procedure): 현재 상태에서의 최적의 해답을 선택 ② 적절성 검사(Feasibility Check): 선택된 해가 문제의 조건을 만족하는지 검사 ③ 해답 검사(Soultion Check): 원래의 문젝제가 해결되었는지..
[1204] 자바 - 시간복잡도(Time Complexity) #시간복잡도 - 시간복잡도란? 알고리즘문제를 풀다보면 등장하는 효율성 테스트가 있다. 정확성 테스트를 통과하더라도 효율성테스트에서 떨어지는 경우가 많다. 효율성 테스트를 실패하면 '시간 초과'라는 메시지가 나온다. 효율적인 알고리즘은 시간 복잡도가 낮은 코드를 말하는 것이다. 시간복잡도란 입력값의 변화에 따라 연산을 실행할 때, 연산 횟수와 소요 시간의 비례도를 말한다. 시간복잡도를 효율화한 코드는 이 비례도를 최소화한 코드를 말하는 것이다. - Big-O 표기법 시간 복잡도를 표기하는 방법은 여러 가지가 있는데, Big-O 표기법이 가장 많이 사용된다. Big-O 표기법은 최악의 경우를 고려하는 표기법이다. 이를 사용하는 이유는 프로그램의 실행 중 여러 연산값을 도출하는 데 걸리는 최악의 경우의 시간을..
[1128] 자바 - Tree traversal(트리 순회) #트리 순회 1. 전위 순회 (preorder traverse) 가장 먼저 방문하는 노드인 루트를 기준으로 왼쪽의 노드들을 차례대로 둘러본 뒤, 왼쪽의 노드 탐색이 끝나면 오른쪽 노드를 탐색한다. 부모 노드가 제일 먼저 방문되는 순회방식. 주로 트리를 복사할 때 사용한다. 위 그래프를 전위 순회한다면 순서는 다음과 같다. A → G → H → B → I → J → D → K → M → F → N → O 2. 중위 순회 (inorder traverse) 루트를 가운데에 두고 순회한다. 제일 왼쪽 끝에 있는 노드부터 순회하기 시작하여, 루트를 기준으로 왼쪽에서 오른쪽 방향으로 노드를 탐색한다. 부모 노드는 서브 트리의 방문 중간에 방문되는 순회방식. 주로 이진 탐색 트리의 오름차순으로 값을 가져올 때 쓰인다..
[1128] 자바 - Graph (그래프) #그래프 - 그래프의 정의 ▪ 여러 개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료 구조 ▪ 컴퓨터에서 표현하는 그래프는 XY축을 기준으로 한 그래프와 달리 복잡한 네트워크망과 같은 모습이다. - 그래프의 구조 직접 관계에 있는 두 점은 사이에 이어진 선이 있다. 간접 관계이 있는 두 점은 다른 점과 선을 거쳐 이어진다. 하나의 점을 정점(vertex), 하나의 선은 간선(edge)라고 한다. - 그래프의 표현 방식 인접 행렬 직접 관계에 있는 두 정점을 인접한다고 말하는데, 인접행렬은 서로 다른 정점들이 인접한 상태를 2차원 배열의 형태에 표시한다. 위 그래프를 인접행렬로 표현한다면 다음과 같다. int[][] arr = new int[][] { {0, 1, 0}, {0, 0, 1}, {1..
[1127] 자바 - Graph Traversal(그래프 탐색) #그래프 탐색 - 그래프 탐색이란? ▪ 그래프 탐색은 자료의 하나의 정점에서 시작해서 이어진 모든 정점들을 한 번식 방문하는 것이 목적이다. ▪ 그래프의 데이터가 배열과 같이 일정한 열과 행을 가지며 정렬되어 있지 않기 때문에 찾고자 하는 자료를 찾을 때까지 모든 지점을 방문하여야 한다. ▪ 그래프 탐색의 대표적인 방법에는 DFS, BFS가 있다 - BFS(Breadth-First Search) ▪ 너비 우선 탐색(BFS)는 가까운 정점부터 탐색한다. ▪ 더 탐색할 정점이 없는 경우 그 다음 떨어져 있는 정점을 순서대로 탐색한다. ▪ 주로 두 정점 사이 최단 경로를 찾을 때 사용한다. ▪ 위와 같은 그래프에서 BFS의 탐색 순서는 다음과 같다. Start지점에서 가장 가까운 노드인 A~F를 탐색한다. 탐..
[1122] 자바 - 자료구조 (Tree) # Tree - Tree의 정의 ▪ 데이터가 바로 아래에 있는 하나 이상의 데이터에 무방향으로 연결된 계층적 자료 구조 - Tree의 구조, 특징 ▪ 맨 처음 데이터의 꼭짓점을 루트(Root)라고 한다. ▪ 루트에 여러 개의 데이터를 간선(edge)로 연결하며, 연결된 각 데이터를 노드(Node)라고 한다. ▪ 상하 계층으로 연결된 데이터들은 부모/자식 관계를 가진다. ▪ 상위 계층의 데이터를 부모 노드(Parent Node), 하위 계층에 있는 데이터들을 자식 노드(Child Node)라고 한다. ▪ 자식이 없는 노드를 리프 노드(Leaf Node)라고 한다. 깊이 (Depth) 트리 구조에서 루트(꼭짓점 노드)로부터 하위 계층의 특정 노드까지의 깊이. 레벨 (Level) 같은 깊이를 가지고 있는 노드..
[1122] 자바 - 자료구조 (Queue) # Queue - Queue의 정의와 구조 ▪ 데이터를 처리하는 자료 구조 중 하나. ▪ 스택과 다르게 FIFO / LILO을 특징으로 가지고 있다. ▪ 데이터를 입력된 순서대로 처리할 때 사용한다. ▪ 두 개의 입출력 방향을 가지고 있으며, 데이터를 하나씩 넣고 뺀다. - Queue의 장점. 자료를 넣은 순서대로 꺼내서 처리할 수 있어서, 처리해야할 작업을 순서대로 처리할 때 유리. 다른 자료 구조에 비해 상대적으로 빠른 속도를 가지고 있다. (삽입과 삭제 각각의 방향. 원소를 삭제하는 연산 없음) 별도 라이브러리나 모듈 설치필요 X - Queue의 단점 중간에 데이터를 조회하거나 수정할 수 없음. (중간 데이터를 수정하기 위해서는 그 앞의 데이터를 모두 꺼내야함) 크기 제한이 없어 메모리의 낭비 발생..
[1026] 자바 - 자료구조 (Stack) # Stack - Stack의 정의와 구조 ▪ Stack은 데이터를 순서대로 쌓는 자료 구조이다. ▪ LIFO(Last In First Out) / FILO(First In Last Out) 의 구조를 가지고 있다. ▪ 여러 개의 데이터를 입력한 뒤 출력할 때, 가장 먼저 입력된 데이터가 가장 나중에 출력된다. - Stack의 특징 후입선출 (LIFO / FILO) -> 먼저 입력된 데이터는 가장 나중에 출력됨 데이터의 입출력은 하나씩 가능 입출력 방향이 한 방향 - Stack 자료 구조의 장·단점 ▪ 장점 빠른 데이터 로딩 -> 후입선출의 구조로 인해 데이터의 삽입/삭제가 일어날 때 다른 데이터의 위치를 변경하지 않기 때문에 빠르게 데이터를 삽입/삭제 할 수 있다. 별도 라이브러리 / 모듈 설치 필요 ..