전체 글
-
AVL 트리Computer Science/Data Structure 2021. 9. 24. 16:23
AVL 트리의 정의 ㆍ 균형 잡힌 높이의 이진 검색 트리이다. ㆍ 두 개의 자식 노드들 간에 깊이 차이가 1 이하인 트리이다. AVL 트리의 장점 ㆍ 트리의 검색 연산이 항상 O(log n)으로 균형 잡혀 있다. ㆍ 트리의 삭제 연산 또한 O(log n)으로 균형 잡혀 있다. AVL 트리의 단점 ㆍ 삽입 연산이 이루어질 때 트리의 재구성 시간이 소요된다. ㆍ 이진 검색 트리보다 구현의 난이도가 높다. 구현 방법 relink() 메서드 protected void relink(Node parent, Node child, boolean makeLeft) { if (child != null) child.parent = parent; if (makeLeft) parent.left = child; else pare..
-
이진 검색 트리Computer Science/Data Structure 2021. 9. 24. 16:04
이진 검색 트리의 정의 ㆍ 각 노드는 (키, 값)의 쌍을 저장하며, 서로 다른 노드의 키는 다르다. ㆍ 왼쪽 서브 트리에 저장된 노드의 키보다는 크다. ㆍ 오른쪽 서브 트리에 저장된 노드의 키보다는 작다. 이진 검색 트리의 장점 ㆍ 심볼 테이블을 정렬된 순서로 유지할 필요 없다. ㆍ 새로 삽입되는 노드는 항상 리프 노드에 위치한다. 이진 검색 트리의 단점 ㆍ 균형 트리를 보장하지 않는다. ㆍ 감색 시 많은 시간이 소요된다. 구현 방법 노드의 구성 class Node { K key; V value; Node left, right; int N; int aux; Node parent; public Node(K key, V value) { this.key = key; this.value = value; this..
-
연결 리스트를 이용한 순차 검색Computer Science/Data Structure 2021. 9. 24. 12:31
Symbol Table이란? ㆍ (키, 값) 쌍이 모인 자료구조 ㆍ 특정 키와 그 키에 해당되는 값의 쌍을 삽입할 수 있다. ㆍ 키가 주어질 때, 관련된 값을 검색할 수 있다. 연결 리스트를 이용한 Symbol Table의 동작 방법 구현 방법 노드의 구성 class Node { K key; V value; Node next; public Node(K key, V value, Node next) { this.key = key; this.value = value; this.next = next; } } ㆍ 노드는 키, 값, 다음 노드를 가리키는 참조로 구성되어 있다. Symbol Table의 기본 구성 public class SequentialSearchST { private Node first; int ..
-
배열을 이용한 이진 검색Computer Science/Data Structure 2021. 9. 24. 12:20
Symbol Table 이란? ㆍ (키, 값) 쌍이 모인 자료구조 ㆍ 특정 키와 그 키에 해당되는 값의 쌍을 삽입할 수 있다. ㆍ 키가 주어질 때, 관련된 값을 검색할 수 있다. 배열을 이용한 Symbol Table의 동작 방법 구현 방법 Symbol Table의 기본 구성 public class BinarySearchST { private static final int INIT_CAPACITY = 10; private K[] keys; private V[] values; private int N; } ㆍ 키를 저장하는 배열 K[ ], 값을 저장하는 배열 V[ ]가 있다. ㆍ (키, 값) 쌍의 개수에 대한 변수인 N이 있다. search() 메서드 private int search(K key) { int..
-
Spring Boot - AOPFramework & Library/Spring Boot 2021. 9. 23. 18:04
AOP AOP의 필요성 - 모든 메서드의 호출 시간을 측정하고 싶은 경우를 생각해본다. - 해결 방법은 위 사진과 같이 각 계층마다 시간을 측정하는 로직을 작성하는 방법이 있다. - 이때, 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 코드가 복잡해지고 유지보수가 어려워진다는 문제점이 발생한다. - 핵심 관심 사항(핵심 비즈니스 로직)과 공통 관심 사항(시간을 측정하는 로직)을 분리함으로써 이러한 문제점을 해결할 수 있다. AOP를 통한 해결 - 위 그림과 같이 핵심 관심 사항(핵심 비즈니스 로직)과 공통 관심 사항(시간을 측정하는 로직)을 분리한다. - 시간을 측정하는 로직을 공통 로직으로 만든 후 원하는 적용 대상을 선택해 준다. - 이와 같이 공통으로 처리해야 하는 기능들을 별도로 분리함으로..
-
Spring Boot - 사용자 입력 데이터 처리Framework & Library/Spring Boot 2021. 9. 23. 17:56
사용자 입력 데이터 처리 회원 등록 폼 HTML 이름 등록 - 사용자가 이름을 입력할 수 있는 폼 형식의 HTML 파일이다. - input 태그에 이름을 입력하고 등록 버튼을 눌렀을 때, "/members/new" 주소에 POST 방식으로 전달된다. 웹 화면에서 데이터를 전달받을 폼 객체 public class MemberForm { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } - 사용자가 입력한 이름 데이터와 매핑할 객체이다. 컨트롤러를 통한 데이터의 처리 @PostMapping(value = "/members/new") public S..