728x90
반응형
SMALL

2024/04 34

Tree와 BFS / DFS

우선 BFS, DFS를 알기 전 Tree를 알아야 하는게 먼저더라. Tree 트리란, 부모 자식 관계를 나타낼 수 있는 자료 구조다. 다음 그림이 트리라고 말 할 수 있다. - 노드 하나에 한개의 Parent 노드가 있을 수 있다. - 노드 하나에 여러개의 Child 노드가 있을 수 있다. 이런 유형의 자료구조는 실생활에서도 너무 많이 접해볼 수 있다. 회사 조직도 가족 관계도 File System 이런 트리 중 특별한 트리가 있는데 'Binary Tree'라는 게 있다. Binary Tree 한 노드에 Child 노드가 최대 2개까지만 있는 트리를 Binary Tree라고 한다. 위 그림은 그럼 Binary Tree라고 할 수 없다. 왜냐하면, 한 노드(Node 1)가 Child Node를 3개까지도 ..

자료구조 2024.04.16

Stack

Stack은 위에만 구멍이 뚫린 박스라고 생각하면 된다. 이 그림이 Stack 구조이다. 먼저 들어간 데이터가 가장 마지막에 나온다. 가장 마지막에 들어간 데이터가 가장 먼저 나온다. LIFO. Stack은 중간에 데이터를 넣는것도 불가능하고 맨위에 데이터를 새로 넣거나 맨위에 있는 데이터를 빼거나해야 한다. 코드적으로 접근해보기 Stack은 보통 이러한 메서드들을 가지고 있다. pop(): 가장 최근에 추가된 데이터 빼기 push(item): 데이터 새로 추가하기 peek(): 가장 최근에 추가된 데이터 읽기 isEmpty(): Stack이 비어있는지 확인하기 다음 그림과 같이 사이즈가 7인 Stack이 있다고 해보자. 1. 이 상태에서 push(8)을 하면 다음 그림이 된다. 2. 이 상태에서 또 p..

자료구조 2024.04.15

Queue

이번엔 Queue를 정리해보자. Queue는 위 아래 모두 구멍이 있는 박스라고 생각을 하면 된다. 그림을 보면 데이터는 위에서만 넣을 수 있고 빠지는 건 아래에서부터 빠진다. 이런 구조라면 먼저 들어간 데이터가 먼저 나오는 구조가 된다. Queue는 FIFO(First In First Out) 구조이다. 코드적으로 생각해보기 Queue가 가지고 있는 보통의 대표적인 메서드는 다음과 같은 것들이 있다. enqueue(item): 데이터 추가하기 dequeue(): 가장 오래된 데이터 빼기 peek(): 가장 오래된 데이터 보기 isEmpty(): Queue가 비었는지 확인하기 비어있는 사이즈가 7인 큐가 있다. 1. 이 상태에서 데이터 1을 넣으면 다음 모양이 된다. 2. 그리고 데이터 2를 또 추가적으..

자료구조 2024.04.15

Array vs Linked List

오늘부터 자료구조에 대한 내용을 하나씩 정리하기로 했다. 기록을 하지 않으면 알아도 금방 까먹기 때문에 까먹더라도 다시 돌아갈 수 있게. Array 배열은 메모리에 정해진 사이즈만큼 공간이 만들어져서 데이터를 저장하는 방식이다. 그래서 데이터는 연속적으로 위치한 메모리에 저장되어 있다. 장점 연속적으로 메모리에 위치해있기 때문에 인덱스를 통해 빠르게 내가 원하는 값을 찾아낼 수 있다. 단점 사이즈가 정해졌기 때문에 정해진 사이즈 이상으로 데이터를 저장할 수 없다. Linked List Linked List는 사이즈가 동적으로 할당된다. 메모리 상에 여기저기 흩뿌려져 있는 공간에 원하는 만큼 데이터를 넣을 수 있는 방식이다. 각 데이터는 다음 데이터의 주소를 알고 있는 포인터가 있어서 연결되어 있다. 장점..

자료구조 2024.04.15

중첩 클래스(정적 중첩 클래스, 내부 클래스)

참고자료: 김영한의 실전 자바 - 중급 1편 | 김영한 - 인프런 김영한 | 실무에 필요한 자바의 다양한 중급 기능을 예제 코드로 깊이있게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을 www.inflearn.com 클래스 안에 클래스를 중첩해서 정의할 수 있는데, 이것을 중첩 클래스(Nested Class)라고 한다. 중첩 클래스 예시 class Outer { ... class Nested { ... } } 근데 중첩 클래스는 클래스를 정의하는 위치에 따라 다음과 같이 분류한다. 이 네가지가 모두 중첩 클래스라고 불리는데, 여기서 2가지로 분류가 가능하다. 정적 중첩 클래스 (static) 내부 클래스 종류 내부 클래스 지역 클..

