본문 바로가기

전체 글176

[Java] Optional이란? Optional 활용법 1. NullPointerExceptionnull처리가 취약한 코드예시/* 주문 */public class Order { private Long id; private Date date; private Member member; // getters & setters}/* 회원 */public class Member { private Long id; private String name; private Address address; // getters & setters}/* 주소 */public class Address { private String street; private String city; private String zipcode; // getters & setters}/* 주문을 한 회원이 살고 .. 2023. 8. 26.
(DB2편) 섹션5-3. JPA 소개 1. ORM - Object-relational mapping(객체 관계 매핑) - 객체는 객체대로 설계 - 관계형 데이터베이스는 관계형 데이터베이스대로 설계 - ORM 프레임워크가 중간에서 매핑 - 대중적인 언어에는 대부분 ORM 기술이 존재 2. JPA - Java의 ORM기술 - 마치 Java Collection처럼 생김 - 애플리케이션과 JDBC 사이에서 동작 - JPA 동작 - 저장 - JPA 동작 - 조회 - JPA 버전 1.0 : 초기버전, 복합키, 연관관계 기능 부족 2.0 : 대부분 ORM 기능 포함, JPA Criteria 추가 2.1 : 스토어드 프로시저 접근, 컨버터, 엔티티 그래프 기능이 추가 - JPA를 사용해야 하는 이유 SQL 중심적 개발에서 객체 중심으로 개발 생산성 증가 .. 2023. 7. 10.
플로이드 워셜 알고리즘 1) 개념 - 모든 최단 경로를 구하는 알고리즘 - 다익스트라가 하나의 정점에서 모든 정점까지의 최단거리를 구한다면, 플로이드-워셜 알고리즘은 한번 실행하여 모든 노드간 최단 경로를 구할 수 있다. 다익스트라에 대한 설명은 아래 링크를 통해 확인하자. 2023.07.05 - [Learning-log -CS/Data Structure & Algorithm] - (알고리즘) 다익스트라 (JAVA , for문 활용 & PriorityQueue 활용 방식 비교)\ (알고리즘) 다익스트라 (JAVA , for문 활용 & PriorityQueue 활용 방식 비교) 1) 개념 한 정점(노드)에서 다른 정점(노드)까지의 최단 경로를 구하는 알고리즘 도착 정점 뿐만 아니라 다른 정점까지 최단경로로 방문하여 각 정점까지의.. 2023. 7. 5.
(알고리즘) 다익스트라 (JAVA , for문 활용 & PriorityQueue 활용 방식 비교) 1) 개념 한 정점(노드)에서 다른 정점(노드)까지의 최단 경로를 구하는 알고리즘 도착 정점 뿐만 아니라 다른 정점까지 최단경로로 방문하여 각 정점까지의 최단 경로를 모두 찾을 수 있음 탐욕기법을 사용한 알고리즘으로 MST 프림 알고리즘과 유사 2) 알고리즘 단계 D : 거리 계산을 위한 배열 U : 경로 배열 출발 노드(a)를 선택 후 a와 연결된 정점들에 대해 배열(D) 값을 가중치로 업데이트한다. >> 다른 정점들은 아직 도달할 수 없는 정점이므로 배열 값 무한대인 상태(배열 초기값을 무한대로 설정해두기)이다. D배열 중 거리가 가장 작으면서 U에 없는 정점(b) 선택한다. a에서 b를 경유해서 갈 수 있는 정점 후보를 보고 그 때 가중치 값을 D에 UPDATE(D[b] +a[b][c])하고 D에 .. 2023. 7. 5.
Intellij 단축키 모음 General : 일반적인 단축키 Alt + #[0-9] : 각 단축키에 해당하는 도구창 열기 Ctrl + S : 모두 저장 Ctrl + Shift + F12 : 편집기(Editor) 영역을 최대로 크기로 토글 Ctrl + Shift + I : 현재 프로필 기준으로 현재 파일 검사 Ctrl + Alt + S : 설정창(Settings) 열기 Ctrl + Alt + Shift + S : 프로젝트 구조창(Project Structure) 열기 Double Shift : 전체 검색창 열기 Debugging : 디버깅 관련 단축키 F8 : 현재 브레이크된 라인에서 다음 라인으로 이동 F7 : 현재 브레이크된 라인에서 실행하고 있는 메소드로 이동 Shift + F8 : 브레이크된 라인에서 호출한 곳으로 이동 Al.. 2023. 7. 5.
[Python] FastAPI 1. FastAPI란 1) 현대적이고, 빠르며, 파이썬 표준 타입 힌트에 기초한 Python3.6+의 API를 빌드하기 위한 웹 프레임워크 2) 특징 빠름 빠른 코드작성 적은 버그 직관적 쉬움 코드 짧음 견고함 표준기 2. 설치하기 1) 터미널에 아래와 같이 ' pip install fastapi' 입력하기 2) 프로덕션을 위해 Uvicorn 또는 Hypercorn과 같은 ASGI 서버 필요 => 터미널에 'pip install "uvicorn[standard]"' 입력 3. 예제 작성 및 실행해보기 1) main.py를 생성 후, 아래와 같이 코드 작성 - 서버 주소로 이동하면 read_root() 가 동작하여 {"Hello" : "World"} 데이터 전송되어 화면에 보이게 됨 - '서버주소/item.. 2023. 6. 28.
(자료구조 & 알고리즘 정리) 최소 비용 신장 트리, Kruskal, Prim (2023.06.25) 1. 최소 비용 신장 트리 1) 신장트리(Spanning Tree) 란? - 그래프 내의 모든 정점을 포함하는 트리 - 최소 연결을 해서 간선의 수가 가장 적음 2) 최소 비용 신장 트리란? - 신장 트리 중에서 사용된 간선들의 가중치 합이 최소인 트리 3) 최소 비용 신장트리의 특징 - 각 간선의 가중치가 동일하지 않을 때, 단순히 가장 적은 간선을 사용한다고 최소 비용 신장 트리를 구할 수 있는 것이 아님 - 가중치를 고려하여 최소비용을 선택해야 함 - N개의 정점을 가지는 그래프에서는 반드시 N-1개의 간선만을 사용 - 사이클이 포함되어서는 안됨 으아리.,ㄴㅁ얼매ㅑ어리ㅏㅁㄴ 2. Kruskal 알고리즘 1) 탐욕적인 방법을 사용하여 간선을 하나씩 선택해서 MST를 찾는 알고리즘 2) 구현 방식 최초.. 2023. 6. 25.
(자료구조 & 알고리즘 정리) 서로소집합, 유니온파인드 (2023.06.24) 1. 서로소 집합 1) 개념 - 집합 A와 집합 B에 공통된 원소가 존재하지 않으면 A와 B를 서로소 집합이라고 함 2) 서로소 집합 표현 방법 - 연결리스트 - 트리 3) 연산 - Make-Set(x) : 유일한 멤버인 x를 포함하는 새로운 집합을 생성하는 연산 //슈더 //p[x] : 노드 x의 부모 저장 //rank[x] : 루트 노드가 x인 트리의 랭크 값 저장 Make-Set(x) { p[x] = x rank[x] = 0; } // for(i=1; i rank[y]: p[y] = x; else p[x] = y if(rank[x] == rank[y] : rank[y] ++; 4) Union 연산의 효율을 높이기 - 기존 코드 //슈더 Union(x,y) p[Find-Set(y)] = Find-Se.. 2023. 6. 24.
(자료구조 & 알고리즘 정리) 그래프(DFS, BFS) (2023.06.23) 1. 그래프 표현 방식 1) 인접행렬 - 노드의 개수가 N일 때, N*N 행렬(N*N의 2차원 배열)을 만들어 x행과 y행이 연결 되어 있으면 1, 되어 있지 않으면 0을 행렬 값으로 가지도록 표현 - 무방향 그래프 모든 간선이 양 방향으로 이동이 가능한 것이라 간주 x번째 노드와 y번째 노드가 연결되어 있고 그 배열을 adj라 하자 => adj[x][y] = adj[y][x] = 1 행렬은 왼쪽 대각을 기준으로 양쪽이 대칭이 됨 => 대각을 기준으로 양쪽을 모두 사용하지 않고 행 행인 경우 중 하나만 사용해도 됨 - 가중 그래프 행렬의 값을 가중치로 저장 가중치>=0 이라면 간선이 없는 곳의 값을 -1 로 하 - 특징 구현 간단 특정 두 노드가 인접한지 상수시간에 파악 가능 메모리 낭비 심함(정점에 비.. 2023. 6. 23.
(Java)백준 1991. 트리 순회 1. 문제 조건 N개의 노드를 가진 트리가 노드 자신과 그 노드에 대한 왼쪽, 오른쪽 자식 주어지는 형태로 입력값이 들어옴. 주어진 트리를 전위, 중위, 후위 순회한 결과를 출력해야 함 2. 아이디어 문제에 대한 특별한 아이디어보다는 트리의 구현이 필요했던 문제. 입력되는 노드 값이 A ~ Z만 가능하므로 크기가 26인 배열을 활용해도 괜찮음(메모리 낭비 크지 않을 것이기 때문) 하지만 트리 구현 공부를 할 겸, 노드 클래스와 트리 클래스를 필요에 맞게 직접 만들어 구현해 봄. 3. 구현 - 아쉬운 점 : 트리 클래스의 search 부분 구현이 탐색과 삽입의 기능을 모두 하고 있어 아쉬움이 남음. search는 해당 data를 찾는 노드를 Root부터 찾기 시작해서 최종적으로 새로 들어갈 data가 들어.. 2023. 6. 20.