본문 바로가기

자바

(98)
jpa 엔티티 매핑 정리 package hellojpa; import javax.persistence.*; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Date; @Entity //@SequenceGenerator( // name = "MEMBER_SEQ_GENERATOR", // sequenceName = "MEMBER_SEQ", // initialValue = 1, allocationSize = 1 // allocationSize: 메모리상 미리 땡기는 사이즈. 디폴트는 50 //) //@TableGenerator( // name = "MEMBER_SEQ_GENERATOR", // table = "MY_SEQUENCES", // pk..
[자바] Stream의 match함수 예제(anyMatch, noneMatch, allMatch) 회사에서 개발하던 중 리스트의 데이터 모두 빈값("") 인경우..라는 조건이 필요하였다. 결론: !Arrays.stream(arr).allMatch(String::isEmpty) 물론 for문을 돌려도되지만 요즘 코드를 한줄로 줄이기에 재미가 들려서 이것저것 찾아보다가 stream의 allMatch라는 녀석을 이용하면 한줄로 표현할 수 있어서 매우 기분이좋아(?) 기록으로 남기려고한다. java.util.Stream에는 제목처럼 세 가지 match 함수가 있다. 그리고 이 세함수의 인자는 Predicate로 T타입을 입력받고, boolean을 출력한다. 다음예제를 통해 조금더 함수의 결과를 잘 알수 있다. public static void main(String[] args) { List list = ne..
어댑터 패턴 어댑터는 '제공되고 있는 것'과 '필요한 것' 사이를 연결해주는 역할을 한다. 예제) Banner 클래스를 사용해서 Print 인터페이스를 충족시키는 클래스를 만든다. PrintBanner 클래스: 어댑터 역할 제공되어 있는 Banner 클래스를 상속해서, 필요로 하는 Print 인터페이스를 구현한다. package adapter; public class Banner { private String string; public Banner(String string) { this.string = string; } public void showWithParen() { System.out.println("(" + string + ")"); } public void showWithAster() { System.ou..
dto 복사에 관하여 일하다가 dto 복사할일이 생겨서 방법을 두가지 생각해봤다. 예제는 dto의 데이터 일부를 추출하여 toString으로 콘솔에 찍어보기다. package dto.test; public class DtoCopyTest { public static void main(String[] args) { MyDto dto = new MyDto(); dto.setId("20221208"); dto.setName("dev-jones"); dto.setBirthday("19900101"); MyDtoCopy dtoCopy = new MyDtoCopy(dto); System.out.println(dtoCopy.toString()); } } class MyDto { private String id; private String..
[스레드] 12. 스레드풀(3) - 리턴값이 있는 작업 완료 통보 package ex09_execute_submit; import java.util.concurrent.*; public class ResultByCallableExample { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool( Runtime.getRuntime().availableProcessors() // cpu의 코어수 ); System.out.println("[작업 처리 요청]"); Callable task = new Callable() { @Override public Integer call() throws Exception {..
[스레드] 11. 스레드풀(2) 예제1) package ex09_execute_submit; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; public class ExecuteVsSubmitExample { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(2); for (int i = 0; i < 10; i++) { Runnable runnable = new Runnable() { @Override public v..
[스레드] 10. 스레드풀(1) ExecutorService 스레드 폭증 - 병렬 작업 처리가 많아지면 스레드의 개수가 증가 - 스레드 생성과 스케쥴링으로 인해 cpu가 바빠지고, 메모리 사용량이 늘어난다. - 따라서 애플리케이션 성능 급격히 저하됨. 스레드 풀(Thread pool) - 작업 처리에 사용되는 스레드를 제한된 개수만큼 미리 생성 - 작업 큐(Queue)에 들어오는 작업들을 하나씩 스레드가 맡아 처리 - 작업 처리가 끝난 스레드는 작업 결과를 애플리케이션으로 전달 - 스레드는 다시 작업큐에서 새로운 작업을 가져와 처리 ExecutorService 인터페이스와 Executors 클래스 - 스레드풀을 생성하고 사용할 수 있도록 java.util.concurrent 패키지에서 제공 - Executors의 정적 메소드를 이용해서 ExecutorService..
[스레드] 9. 스레드 그룹 스레드 그룹 - 관련된 스레드를 묶어서 관리할 목적으로 이용 - 스레드 그룹은 계층적으로 하위 스레드 그룹을 가질 수 있다. - 자동 생성되는 스레드 그룹 * system 그룹: JVM 운영에 필요한 스레드들을 포함 * system/main 그룹: 메인 스레드를 포함 - 스레드는 반드시 하나의 스레드 그룹에 포함 * 기본적으로 자신을 생성한 스레드와 같은 스레드 그룹에 속하게 된다. * 명시적으로 스레드 그룹에 포함시키지 않으면 기본적으로 system/main 그룹에 속한다. 스레드 그룹 이름 얻기 ThreadGroup group = Thread.currentThread.getThreadGroup(); Stirng gruopName = group.getName(); 예제) package ex08_thre..
[스레드] 8. 데몬 스레드 데몬(daemon) 스레드 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동 종료 ex) 워드프로세서의 자동저장, 미디어플레이어의 동영상 및 음악 재생, 가비지 컬렉터 데몬 스레드 설정 주 스레드가 데몬이 될 스레드의 setDaemon(true)를 호출 public static void main(String[] args) { AutoSaveThread thread = new AutoSaveThread(); thread.setDaemon(true); thread.start(); } -> 반드시 start() 메소드 호출전에 setDaemon(true) 호출필 데몬스레드확인 방법 isDaemon() 예제) 메인메소드 종료시 데몬스레드도 종료되는지 확..
[스레드] 7. 스레드 상태제어 예제1: 생산자스레드가 데이터를 만들면, 소비자스레드가 읽는다. package ex05_wait_notify; public class WaitNotifyExample { public static void main(String[] args) { DataBox dataBox = new DataBox(); ProducerThread producerThread = new ProducerThread(dataBox); ConsumerThread consumerThread = new ConsumerThread(dataBox); producerThread.start(); consumerThread.start(); } } 실행결과: ProducerThread가 생성한 데이터: Data-1 ConsumerThread가 읽..