Stream API

요즘 Stream API를 사용하면서 얻게 되는 코드 가시성 향상과 코드 라인 간소화가 너무 재밌어진다. 그래서 이것 또한 JAVA에서 기본이 되는 내용 같아서 정리를 하고자한다. Stream API가 필요한 이유 만약, 다음과 같은 배열이 주어졌다면 그리고 그 배열에 어떤 정렬이 필요하다고 할 때 Stream을 사용하지 않고 처리해보자. String[] names = {"choi", "kim", "park", "sung", "jang"}; 이런 배열이 있을 때, 오름차순으로 정렬을 하고 싶다. 그러면 다음과 같은 메서드를 사용해볼 수 있다. Arrays.sort(names); 그리고 이것을 사용해서 실제로 배열을 출력해보기 위해 다음과 같은 코드를 작성한다. String[] names = {"kim"..

Index란? (DB)

데이터베이스에서 빼놓을 수 없는 개념인 Index. 이 내용을 정리해보고자 한다. 우선 다음과 같이 데이터베이스에 데이터가 저장되어 있다고 가정해보자. 그리고 질문은 다음과 같다.Q: age = 20인 행을 찾으려면? 간단한 쿼리를 통해 가져올 수 있다.SELECT * FROM XXX WHERE age = 20; 이 쿼리를 날리면 컴퓨터는 age가 20인 행을 찾기위해 모든 행을 하나씩 다 뒤지게 된다. 뭐 지금처럼 레코드가 5개만 있으면 1초도 안 걸린다. 근데 1억개가 넘게 있으면 또는 그 이상 있으면 있을수록 느리게 동작할 것이다. 그러다가 어떤 특이점에 도달하게 되면 데이터베이스는 굉장히 무시무시한 일이 일어날 수 있다. 그렇기 때문에 이러한 특이점이 일어나기 전 컴퓨터에게 도움을 줄 수 있는데 ..

Spring + DB 2024.04.05

날짜와 시간

참고 자료: 김영한의 실전 자바 - 중급 1편 | 김영한 - 인프런 김영한 | 실무에 필요한 자바의 다양한 중급 기능을 예제 코드로 깊이있게 학습합니다., [사진]국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 www.inflearn.com 날짜와 시간에 대한 작업은 굉장히 아주 많이 어렵고 까다롭다. 왜냐하면 고려할 사항이 무진장 많기 때문인데 윤년, 각 달의 일수, 일광 절약 시간(DST), 타임존(GMT, UTC, ...) 등 고려할 사항이 너무 많다. 그래서 그냥 개발자가 직접 날짜와 시간을 계산하면 99.9%의 확률로 잘못된 계산이 될 것이다. 그래서 이러한 복잡성 때문에 대부분의 현대 개발 환경에서는 날짜와 시간을 처리하기 위해 잘 설계된 라..

Enum

자바는 열거형(Enum Type)을 제공하는데, 이 열거형을 제대로 이해하기 위해서 열거형이 생겨난 이유를 알아보자. 다음과 같은 요구사항이 들어왔다고 생각해보자. 등급별 할인율 적용 BASIC 등급 - 10% GOLD 등급 - 20% DIAMOND 등급 - 30% 이 요구사항을 처리하기 위해 다음과 같은 코드를 작성했다. public class DiscountService { public int discount(String grade, int price) { int discountPercent = 0; if (grade.equals("BASIC")) { discountPercent = 10; } else if (grade.equals("GOLD")) { discountPercent = 20; } els..

Class 클래스

자바에서는 Class 클래스가 있고 이 클래스는 특정 클래스의 정보(메타데이터)를 다루는데 사용된다. Class 클래스를 통해 개발자는 실행중인 자바 애플리케이션 내에서 필요한 클래스의 속성과 메서드에 대한 정보를 조회하고 조작할 수 있다. Class 클래스의 주요 기능은 다음과 같다. 타입 정보 얻기: 클래스의 이름, 슈퍼클래스, 인터페이스, 접근 제한자 등과 같은 정보를 조회할 수 있다. 리플렉션: 클래스에 정의된 메서드, 필드, 생성자 등을 조회하고 이들을 통해 객체 인스턴스를 생성하거나 메서드를 호출하는 등의 작업을 할 수 있다. 동적 로딩과 생성: Class.forName() 메서드를 사용하여 클래스를 동적으로 로드하고, newInstance() 메서드를 통해 새로운 인스턴스를 생성할 수 있다...

728x90
반응형
LIST