dev-minjeong의 등록된 링크

 dev-minjeong로 등록된 티스토리 포스트 수는 36건입니다.

[프로그래머스] 합승 택시 요금(JAVA), 다익스트라, 2021 KAKAO BLIND RECRUITMENT [내부링크]

https://school.programmers.co.kr/learn/courses/30/lessons/72413 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 school.programmers.co.kr 풀이 다익스트라를 이용해 최단거리를 구하는 문제다. 주의할..

[프로그래머스] 파괴되지 않은 건물(JAVA), 2차원 배열 누적합, 2022 KAKAO BLIND RECRUITMENT [내부링크]

https://school.programmers.co.kr/learn/courses/30/lessons/92344 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 누적합을 이용해서 시간복잡도를 줄이는 문제는 처음봤다... 정확도 테스트케이스는 간단히 브루트포스로 풀면 맞출 수 있으나 그 경우 O(N*M*K) 가 되어 효율성 테스트케이스가 모두 시간초과가 난다. 효율성 테스트를 통과시키기 위해선 누적합 개념을 알고 있어야 한다. (효율성 정답률이 2%도 안되는 걸 보아 개념을 알았어도 이용할 생각을 하기는 쉽지 않아 보인다..^^) 누적합 arr = [3, ..

[OS] 스레드(Thread) 개념과 특징, 프로세스 vs 스레드, 멀티 스레드(Multithreaded Programming) [내부링크]

스레드(thread)란? 스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다. 프로세스(process)에서 실행 단위(execution state)를 분리 시킨 개념 - execution state : PC, SP, registers, etc. 스레드는 같은 주소 공간(address space)를 공유(share)한다. - Code, Global variables, Heap, Opened files 각각의 스레드가 가지고 있는 것 - PC&SP 를 포함한 레지스..

[백준] 6087 : 레이저 통신(JAVA), 다익스트라 [내부링크]

https://www.acmicpc.net/problem/6087 6087번: 레이저 통신 크기가 1×1인 정사각형으로 나누어진 W×H 크기의 지도가 있다. 지도의 각 칸은 빈 칸이거나 벽이며, 두 칸은 'C'로 표시되어 있는 칸이다. 'C'로 표시되어 있는 두 칸을 레이저로 통신하기 위해서 www.acmicpc.net 방향을 회전시킨다기에 시뮬레이션 문제인가 싶어서 삽질을 했다. 결론적으로 C에서 C까지 최소 개수의 거울(최소비용)을 사용하는 경로를 찾는 다익스트라 문제였다. 기본적으로 다익스트라를 적용시키되, 주의해야할 점은 (x,y) 지점에 오기 까지 사용한 비용(거울의 수)가 같더라도 직전 방향에 따라 다음 지점에서의 비용이 달라지기 때문에 같은 비용까지는 우선순위 큐에 넣어주어야 한다는 점이다...

[백준] 2749 : 피보나치의 수 3 (JAVA) / 피보나치 수 구하는 방법, 재귀, 메모이제이션, 행렬) [내부링크]

https://www.acmicpc.net/problem/2749 2749번: 피보나치 수 3 첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 전형적인 피보나치 문제인데, 골2길래 뭔가 싶어 풀어봤다. 이 문제의 주의할 점을 몇가지 뽑자면 입력값 n의 크기가 10^18 로 매우 크다. int 형이 아닌 long 으로 입력을 받아야한다. n번째 피보나치 수를 구하기에, n이 매우 크므로 재귀방식이 아닌 행렬을 사용해풀어야 하지만 이 또한 n이 크기 때문에 O(n) 으로는 해결하기 애매하다. 1,000,000 으로 나눈 나머지를 출력한다는 부분이 힌트. 결론적으로 피사노 주기(Pisano Period)를 이용하여 풀어야하..

[백준] 1956 : 운동 (JAVA), 플로이드-와샬(Floyd-Warshall) [내부링크]

