분류 전체보기(361)
-
Visitor Pattern
개요 방문자 패턴(Visitor Pattern)은 데이터 구조와 처리를 분리하는 패턴이다. 무슨 말인지 잘 와닿지 않을 것이다. 시나리오를 통해 알아보도록 하자. 시나리오 사용자가 내 컴퓨터의 디렉토리를 순회할 수 있는 프로그램을 만들어달라고 한다. 우리는 이를 재귀를 통해서 해결할 수 있다. 대략적으로 코딩하면 다음과 같을 것이다. // 디렉토리면 하위 디렉토리를 다시 순회하고 아니면 파일 정보 출력 if(file.isDirectory()) { Iterator iter = file.iterator(); iter.search(); } else { System.out.println(file.toString()); } 그런데 이젠 사용자가 각 파일에 대해 순회하면서 이름만 가져오는 기능도 원한다. 그렇다면 ..
2021.12.11 -
Prototype Pattern
개요 패턴에 앞서 프로토타입이 무슨 뜻인지 생각해보고 가자. 일반적으로 프로토타입이라고 하면 실제 제품을 만들기 전의 샘플 정도라고 알고 있을 것이다. 패턴도 이와 비슷한 맥락이다. 프로토타입 패턴은 생성 비용이 비싼(네트워크를 타거나, 생성 로직이 복잡하다던가) 객체나 비슷한 객체를 생성해야 할 때 사용되는 생성 패턴이다. 예를 들어 DB에서 데이터 구조가 거의 변하지 않는 데이터를 가져온다고 해보자. 필요한 데이터마다 객체를 네트워크를 거쳐서 가져오게 되면 비용이 만만치 않다. 대신 가져온 데이터를 복사해서 일부만 수정하는 방식이 있다. 이는 메모리 상에서 이루어지므로 네트워크 비용보다 훨씬 싸다. 또한 데이터 구조도 거의 비슷하기 때문에 복사하여 수정하는 것이 어렵지 않다. 예제 비슷한 구조에 대해..
2021.12.11 -
[Java] VSCODE에서 MAVEN 프로젝트에 MySQL JDBC 연동
JPA를 배우기 전에 간략하게 이런 게 있고 동작 방식, 여러 문제 때문에 JPA가 나오게 되었다는 것 정도만 알고 넘어가서 오랜만에 다시 복습할 겸 글을 작성한다. 주제에 앞서서 JDBC에 대해 간략히 소개하고 가도록 하자. JDBC JDBC(Java Database Connectivity)는 위키백과의 설명을 빌리자면 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC를 사용하면 코드 상에서 DB에 접속한 다음 각종 쿼리를 사용할 수 있게 된다. JDBC의 실행 사이클 JDBC 드라이버를 메모리에 로딩한다. DB와 연결한다. DB에 쿼리를 수행한다. DB와의 연결을 종료한다. JDBC 드라이버 로딩 드라이버는 DB 벤더마다 다르다. 따라서 각 벤더의 홈페이지에서 다운로드해야 한다..
2021.12.11 -
[Programmers] 로또의 최고 순위와 최저 순위 - Java
https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 풀이 문제 풀이의 핵심은 최고 순위는 매칭된 숫자 개수 + 0의 개수이고 최저 순위는 매칭된 숫자 개수라는 것이다. 2중 for 문으로 각 요소를 비교한 뒤에 0의 개수를 세는 식으로 다음과 같이 어렵지 않게 풀어낼 수 있다. 아래는 필자가 처음으로 해결했을 때 작성한 코드이다. 먼저 각 배열을 정렬한 후에 0의 개..
2021.12.10 -
[Baekjoon] 1292번: 쉽게 푸는 문제 - Java
https://www.acmicpc.net/problem/1292 1292번: 쉽게 푸는 문제 첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다. www.acmicpc.net 문제 설명 문제 그대로 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ... 로 이루어진 수열에서 입력받은 숫자 사이의 구간의 합을 구하면 된다. 최대 인덱스가 1000이므로 ArrayList로 숫자를 미리 저장해둔 뒤 해당 구간에 해당하는 숫자들을 읽어서 더하는 식으로 간단하게 풀었다(문제 이름 그대로). 문제 풀이 import java.io.*; import java.util.*; public class Ma..
2021.12.10 -
[JPA] Fetch - Eager, Lazy
Fetch란? Fetch의 사전적 의미는 '(어디를 가서) ~을 가지고 오다' 라는 뜻이다. JPA에서도 이 의미는 일맥상통한다. JPA에서 Fetch는 엔티티의 필드에 DB에서 실제 값을 가져오는 것이고 가져오는 방법에는 여러가지가 있다. 먼저 두 엔티티를 살펴보자. @Entity class Department { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "department") private Set employees = new HashSet(); } @Entity class Employee { @Id @GeneratedValue private Long id; private String name; @M..
2021.12.04