즘[자료구조] 힙(Heap)
·
자료구조와 알고리즘/자료구조
1. 개념1.1. 정의힙(Heap) 혹은 힙 트리(Heap Tree)는 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 이진트리의 자료구조를 의미한다.영단어 힙(heap)은 "무엇인가를 차곡차곡 쌓아올린 더미"를 의미1.2. 특징A가 B의 부모노드일 시 A의 키값과 B의 키값 사이에 대소관계가 성립한다(형제 관계에서는 성립X)힙은 항상 완전 이진 트리의 형태이기 때문완전 이진 트리 : 트리의 위부터 아래, 오른쪽부터 왼쪽의 순서로 차있는 이진 트리이런 성질 덕분에 최댓값 혹은 최솟값을 O(1) 안에 찾을 수 있음(루트 노드의 값)삽입과 삭제 연산 시 힙 성질 유지 위해 힙 정렬 수행을 수행한다. 1.3. 종류최대힙부모 노드의 값이 자식 노드의 값보다 크거나 같음최소힙부모 노드의 값이 자식 노..
[자료구조] 트리(Tree)
·
자료구조와 알고리즘/자료구조
1. 정의1.1. 정의트리(tree)는 계층적인 비선형 자료구조로, 노드(Node)와 그 노드들을 연결하는 간선(Edge)으로 구성된다.트리는 다음과 같은 구조적 특징을 가진다.노드루트 노드(Root Node) : 트리의 시작점. 부모가 없는 최상위 노드자식 노드(Child Node) : 부모 노드에서 뻗어 나온 하위 노드 부모 노드(Parent Node) : 다른 노드를 자식으로 거지는 노드리프 노드(Leaf Node) : 자식이 없는 최하위 노드(말단 노드)이처럼 루트 노드를 중심으로 뻗어나가는 모습이 마치 나무의 구조와 유사하다고 하여 '트리'라는 이름이 붙였다고 한다. 특징노드 간 관계가 부모-자식 관계로 연결되는 계층 구조순환이 없음(자식 노드의 자식이 부모로 연결되지 않음) 1.2. 관련 용어..
[자료구조] 큐(Queue)
·
자료구조와 알고리즘/자료구조
1. Queue의 정의1.1. 큐의 정의큐는 자료구조에 삽입(enqueue)된 데이터가 제일 먼저 삭제(dequeue)되는 선입선출(First In First Out; FIFO) 방식의 자료구조이다. 영단어 queue는 본디 표 같은 것을 구매하기 위한 대기열을 의미하는데, 표를 사기 위해 줄을 서는 사람들을 연상하면서 하단의 내용과 그림을 보면 어떤 형태의 자료구조인지 파악하기 쉬울 것이다. 앞서 살펴본 스택과는 달리 먼저 들어온 데이터가 먼저 나가기 때문에 삽입과 삭제가 양방향에서 이루어지는 특성이 있다.1.2. 관련 용어위치rear : 값이 삽입되는 위치(큐의 가장 뒤쪽)front : 값이 제거되는 위치(큐의 가장 앞쪽)주요 연산add : rear 부분에 새로운 데이터를 삽입하는 연산poll : f..
[자료구조] 스택(Stack)
·
자료구조와 알고리즘/자료구조
프로그래밍에서 Stack은 두 가지 의미를 가지고 있다:프로그램 실행 시 사용되는 메모리 영역프로그램 실행 중 함수 호출이나 변수 저장을 위해 사용되는 메모리 스택 영역.자료구조로서의 스택후입선출(Last-In, First-Out) 방식으로 데이터를 관리하는 자료구조.본 글에서는 두 번째 의미인 자료구조로서의 스택에 대해 다루고자 한다.  1. Stack의 정의1.1. 스택의 정의 스택은 배열이나 연결 리스트를 사용해서 구현할 수 있는 선형 자료구조로, 삽입과 삭제가 한쪽 끝(top)에서만 이루어진 후입선출(Last-in First-out; LIFO)의 자료구조를 의미한다. 즉, 마지막에 삽입된 데이터가 가장 먼저 삭제되는 형태이다.  1.2. 관련 용어 위치top : 삽입과 삭제가 일어나는 위치(또는 ..
[자료구조] 자료구조(Data Structure)의 개념과 종류
·
자료구조와 알고리즘/자료구조
1. 왜 자료구조를 알아야 하는가 알고리즘은 컴퓨터가 무슨 일을 해야 할지 지시하고, 자료구조는 컴퓨터에게 알고리즘에서 사용하는 자료를 어떻게 저장할지 지시하는 것이라고 할 수 있다. 즉, 프로그래밍이란 알고리즘을 작성하고, 그에 맞는 자료구조를 선택하는 것이라고도 할 수 있다. 이런 시각에서 자료구조를 충분하게 이해하지 못한 개발자는 결코 좋은 개발자가 될 수 없다고도 할 수 있을 것이다. 동일선상에서 프로그래밍 언어 중 하나인 Pascal을 개발한 스위스의 컴퓨터 과학자 니클라우스 비르트( Niklaus Emil Wirth; 1934 ~ 2024)는 Algorithms + Data Structures = Programs(1976)>  라는 저서를 지을 정도로 자료구조의 중요성을 강조한 바 있다. 자료..
[SPRING] 3. 의존관계 주입
·
프로그래밍 언어 활용/SPRING
스프링의 시작 https://yangpro8549.tistory.com/58 객체 지향 설계와 스프링 https://yangpro8549.tistory.com/59?category=1185843 본 정리는 김영한님의 인프런 강의 을 바탕으로 작성하였습니다. 0.  들어가기 전에  예컨대 할인 정책에 관한 로직을 정액 할인에서 정률 할인으로 변경하고자 할 때 우리는 아래와 같은 흐름에 따라 코드를 수정할 수 있다.   public class OrderServiceImpl implements OrderService {// private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy disco..
[SPRING] 2. 객체 지향 설계와 스프링
·
프로그래밍 언어 활용/SPRING
https://yangpro8549.tistory.com/580. 들어가기에 앞서 우리는 앞서 스프링의 핵심은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 것이라고 정리했다.  그렇다면 좋은 객체 지향 프로그래밍이란 것은 무엇일까? 본 고에서는 위 물음에 답하기 위해 객체 지향 프로그래밍의 4가지 특징과 객체 지향 설계를 위한 5가지 원칙(SOILD)를 살펴보고자 한다. 그리고 SOILD의 관점에서 스프링이 왜 만들어졌는가?에 대해 답해보고자 한다.  1. 객체 지향 프로그래밍이란?객체 지향 프로그래밍의 4가지 특징에 대해 살펴보기 전에 객체 지향 프로그래밍이 무엇인지에 대해 간단하게 설명하자면 아래와 같다.1.1. 객체 지향 프로그래밍(OOP) 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어..
[SPRING] 1. 스프링의 시작
·
프로그래밍 언어 활용/SPRING
본 글은 김영한님의 강의를 수강 후 강의 내용을 편집/정리하여 작성한 것입니다. 0.들어가기에 앞서스프링(SPRING)이란? "스프링"은 문맥에 따라 다르게 사용된다. 1. 스프링 DI 컨테이너 기술2. 스프링 프레임워크3. 스프링 부트, 스프링 프레임워크 등을 아우르는 스프링 생태계 그렇다면 왜 "SPRING"인가? 이를 알기 위해서는 스프링 탄생 이전으로 거슬러 올라갈 필요가 있다. 본 고에서는 스프링을 본격적으로 이해하기에 앞서 스프링의 탄생 과정과 스프링 생태계에 대해서 소개해보고자 한다. 1. 스프링의 등장 배경 servlet, jsp 의 등장 이후 시스템의 대규모화에 따른 대량의 트래픽을 처리하기 위해 여러 대의 서버와 DB로 데이터를 주고 받으면서 시스템의 복잡성이 증가했다. 자연스레 이를..