https://www.acmicpc.net/problem/1956 1956번: 운동 첫째 줄에 V와 E가 빈칸을 사이에 두고 주어진다. (2 ≤ V ≤ 400, 0 ≤ E ≤ V(V-1)) 다음 E개의 줄에는 각각 세 개의 정수 a, b, c가 주어진다. a번 마을에서 b번 마을로 가는 거리가 c인 도로가 있다는 의 www.acmicpc.net Solution 사이클을 이루는 도로의 길이의 합이 최소가 되는 것을 찾기 위해서는 모든 정점으로 부터 모든 정점까지의 최단 거리를 구해야한다. 이 때, 가중치 c의 범위가 10,000 이하의 자연수 이므로 음의 가중치를 갖지 않는다. 또한, V가 400이하로 범위가 작다. 다익스트라, 플로이드-와샬 둘 다 가능하다. 나는 플로이드-와샬을 사용했다. 플로이드 와샬..

[알고리즘] 플로이드-와샬, Floyd-Warshall [내부링크]

백준 문제를 풀다가 플로이드-와샬 문제를 또 마주쳤다. 몇 번 풀어본적 있는 유형임에도 플로이드 와샬이 뭐더라... 싶더라. 인간은 망각의 동물이구나... 플로이드-와샬 알고리즘 모든 정점에서 모든 정점으로 최단 경로를 구하는 알고리즘 시간 복잡도 O(v^3) 음수 사이클이 없는 그래프에 적용됨 음의 가중치 허용 플로이드-와샬(Floyd Warshall) vs. 다익스트라(Dijkstra) 다익스트라 하나의 정점에서 다른 모든 정점까지의 최단 거리를 구하는 알고리즘 (S.S.S.P - Single Source Shortest Path) 매번 가장 적은 비용을 가진 노드를 하나씩 꺼낸 다음 그 노드를 거쳐가는 비용, 즉 가장 적은 비용을 하나씩 선택하는 로직 우선순위 큐 + BFS의 형태 시간 복잡도 O(..

[JAVA] LocalDateTime vs. Instant (feat. ZonedDateTime, OffsetDateTime) [내부링크]

java.time 패키지를 공부하는 중, Instant 클래스에 대해 처음 알게되었다. 평소 프로젝트를 할 때는 LocalDateTime 을 사용했는데, Instant를 사용해야 좋은 경우는 무엇이 있는지 궁금증이 생겼다. 살펴보던 와중 LocalDateTime 을 엔티티 칼럼으로 지정한 필드는 DB에 무슨 형식으로 저장했더라... 하고 살펴보니 냅다 문자열로 저장했거나 datetime 형식이다. datetime 형식은 SQL 표준에 맞지않고 정확도가 떨어져 공식문서에서는 권장하지 않는다고 하니 다음번에 프로젝트를 할 땐 DB쪽 형식도 제대로 찾아보고 설정해야겠다 ㅎ java.time 패키지의 핵심 클래스 날짜와 시간을 하나로 표현하는 Calendar 클래스와 달리, java.time 패키지에서는 날짜..

[JAVA] 다형성과 형변환 (상속과 참조변수, Up-casting, Down-casting) [내부링크]

다형성이란? 객체지향개념에서 다형성이란 '여러 가지 형태를 가질 수 있는 능력'을 의미하며, 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. 구체적으로, 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다 는 것이다. class Tv { boolean power; int channel; void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } } class CaptionTv extends Tv{ String text; void caption(){...} } 위와 같은 상속 관계의 클래스가 정의되어..

[JAVA] 가변인자(varargs)와 오버로딩 [내부링크]

기존에는 메서드의 매개변수 개수가 고정적이었으나 JDK1.5부터 동적으로 지정해 줄 수 있게 되었으며, 이 기능을 '가변인자(variable arguments)' 라고 한다. 가변인자는 '타입... 변수명' 과 같은 형식으로 선언하며, PrintStream 클래스의 printf()가 대표적인 예이다. public PrintStream printf(String format, Object... args){...} 위와 같이 가변인자 외에도 매개변수가 더 있다면, 가변인자를 매개변수 중에서 제일 마지막에 선언해야한다. (컴파일 에러 발생) 가변인자인지 아닌지 구별할 방법이 없기 때문에 허용하지 않는다. 가변인자는 내부적으로 배열을 이용한다 따라서 가변인자가 선언된 메서드를 호출할 때마다 배열이 새로 생성된다...

