자바 & 스프링 16

Stream 연습 문제 2 - 심화

Java의 Stream 공부를 하다, 풀어볼 수 있는 연습문제가 있으면 좋겠다는 생각을 해서 포스팅 해봤습니다. 문제 난이도는 기본, 심화로 나눴습니다. 기본 문제는 모던 자바 인 액션 이라는 책의 Chapter5를 약간 변형해서 첨부하였고, 심화 문제는 알고리즘 문제를 풀면서 자주 사용할 것 같은 기법에 대해 직접 문제를 만들어 봤습니다. 혹시라도 더 효율적인 코드가 있거나 문제에 오류가 있으면 많은 피드백 부탁드립니다. 2022.01.12 - [자바 & 스프링] - Stream 연습 문제 1 - 기본 Stream 연습 문제 1 - 기본 Java의 Stream 공부를 하다, 풀어볼 수 있는 연습문제가 있으면 좋겠다는 생각을 해서 포스팅 해봤습니다. 문제 난이도는 기본, 심화로 나눴습니다. 기본 문제는 ..

자바 & 스프링 2022.01.12

Stream 연습 문제 1 - 기본

Java의 Stream 공부를 하다, 풀어볼 수 있는 연습문제가 있으면 좋겠다는 생각을 해서 포스팅 해봤습니다. 문제 난이도는 기본, 심화로 나눴습니다. 기본 문제는 모던 자바 인 액션 이라는 책의 Chapter5를 약간 변형해서 첨부하였고, 심화 문제는 알고리즘 문제를 풀면서 자주 사용할 것 같은 기법에 대해 직접 문제를 만들어 봤습니다. 혹시라도 더 효율적인 코드가 있거나 문제에 오류가 있으면 많은 피드백 부탁드립니다. 준비 코드 public class Trader { private final String name; private final String CITY; public Trader(String name, String CITY) { this.name = name; this.CITY = CITY;..

자바 & 스프링 2022.01.12

string관련 클래스 성능 비교

2021.12.08 - [자바 & 스프링] - java - String, StringBuilder, StringBuffer java - String, StringBuilder, StringBuffer String, StringBuilder, StringBuffer는 자바에서 문자열을 다루는 대표적인 클래스이다. String Java에서 String 객체를 생성하는 방법은 2가지가 있는데 하나는 "" 큰 따옴표를 사용하는 것이고, 두번째는 new.. p829911.tistory.com 이전에 문자열을 다루는 자바 클래스 String, StringBuilder, StringBuffer에 관한 포스팅을 한 적 이 있다. 이번 글에서는 위 클래스들의 속도와 힙 메모리를 얼마나 차지하는 지를 확인해서 성능비교를 ..

자바 & 스프링 2022.01.06

string concatenation compile optimization

전 포스팅에서 Java에서 String을 처리하는 데 사용하는 클래스들을 소개한적이 있다. 2021.12.08 - [자바 & 스프링] - java - String, StringBuilder, StringBuffer java - String, StringBuilder, StringBuffer String, StringBuilder, StringBuffer는 자바에서 문자열을 다루는 대표적인 클래스이다. String Java에서 String 객체를 생성하는 방법은 2가지가 있는데 하나는 "" 큰 따옴표를 사용하는 것이고, 두번째는 new.. p829911.tistory.com 이 포스팅에선 JDK에서 컴파일 시, 문자열 결합 연산을 어떻게 최적화 하는지 알아보자. String 연산은 1.4 버전까지 매우 비..

자바 & 스프링 2022.01.05

ThreadLocal의 활용 - 트랜잭션 동기화

2021.12.20 - [자바 & 스프링] - 트랜잭션 위 블로그 포스팅에서 트랜잭션 동기화와 트랜잭션 동기화를 사용한 트랜잭션 전파를 언급한 적이 있다. 지금 작성하는 포스트에선 java의 ThreadLocal이 트랜잭션 동기화에 사용되고 있는 것을 코드를 통해 확인해보겠다. Transaction 관리는 PlatformTransactionManager라는 인터페이스를 구현한 클래스들을 통해 사용된다. 정확히 말하면 AbstractPlatformTransactionManager가 PlatformTransactionManager 인터페이스를 구현하는데 AbstractPlatformTransactionManager를 각 persistence framework(JDBC, Hibernate, JPA, JTA)에..

자바 & 스프링 2021.12.22

ThreadLocal의 정의와 사용법

Synchronized 키워드와 더불어 자바에서 제공하는 멀티 쓰레드를 위한 도구로 ThreadLocal이 있다. ThreadLocal은 각 쓰레드가 자신만의 전역변수를 만들어 사용할 수 있는 기능을 제공해준다. 오직 한 쓰레드에 의해서 읽고 쓰여질 수 있는 변수라고 생각하면 된다. ThreadLocal 변수를 선언하면 멀티쓰레드 환경에서 각 쓰레드마다 독립적인 변수를 가지고 접근할 수 있다. 코드 public class ThreadLocalTest { public static class MyThread implements Runnable { @Override public void run() { System.out.println("thread name = " + Thread.currentThread()...

자바 & 스프링 2021.12.20

트랜잭션

트랜잭션? 여러 쿼리를 논리적으로 하나의 작업으로 묶어주는 것 계좌 이체를 예로 들어보자, A 계좌에서 B 계좌로 이체를 하려고 할 때 A 계좌에서 만원을 출금하고 B 계좌에 입금하기 전에 에러가 났을 때의 상황을 어떻게 처리할 것인가? 위의 계좌이체 작업은 두 가지 작업으로 이뤄진다. A 계좌에서 만원을 출금하고, DB에 반영 B 계좌에 만원을 입금하고, DB에 반영 위 두 가지 작업이 모두 정상적으로 처리되어야 계좌이체 작업이 완료되었다고 할 수 있다. 다시 말해서 하나의 작업만 완료되고 하나의 작업이 실패하면 계좌 이체 작업에 논리적으로 오류가 있다. 두 작업 모두 성공하거나, 아무일도 일어나지 않아야 한다. (A 계좌에서 만원을 출금한 일도 일어나지 않아야 한다) 이렇게 작업이 모두 성공할 때만 ..

자바 & 스프링 2021.12.20

java - String, StringBuilder, StringBuffer

String, StringBuilder, StringBuffer는 자바에서 문자열을 다루는 대표적인 클래스이다. String Java에서 String 객체를 생성하는 방법은 2가지가 있는데 하나는 "" 큰 따옴표를 사용하는 것이고, 두번째는 new 연산자를 사용하는 것이다. String은 new를 쓰지 않고 객체를 생성할 수 있는 특이한 클래스이다. 이 두 가지 방법의 객체 할당 방식에는 차이가 있다. String str1 = "abcde"; String str2 = "abcde"; String str3 = new String("abcde"); String str4 = new String("abcde"); System.out.println(str1 == str2); // true System.out.pr..

자바 & 스프링 2021.12.08

JDBC Connection pool은 왜 필요할까?

JDBC란? Java DataBase Connectivity의 약자로서 자바에서 데이터베이스와 관련된 작업을 처리할 때 사용하는 API DBMS 종류(MySql, MsSql, Oracle…)에 상관없이 하나의 JDBC API를 사용해서 데이터베이스 작업을 처리할 수 있다. JDBC 드라이버: 자바 프로그램의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해주는 클라이언트 사이드 어댑터 JDBC 실행순서: 1. JDBC 드라이버 로드 2. Connection 객체 생성 3. Statement 객체 생성 4. Query 실행 5. Result 객체로부터 데이터 추출 6. Result 객체 Close 7. Statement 객체 Close 8. Connection 객체 Close 비용 이슈 DB와의 연결은 ..

자바 & 스프링 2021.12.01

java의 싱글톤

소개 싱글톤(singleton) 패턴은 인스턴스를 오직 한개만 제공하는 클래스이다. 시스템 런타임, 환경 세팅에 대한 정보 등, Connection pool 등 인스턴스가 여러개 일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한개만 만들어 제공하는 클래스가 필요하다. 구현 방법 1 public class Settings { // 싱글턴은 static instance를 가지고 있다 private static Settings instance; // 외부에서 인스턴스 생성을 못하도록 생성자를 private private Settings() {} // static method로 인스턴스를 가져온다 // 최초에 instance가 null이면 객체를 생성해서 가지고 있는다 public static Se..

자바 & 스프링 2021.12.01