Arc
[Baekjoon] 22856: 트리 순회
[Baekjoon] 22856: 트리 순회
2023.06.14문제 유사 중위 순회를 구현하는 문제이다. 풀이 내 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Q22856 { private static int n; private static int[][] tree; private static int visitCount; private static int lastNode; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); n = In..
[Spring] Spring REST Docs 도입기
[Spring] Spring REST Docs 도입기
2023.05.10Spring REST Docs 도입프로젝트를 수행하던 중, 개발 중에 기획이 여러 번 바뀌고 이에 따라 오고 가는 자원의 형태도 달라져 API 문서를 수정하는 일이 자주 생겼다. 하지만 잘못하여 실수로 적는 일도 생기고, 매번 API가 변경될 때마다 문서까지 수정하여 전달하기엔 시간 소모가 많았다. 때문에 Spring REST Docs를 통해 컨트롤러 테스트와 동시에 문서 작성을 자동화시켜 바로 전달할 수 있는 환경을 갖출 수 있어 도입하게 되었다. 현재 Spring REST Docs는 Java 17이상, Spring Framework 6 이상의 환경을 요구한다. build 구성Spring REST Docs를 사용하기 위해 다음과 같이 빌드를 작성한다. (Gradle 환경)plugins { id "or..
[Baekjoon] 15898: 피아의 아틀리에 ~신비한 대회의 연금술사~
[Baekjoon] 15898: 피아의 아틀리에 ~신비한 대회의 연금술사~
2023.05.10문제 최고의 폭탄을 제조하는 문제이다. 풀이 내 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Q15898 { private static final String WHITE = "W"; private static final String YELLOW = "Y"; private static final String GREEN = "G"; private static final String RED = "R"; private static final String BLUE = "B"; private static Map qualities; ..
[Baekjoon] 21611: 마법사 상어와 블리자드
[Baekjoon] 21611: 마법사 상어와 블리자드
2023.05.10문제 상하좌우로 블리자드를 쏴대는 상어 문제이다. 예시가 궁금하다면 여기서 확인하자. [Baekjoon] 21611: 마법사 상어와 블리자드 21611번: 마법사 상어와 블리자드 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그, 비바라기 마법을 할 수 있다. 오늘 새로 배운 마법은 블리자드이고, 크기가 N×N인 격자에서 연습하려고 한다. N은 항상 홀수이고, ( www.acmicpc.net 풀이 내 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Q21611 { private static BufferedReader..
[Baekjoon] 2176: 합리적인 이동경로
[Baekjoon] 2176: 합리적인 이동경로
2023.05.10문제 문제를 읽자마자 머리를 붙잡았다. 설명이 참,,, 심오하다,, ,,,? 풀이나 알아보자. 풀이 내 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Q2176 { private static final List graph = new ArrayList(); private static long[] weights; private static int[] counts; public static void main(String[] args) throws IOException { BufferedReader br = new Buffered..
[Baekjoon] 1943: 동전 분배
[Baekjoon] 1943: 동전 분배
2023.05.10문제 돈이 주어지면 반으로 정확히 나눌 수 있는지 묻는 배낭 문제이다. 풀이 내 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws IOException { for (int i = 0; i < 3; i++) { System.out.println(distribute() ? 1 : 0); } } privat..
[JPA] OSIV(Open Session In View)
[JPA] OSIV(Open Session In View)
2023.05.09OSIV(Open Session In View)? OSIV는 영속성 컨텍스트를 뷰까지 열어두는 기능이다. 영속성 컨텍스트가 뷰까지 유지된다면 엔티티가 영속 상태로 유지되어 있어, 뷰에서도 지연 로딩을 사용할 수 있다. 즉 OSIV가 활성화 된 상태에서는 다음과 같이 영속성 컨텍스트 생존 범위가 요청이 끝나는 시점까지 유지된다. OSIV가 활성화 상태일 때 동작은 다음과 같다. 클라이언트의 요청이 들어오면 서블릿 필터나, 스프링 인터셉터에서 영속성 컨텍스트를 생성한다. 트랜잭션을 시작할 때 미리 생성해둔 영속성 컨텍스트를 찾아와서 트랜잭션을 시작한다. 서비스 계층이 끝나면 트랜잭션을 commit하고 영속성 컨텍스트를 flush한다. 이 시점에 트랜잭션은 끝나지만 영속성 컨텍스트는 종료되지 않는다. 컨트롤러..
[Network] 루핑(Looping)
[Network] 루핑(Looping)
2023.04.20루핑(Looping)? 루핑은 그 단어에서도 유추할 수 있듯이, 프레임이 목적지에 도달하지 못하고 계속 순환하는 현상을 의미한다. 원인 그럼 루핑 현상은 왜 발생하는 것일까? 먼저 위에 있던 그림을 다시 한 번 간단히 살펴보자. 위 그림에서 Host A와 Host B가 통신하는 상황이라고 생각해보자. 두 Host 사이에는 2개의 경로가 구성되어 있어 하나의 경로에 장애가 생겨도 다른 하나의 경로로 통신할 수 있도록 설계를 했다. 단순히 이렇게 보면 잘 구성된 네트워크 같이 보인다. 그런데 여기서 바로 위에서 말한 루핑 문제가 생긴다. 루핑 현상이 발생하는 시나리오를 한 번 살펴보자. 먼저 Host A가 다음과 같이 브로드캐스트를 보내면 스위치는 이를 받아 들어온 포트를 제외한 다른 모든 곳에 Floodi..
[Design Pattern] 싱글톤 패턴
[Design Pattern] 싱글톤 패턴
2023.04.16싱글톤 패턴? 싱글톤 패턴은 애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴이다. 즉, 생성자가 여러 번 호출되어도, 실제로 생성되는 객체는 하나이고, 최초로 생성된 이후에 호출된 생성자는 이미 생성한 객체를 반환시키도록 만드는 것이다. 시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러 개일 때 문제가 생길 수 있는 경우가 있다. 따라서 인스턴스를 오직 한 개만 만들어 제공하는 클래스가 필요하다. 구현 먼저 다음은 싱글톤 패턴을 구현한 코드이다. 한 번 살펴보자. class Settings { private static Settings instance; private Settings() { } public s..
[Java] Java 버전 별 특징
[Java] Java 버전 별 특징
2023.04.14JDK 1.0 1996년 1월에 공개되었으며 발표 이전에 불린 이름은 Oak였다. 안정화 작업을 거친 1.0.2 버전에서 Java로 이름이 바뀌었다. JDK 1.1 1997년 2월에 공개했으며 JDBC, Inner Class, Java Beans, RMI, Reflection, Unicode 지원, Internationalization 등이 추가되었다. JavaBeans JavaBeans는 자바로 작성된 소프트웨어 컴포넌트를 말한다. 뷰와 로직을 분리하여 일관된 방식으로 자바 클래스를 사용할 수 있도록 도와준다. Beans 규약 기본 생성자가 반드시 존재해야 한다. 모든 속성은 비공개이다. 속성에 접근하고 꺼내올 수 있는 getter, setter 메서드를 구성한다. Serializable을 구현한다. ..
[Java] Java 11 특징
[Java] Java 11 특징
2023.04.13Java SE 11 (LTS) 2018년 9월에 공개했으며 이클립스 재단으로 넘어간 Java EE가 JDK에서 삭제되고, JavaFX도 JDK에서 분리되어 별도의 모듈로 제공된다. 대표적인 변경 사항은 다음과 같다. String 클래스에 새로운 메서드 추가 String s = ""; s.strip(); // 문자열 앞, 뒤 공백 제거 s.stripLeading(); // 문자열 앞 공백 제거 s.stripTrailing(); // 문자열 뒤 공백 제거 s.isBlank(); // 문자열이 비어있거나 공백만 포함되어 있을 경우 true 반환 s.trim().isEmpty()와 결과가 동일 s.repeat(10); // 입력한 수만큼 문자열을 반복 컬렉션 인터페이스에 toArray() 메서드 추가 Colle..
[Java] Java 9 특징
[Java] Java 9 특징
2023.04.13Java SE 9 2017년 9월에 공개했으며 Project Jigsaw 기반으로 런타임이 모듈화된 것이 가장 큰 특징이다. 이에 따라 대부분의 콘솔 프로그램 개발에는 더 이상 AWT나 Swing 같은 불필요한 라이브러리를 끌어쓸 필요 없이, 최상위 모듈인 Base만 사용해도 되게 되었다. 더불어 특정 프로그램에 최적화된 최소 런타임을 제작할 수 있게 되면서 패키징도 간편해졌다. Jigsaw 모듈 시스템 module java.sql { requires public java.logging; requires public java.xml; exports java.sql; exports javax.sql; exports javax.transaction.xa; } jigsaw 프로젝트의 목표는 다음과 같다. 라이..