[JAVA] 변수와 메서드 (선언위치, JVM 메모리구조, static과 인스턴스) [내부링크]

선언위치에 따른 변수의 종류 변수의 종류 선언위치 생성시기 클래스(static) 변수 클래스 영역 클래스가 메모리에 올라갈 때 인스턴스(instance) 변수 인스턴스가 생성되었을 때 지역(local) 변수 클래스 영역 이외의 영역 (메서드, 생성자, 초기화 블럭 내부) 변수 선언문이 수행되었을 때 1. 인스턴스 변수 클래스 영역에 선언, 클래스의 인스턴스를 생성할 때 만들어진다 인스턴스 변수의 값을 읽어 오거나 저장하기 위해서는 먼저 인스턴스를 생성해야함 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있음 2. 클래스 변수 인스턴스 변수 앞에 static을 붙여 클래스 변수 선언 독립적인 저장공간을 갖는 인스턴스 변수와 달리, 클래스 변수는 모든 인스턴스가 공통된 저장공간(변수)을 공유 한 클래..

[Spring] 서블릿, JSP, MVC 패턴 [내부링크]

서블릿, JSP, MVC 패턴 비교 서블릿 은 자바 기반의 웹 애플리케이션 프로그래밍 기술로, 1997년 부터 사용되었다. 서블릿은 HTML 생성이 어렵다는 문제점이 있어, HTML 코드에 동적으로 자바 코드를 섞어 사용할 수 있는 뷰 템플릿 엔진인 JSP 가 1999년 등장하였다. JSP를 사용하면 편리하게 HTML생성이 가능했으나, 비즈니스 로직까지 너무 많은 역할을 담당한다는 문제가 있었다. 때문에 이후 서블릿, JSP를 조합한 MVC 패턴을 사용하여 모델, 뷰 컨트롤러로 역할을 나누어 개발하였다. 간단한 회원 저장 기능을 예로 들어보자. 서블릿으로 회원 저장 @WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save")..

[Spring] 서블릿(Servlet) 이란? [내부링크]

서블릿(Servlet) 이란? 서블릿(Servlet)이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다. 서블릿을 사용하는 이유 회원의 이름과 나이를 DB에 저장하는 간단한 WAS를 예로 들어보자. // 웹 브라우저가 생성한 요청 HTTP 메시지 - 회원 저장 POST /save HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded username=kim&age=20 // 서버에서 HTTP 응답 메시지 생성 HTTP/1.1 200 OK Content-Type: text/html;charset..

[Web] HTTP, Web Server, WAS [내부링크]

HTTP 란 하이퍼텍스트 전송 프로토콜(HTTP)은 HTML과 같은 하이퍼미디어 문서를 전송하기 위한 애플리케이션 레이어 프로토콜이다. HTTP는 클라이언트가 요청을 생성하기 위한 연결을 연다음 응답을 받을때 까지 대기하는 전통적인 클라이언트-서버 모델을 따른다. HTTP는 무상태 프로토콜이며, 이는 서버가 두 요청간에 어떠한 데이터(상태)도 유지하지 않음을 의미한다. Stateless vs. Stateful stateless 프로토콜은 수신자가 이전 요청의 데이터(상태)를 유지하지 않는 커뮤니케이션 프로토콜이다. 전송자는 관련된 데이터(상태)를 수신자에게 보내는데, 이 때 모든 요청은 이전 요청의 데이터와 관계없이 독립적으로 수행될 수 있어야한다. ex) Internet Protocol (IP), HT..

[백준] 1080 : 행렬 (JAVA) [내부링크]

