본문 바로가기

Java/Java

(7)
[Java] Json 기본 생성자 없이 역직렬화 하기 개발을 하다보면, 아래와 같은 예외로그를 심심치 않게 마주할 수 있습니다. 위 예외는 역직렬화 과정중에 기본 생성자를 찾을 수 없어서 발생하는 예외 인데요, Spring Boot Web 2.X 이후부터는 설정이 추가되어서 기본 생성자 없이 역직렬화가 가능하지만, 간혹가다 Spring Boot Web 에서 등록해주는 ObjectMapper를 사용하기 힘들때가 있습니다. 생성자에 @JsonCreator를 매핑하거나, 파라미터에 @JsonProperty를 전부 매핑해주면 쉽게 해결이 가능하지만.. 관리포인트가 한군데 더 생기며, 후술할 방식에 비해서 보일러 플레이트가 늘어나기 때문에 선호하는 방식은 아닙니다. 스프링과 같이 기본생성자를 통해 역직렬화를 하기 위해선 어떻게 해야할까요? Jackson에서는 Jac..
[Java] Future.cancel() vs CompletableFuture.cancel() [Java] Future.cancel() vs CompletableFuture.cancel() CompletableFuture의 cancel은 우리의 예상과 달리 동작하고 있는 스레드를 완료 시킬 수 없다. 이 걸 모르고 개발하다가 버그가 발생한 적이 있는데, 이번 글 에서는 CompletableFuture의 cancel과 Future의 cancel의 차이에 대해 알아보겠다. Future 테스트 우선, Future를 이용해 비동기 서비스를 실행하고, 해당 스레드를 도중에 중단시킬수 있는지 확인해보겠다. 로직은 다음과 같다. 1. 10초동안 sleep 동작을 하는 스레드를 실행시킨다. 2. 해당 스레드에 강제로 InterrupedException을 발생시킨다. (cancel이용) 3. Interrupted..
[Java] 스레드와 Synchronized 자바 멀티스레드 프로세스 스레드 글 보러가기 https://dlwnsdud205.tistory.com/279 [Java] Java Heap Stack Static 프로세스 와 스레드 자바의 메모리 구조를 이해하기위해선, 우선 프로세스와 스레드의 차이를 알아야한다. 프로세스 프로세스는 운영체제에서 할당받는 하나의 공간으로 각각의 프로세스는 독 dlwnsdud205.tistory.com 프로세스란 실행중인 하나의 프로그램이다. 모든 프로세스는 하나의 메인스레드를 갖고있으며, 프로세스의 동작은 메인스레드에 의해서 이루어진다. 멀티스레드란 하나의 프로세스 내에서 여러개의 스레드를 만들어 동시에 작업을 수행하는것으로, 프로세스를 만들어 병렬처리하는것보다 효율이 좋다. 멀티프로세스 - 여러개의 프로세스를 만들어 동..
[Java] Java Heap Stack Static 프로세스 와 스레드 자바의 메모리 구조를 이해하기위해선, 우선 프로세스와 스레드의 차이를 알아야한다. 프로세스 프로세스는 운영체제에서 할당받는 하나의 공간으로 각각의 프로세스는 독립적인 자원을 갖고있다. (하나의 응용프로그램이라고 생각해도 된다.) 각 프로세스는 운영체제로 부터 아래의 독립적인 공간을 제공받는다. - CPU시간 - 메모리 주소 - Stack, Heap, Code, Data... 스레드 스레드는 프로세스의 실행단위이다. 모든 프로세스는 하나의 메인 스레드를 갖고있으며, 프로세스내의 동작은 스레드를 통해서 이루어진다. 하나의 프로세스는 여러개의 스레드를 만들수 있으며, 아래와 같은 특징을 갖고있다. - 스레드는 독립적인 Stack 영역을 갖고있다. - 스레드는 Stack영역을 제외한 프로세스..
[Java] compareTo compareTo는 Comparable에 있는 메소드로, 객체들의 비교를 하게 해주는 메소드이다. Comparable의 코드를 보자. public interface Comparable { // compareTo는 자신이 비교대상보다 크다면 1 // 더 작다면 -1 // 같다면 0을 리턴한다. public int compareTo(T o); } 자바의 WrapperClass들은 기본적으로 compareTo를 구현하고있다. 예로, String이 구현하고있는 compareTo 메소드를 확인해보자. public int compareTo(String anotherString) { int len1 = value.length; int len2 = anotherString.value.length; int lim = M..
[Java] Wrapper Class Wrapper Class Wrapper Class는 Object를 구현하는 클래스다. 즉, Wrapper Class는 Object의 메소드를 모두 쓸수있으며,Object를 파라미터로 요구하는 상황에서 유용하게 사용할수있다. WrapperClass의 종류 기본형 래퍼클래스 boolean Boolean char Character byte Byte short Short long Integer float Long double Float int Double WrapperClass 특징 1. 메모리 참조 package algorithm; public class Main { public static void main(String[] args){ Integer a = new Integer(999); int b = a;..
[Java] ArrayList ArrayList의 코드를보며 ArrayList에 대해 알아보자 용도 메소드 쿼리당 시간복잡도 리턴값 사이즈 확인 .size() O(1) int 비어있는지 확인 .isEmpty() O(1) boolean 요소의 인덱스 확인 .indexOf(Object o) O(n) int 요소 포함 확인 .contains O(n) boolean 요소의 마지막 인덱스 확인 .lastIndexOf(Ojbect o) O(n) int 복제 .clone() O(n) Object 인덱스값 참조 .get(int) O(1) generic 인덱스 값 변경 .set(int, generic) O(1) generic 값 추가 .add(generic) O(1) boolean 특정 인덱스 에 값 추가 .add(int, generic) O(n) ..