일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Go언어
- dynamic programming
- boj
- gradle
- Java
- codewars
- leetcode
- golang
- DP
- 파이썬
- 프로그래머스
- OOM
- 스칼라
- 코드워
- 문제풀이
- scala
- 동적프로그래밍
- redis
- 리눅스
- 알고리즘
- Python
- programmers
- HBase
- 튜토리얼
- docker
- Linux
- 자바
- 주키퍼
- go
- zookeeper
- Today
- Total
목록Java (6)
파이문
Spring boot에서 multiple module로 예제들을 정리하던 중 오래된 모듈 실행 시 다음 에러 발생Error: A JNI error has occurred, please check your installation and try againException in thread "main" java.lang.UnsupportedClassVersionError: com/example/javaspringevent/JavaSpringEventApplication has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recogniz..
싱글톤 클래스 예제는 보통 아래 처럼 작성되곤 한다. public static class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 이렇게 작성하면 단일 쓰레드에서는 문제가 없지만, 멀티 쓰레드(multithread) 에서는 instance 를 가져올 때 (동시 접근하여 instance 를 null 로 판단한 경우) 문제가 생길 수 있다. 가장 쉬운 방법은 getInstance 함수에 synchronized 키워드를 넣..
JDK14 자바 14 가 새로 나왔다(고 하기엔 좀 되었지만...). 엄청난 삽질로 인텔리제이에 자바 14가 돌아가도록 세팅 했다. (기회가 된다면 정리를 따로 하려고 한다.) 아무튼! 14 의 new feature 들을 하나씩 살펴보면서 정리하려고 한다. Records 새로운 예약어이다! 평소 코딩을 하다 보면 객체 값이 변하지 않기를 원하는 경우가 있다. public class OrgMessage { private final int id; private final String message; public RequestDataOrg(int id, String message) { this.id = id; this.message = message; } public int getId() { return id..
Mockito 모킹할 때 리턴과 동시에 어떤 함수가 실행되기를 원할 때 테스트를 진행하다 보면 thenReturn 으로 함수의 결과 값을 임의로 지정할 때가 많지만 때로는 함수 실행 시 동작해야 하는 어떤 액션을 지정하고 싶을때도 있다. 즉, 정리해보면 A() 함수가 리턴하는 값은 a 지만 B() 라는 메서드도 실행되고 있다고 가정해보자. A() { ... B(); return a; } 주로 모킹은 아래와 같이 할 것이다. Mockito.when(A()).thenReturn(a); B() 의 동작은 감춰지게 되는게 보통이다. 그러나 B() 가 디비 업데이트라던지, 다른 어떤 외부 동작(?) 일 때 필연적으로 제어해야할 때가 있다. (내가 그랬다.) 그럴 때는 이렇게 사용하면 된다. Mockito.when..
CountDownLatch vs CyclicBarrier CyclicBarrier 는 여러 쓰레드가 서로를 기다리고 CountDownLatch 는 하나 또는 다수의 쓰레드가 작업이 완료될 때 까지 기다린다. CyclicBarrier 에 모든 쓰레드가 도달하면 값이 초기화 되고 CountDownLatch 는 초기화 되지 않는다. 따라서 CountDownLatch 는 재사용 불가능하다. CountDownLatch 쓰레드를 N개 실행했을 때, 일정 개수의 쓰레드가 모두 끝날 때 까지 기다려야지만 다음으로 진행할 수 있거나 다른 쓰레드를 실행시킬 수 있는 경우 사용한다. 예를 들면 메인 쓰레드에서 5개의 쓰레드를 실행 시키고, CountDownLatch 값을 3으로 설정해본다고 하자. 각 쓰레드가 종료되는 시점..
멀티쓰레드 환경에서 캐시 사용하기 프로그램을 개발하다 보면 캐시를 사용해야 하는 경우를 심심치 않게 발견하곤 한다. 특히 DB 에 접근하여 데이터를 가져올 때, 계속 SELECT (또는 get, scan 등) 하기 보다는 캐시를 사용하는 경우가 많다. DB 에서 값을 가져오는 비용이 비싸지 않아도 IO, 네트워크 latency 비용을 최소화 하려고 하기 때문이다. 캐시는 알고리즘 문제 풀이에서도 자주 사용하는데, 이 경우엔 재 연산 (연산 비용) 을 줄이기 위해서이다. 본 게시글에선 자바를 이용한 예제를 작성하도록 하겠다. 캐시란? 캐시의 정의를 다시 한번 짚고 넘어가보자. 캐시는 동일한 input 에 대해서 같은 작업을 하지 않도록 하는 것이다. 같은 작업을 하지 않는 다는 의미는, input 에 대한..