https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net Solution 대표적인 그리디 문제다. 너무 복잡하게 생각하느라고 시간을 낭비한 편이다(...) 문제를 풀면서 깨달은 점은 0->1, 1->0 뒤집기 문제에서는 불일치 하는 숫자를 최대한 한번에 많이 뒤집으려고 하는 시도가 무의미하다.. => 2번 뒤집으면 원상복귀한다. => 전부 일치하게 만드는 뒤집기가 아닌 이상 부분적으로 불일치가 일어난다. 이후에 처리가 되는지 알 수가 없다. 현재 뒤집는 시도가 이전에..

[백준] 1149 : RGB거리 (JAVA) [내부링크]

1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net Solution dp 문제인데 삽질을 했다... 아래와 같이 간단히 생각하면 금방 점화식을 도출할 수 있다 R G B house[0] house[0][0] house[0][1] house[0][2] house[1] Math.min(house[0][1], house[0][2]) + house[1][0] Math.min(house[0][0], house[0][2]) + house[1][1] Math.min(house[0][0], house[0]..

[백준] 9663 : N-Queen (JAVA) [내부링크]

9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. Solution 너무 유명한 알고리즘이라 퀸이 어떻게 움직이는 지도 써져있지 않다..(^^) 퀸은 상하좌우대각선 8방향으로 움직인다. 2차원 배열을 이용해도 되지만, index를 열, arr[index]를 행으로 하는 1차원 배열로 푸는게 더 간단하다. 위의 경우 arr = { 6, 4, 2, 0, 5, ..

[백준] 3273 : 두 수의 합 (JAVA) [내부링크]

11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 전형적인 LIS 문제이다. 하지만 역시 dp에 약한 나는 애를 먹었다... 문제를 읽고 처음 들었던 생각은, 수열의 i번째 값을 탐색할 경우 0 부터 i-1 값을 다 살펴보면 O(n^2) 으로 시간초과가 나지 않나? 하는 의문이었다. 게다가 i-1 과 i-2 만 살펴보는 피보나치와 달리 0 ~ i-1 을 매번 탐색하는 것은 dp 가 아니라고 생각했다. 결론적으로 O(n^2) 로 푸는 것..

[백준] 11053 : 가장 긴 증가하는 부분 수열 / LIS (JAVA) [내부링크]

11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 전형적인 LIS 문제이다. 하지만 역시 dp에 약한 나는 애를 먹었다... 문제를 읽고 처음 들었던 생각은, 수열의 i번째 값을 탐색할 경우 0 부터 i-1 값을 다 살펴보면 O(n^2) 으로 시간초과가 나지 않나? 하는 의문이었다. 게다가 i-1 과 i-2 만 살펴보는 피보나치와 달리 0 ~ i-1 을 매번 탐색하는 것은 dp 가 아니라고 생각했다. 결론적으로 O(n^2) 로 푸는 것..

[백준] 1912 : 연속합 (JAVA) [내부링크]

1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 간단한 dp 문제인데 dp 문제는 족족 틀린다.. 연습이 많이 필요한 부분이다.. 간단하게 생각하면 쉬운 문제이다. 0 1 2 3 4 5 6 7 8 9 arr[i] 10 -4 3 1 5 6 -35 12 21 -1 dp[i] 10 6 9 10 15 21 -14 12 33 32 dp[i] 는 (i-1까지 누적된 dp) + (arr[i]) 와 arr[i] 중 큰 값을 저장한다. 이후 dp 에 저장된 값 중 가장 큰 것이 답이 된다. import java.util.*; impor..

[백준] 2805 : 나무 자르기 (JAVA) [내부링크]

2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net Solution 문제를 처음 확인했을 때 이분탐색으로 풀어야겠다 하는 생각이 들어서 금방 풀겠다 싶었는데 신경 써줄 것들이 조금 있었다. 입력 값의 범위가 크다는 것 조건을 충족하는 mid 중에 최대가 되는 mid 를 골라야 한다는 것 정수형 타입 할당되는 메모리의 크기 데이터의 표현 범위 byte 1바이트 -128 ~ 127 short 2바이트 -2^15 ~ (2^15 - 1) -32,768 ~ 32,767 int 4바이..

2022 AWS Cloud 입문 세미나 [내부링크]

On-Premise 클라우드 컴퓨팅 이전, IT자원을 직접 구매, 구축, 유지보수, 권한 관리 하는 인프라 관리 방식. 실제 물리적인 서버를 사용. 계획, 자본금, 공간, 물리적 보안 등 여러 고려사항이 있음. Cloud Computing 큰 초기 투자 비용 없이 인터넷을 통해 유연한 IT 리소스와 애플리케이션을 필요할 때 언제든(on-demand) 사용한 만큼만 요금을 내고 이용하는 서비스(pay-as-you-go) Amazon Web Service 전 세계적으로 분포한 데이터 센터에서 200개가 넘는 완벽한 기능의 서비스를 제공하는, 세계적으로 가장 포괄적이고 널리 채택되고 있는 클라우드 플랫폼. 클라우드 컴퓨팅의 장점 컴퓨팅 리소스를 만들 때 초기 투자비용이 필요한 On-Premise 방식은 예측과..

Docker 란 [내부링크]

Docker 도커(Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다. 우리는 서버를 돌리기 위한 환경을 구축하기 위해 언어, 웹서버, 데이터베이스, 자동배포툴 등 여러가지를 버전 신경써서 다운받은 후 서로 잘 동작될 수 있도록 설정하는 과정을 거친다. 그러나 서버 운영중 더 성능 좋은 서버로 옮겨가거나, 늘어난 접속량을 처리하기 위해 서버를 여럿 추가해야하는 경우가 생기는데 이 때마다 환경구축을 새로하는 것은 골치아픈 일이다. 혹은 같은 서버에 여러 서비스를 각각 다른 실행환경(ex.자바 버전 등)에서 동작해야하는 경우도 일이 까다로워진다. 도커는 이를 해결하는 데 쓰인다. 도커의 동작 각 요소들이 설치된 모습을 이미지 형태로 저..

[JAVA] empty()와 isEmpty() [내부링크]

기본적인 스택 관련 알고리즘 문제를 풀던 도중, 스택이 비어있는 지 확인하기 위해 다음과 같이 코드를 작성하다 의문이 생겼다. empty() 와 isEmpty() 의 차이가 무엇인가에 대한 의문. Stack과 컬렉션 프레임워크 JDK 1.0에서는 컬렉션 프레임워크가 존재하지 않았다. Stack, Vector, HashTable 은 컬렉션 프레임워크 이전부터 자바에서 제공하는 기본 데이터 구조이다. JDK 1.2에서 컬렉션 프레임워크가 추가되었으며 List, Map 과 같은 표준 인터페이스가 도입되었다. 그러나 이러한 표준 컬렉션 인터페이스에서는 메소드들이 다른 규약(convention)으로 명명 되었다. 이러한 변화는 JDK 1.2에 도입된 자바 빈 표준에 영향을 받은 것으로 보인다. 이러한 메서드 이름..

[JAVA] 컬렉션 프레임웍(Collections Framework) [내부링크]

본 게시글은 남궁성 님의 Java의정석 을 정리한 내용입니다. 컬렉션 프레임웍이란, '데이터 군을 저장하는 클래스들을 표준화한 설계'를 뜻한다. 컬렉션(Collection)은 다수 데이터, 즉 데이터 그룹을, 프레임웍은 표준화된 프로그래밍 방식을 의미한다. JDK1.2 이전까지는 Vector, Hashtable, Properties와 같은 컬렉션 클래스, 다수의 데이터를 저장할 수 있는 클래스,들을 서로 다른 각자의 방식으로 처리해야 했으나 JDK1.2부터 컬렉션 프레임웍이 등장하면서 다양한 종류의 컬렉션 클래스가 추가되고 모든 컬렉션 클래스를 표준화된 방식으로 다룰 수 있도록 체계화 되었다. 컬렉션 프레임웍의 장점 다수의 데이터를 다루는 데 필요한 다양하고 풍부한 클래스를 제공하여 프로그래머의 짐을 덜..

[JAVA] 지네릭스(Generics) [내부링크]

본 게시글은 남궁성 님의 Java의정석 을 정리한 내용입니다. 지네릭스란? 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(compile-time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. 타입 안정성 의도하지 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여주는 것 지네릭 클래스의 선언 지네릭 타입은 클래스와 메서드에 선언할 수 있다. 먼저 클래스에 선언하는 지네릭 타입에 대해 알아본다. 예를 들어 클래스 Box가 다음과 같이 정의되어 있다고 가정한다. class Box { O..

[DB] 인메모리 데이터베이스, 트랜잭션의 특징 (ACID) [내부링크]

인메모리 데이터베이스란 디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스 디스크 검색보다 자료 접근이 빠른 것이 장점 영구 데이터베이스와 인메모리 데이터베이스 영구 데이터베이스 실제 메모리에 데이터를 유지하므로 데이터베이스 서버가 반송 되더라도 다시 사용 가능 디스크에 저장된 데이터를 대상으로 쿼리를 수행 Oracle, Mysql, Postgres 등 => Mysql, MariaDB는 MEMORY 엔진을 이용하면 인메모리 DB로 사용 가능 인메모리 데이터베이스 시스템 메모리에 데이터가 저장되며 프로그램을 닫으면 데이터가 손실됨(휘발성) 메모리상에 색인(인덱스)을 넣어 필요한 모든 정보를 메모리상의 색인(인덱스)을 통해 빠르게 검색 서버가 꺼져서 날아가도 상관 없는 임시 데이터에 주로 쓰..

[Spring] @RequriedArgsConstructor 어노테이션 [내부링크]

@RequriedArgsConstructor 의존성 주입의 종류로는 Constructor, Setter, Field 타입이 있다. 1. Constructor(생성자) @Service public class MemberListPrinter { private MemberDao memberDao; private MemberPrinter printer; @Autowired public MemberListPrinter(MemberDao memberDao, MemberPrinter printer){ this.memberDao = memberDao; this.printer = printer; } } 2. Setter public class MemberListPrinter { private MemberDao membe..

[Spring] 스프링 AOP 개념, 용어 정리 [내부링크]

핵심 기능과 부가기능 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다 핵심 기능 : 해당 객체가 제공하는 고유의 기능 (ex. OrderService 의 핵심 기능은 주문 로직) 부가 기능 : 핵심 기능을 보조하기 위해 제공되는 기능 (ex. 로그 추적 로직, 트랜잭션 기능) 이러한 부가 기능은 단독으로 사용되지 않고, 핵심 기능과 함께 사용됨 여러 곳에서 공통으로 사용하는 부가기능 보통 부가 기능은 여러 클래스에 걸쳐서 함께 사용된다. 예를 들어서 모든 애플리케이션 호출을 로깅 해야 하는 요구사항을 생각해보자. 이러한 부가 기능은 횡단 관심사(cross-cutting concerns)가 된다. 쉽게 이야기해서 하나의 부가 기능이 여러 곳에 동일하게 사용된다는 뜻이다 그런데 이런 부가 ..

[Spring] @Qualifier 어노테이션 [내부링크]

@Qualifier 예전에 스프링으로 파일 업로드/다운로드 기능을 구현한 코드를 보다가 문득 @Qualifier 어노테이션이 붙어있는 것을 발견했는데 용도가 기억이 나질 않았다. 파일 관리를 위한 기본적인 인터페이스와 클래스를 다음과 같이 구현하였다. public interface StorageService { void init(Path path); String store(String uploadPath, MultipartFile file) throws Exception; public Resource load(String filePath) throws Exception; boolean delete(String filePath) throws IOException; } @NoArgsConstructor @S..

[JPA] 상속관계 매핑, @MappedSuperclass [내부링크]

본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. 상속관계 매핑 관계형 데이터베이스는 상속 관계X 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 조인 전략: 각각 테이블로 변환 단일 테이블 전략: 통합 테이블로 변환 구현 클래스마다 테이블 전략: 서브타입 테이블로 변환 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) => 부모 클래스에서 사용 JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 ..

[JPA] 다대일,일대다,일대일,다대다 (@ManyToOne,@OneToMany,@OneToOne,@ManyToMany) [내부링크]

본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. 연관관계 매핑시 고려사항 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키 를 관리할 곳을 지정해야함 연관관계의 주인: 외래 키를 관리하는 참조 주인의 반대편: 외래 키에 영향을 주지 않음, 단순 조회만 가능 연관 관계에 대한 추가적인 내용은 이전 글을 참고하세요 다대일[N:1] - @Many..

[JPA] JPA 설정하기 [내부링크]

본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. Maven 으로 새 프로젝트를 생성한다. pom.xml org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.199 JPA(인터페이스)의 구현체로 하이버네이트, 데이터베이스로 H2를 선택했다. H2 데이터베이스 특징 빠르고 작은 크기의 RDBMS(관계형 데이터베이스) 임베디드 및 서버모드(영구 데이터베이스), 인 메모리 데이터베이스 => 주로 메모리에 데이터를 저장, 디스크에 데이터를 저장할 수도 있음 MySQL, Oracle 데이터베이스 시뮬레이션 기능 시퀀스, AUTO INCREMENT 기능 지원 JPA 설정 - persistenc..

[JPA] 연관관계 매핑 기초 [내부링크]

본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. 연관관계가 필요한 이유 이전 강의 까지 객체에 외래키 를 직접 필드로 넣는 방식으로 설계를 하였지만 그런 방식은 객체지향적이라고 할 수 없다. JPA는 자바 표준 ORM 으로서 객체는 객체답게, 테이블은 테이블 답게 설계하기 위해 존재한다. 때문에 패러다임 불일치를 해결하기 위해 연관관계 매칭을 하여야한다. 참조 대신 객체가 외래 키를 그대로 사용하는 것은 객체 끼리의 연관관계가 없는 것과 같다. 객체를 테이블에 맞추어 모델링 하는 경우 아래와 같이 저장, 조회가 이루어지는데 이는 객체 지향적이라고 볼 수 없다. //팀 저장 Team team = new Team(); team.setName("TeamA"); e..

[JPA] 엔티티 매핑 [내부링크]

본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리한다 JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 가 필수 기본 생성자 필수 final 클래스, enum, interface, inner 클래스 사용X 저장할 필드에 final 사용X @Entity(name="Member") public class Memeber{ @Id private Long id; private String name; } name 속성을 통해 JPA에서 사용할 엔티티 이름을 지정할 수 있다. 같은 이름의 클래스가 있는 것이 아니면 가급적 기본값(클래스 이름 그대로)을 사용한다. @Table @Table은..

[JPA] JPA 소개 [내부링크]

1. JPA란? Java Persistence API 자바 진영의 ORM 기술 표준 1.1. ORM Object-relational mapping(객체 관계 매핑) 객체는 객체답게, RDB는 RDB 답게 설계하고 ORM 프레임 워크가 중간에서 매핑하는 것 대중적인 언어에는 대부분 ORM 기술이 존재 ORM은 객체와 RDB 두 기둥 위에 있는 기술 1.2. JPA 소개 EJB 엔티티빈(자바표준) -> 하이버네이트(오픈소스) -> JPA(자바표준) JPA는 표준 명세 JPA는 인터페이스의 모음 JPA 2.1 표준 명세를 구현한 3가지 구현체 : 하이버네이트, EclipseLink, DataNucleus JPA 버전 JPA 1.0(JSR 220) 2006년 : 초기 버전. 복합 키와 연관관계 기능이 부족 JP..