본문 바로가기

Java4

[스크랩] 동시성 문제 예시 및 해결방안 https://devwithpug.github.io/java/java-thread-safe/#site-nav 자바에서 동시성 문제를 해결하는 3가지 키워드 개요 devwithpug.github.io 2022. 4. 14.
객체 생성 패턴 - Builder Pattern 객체를 생성할 때 많이 사용되는 방법에는 생성자 패턴, Setter를 이용한 자바빈즈 패턴 등이 있다. 이 방법들과 Builder 패턴을 이용한 객체 생성에는 무슨차이가 있는지 알아보자. Builder 패턴을 이용한 객체 생성의 장점 1. 메소드 체이닝 방식으로 원하는 값만 세팅하기가 편하다. 2. 필드값이 추가되었을 때 최소한의 소스 수정으로 유연하게 대처할 수 있다. 3. 불변성을 확보할 수 있다. 4. 가독성을 높일 수 있다. 1. 메소드 체이닝 방식으로 원하는 값만 세팅하기가 편하다. 가령 아래와 같은 필드를 가지고 있는 Dog 객체를 'note' 필드는 빈값으로 둔 채 생성자 패턴으로 인스턴스화 시키려고 했을 때, 빈 값이라도 넣어주거나 'note'를 파라미터로 가지지 않는 새로운 생성자를 오버.. 2022. 2. 20.
Java Stream 과 for-loop 성능 비교 Java Stream API는 왜 for-loop보다 느릴까? 스트림이 무엇인가? 스트림은 함수형 프로그래밍 언어에서 이야기하는 sequence와 동일한 용어이다. Sequence는 task의 순서를 나열한 것이다. 예를 들어, 여러분이 군부대에서 식기 당번을 맡았다고 하자. 그러면 식기 당번이 해야 할 일을 sequence로 나열하면 다음과 같다고 가정해보자. # 대대 식기 당번이 해야 할 일 1. 밥차에서 밥을 받아온다. deliverMeal(); 2. 사람들이 다 먹은 식기를 설거지한다. washDishes(); 3. 사람들이 먹다 남긴 음식물 쓰레기를 짬통에 버린다. throwTrash(); 밥을 가져오지도 않았는데 (1번), 음식물 쓰레기를 짬통에 버린다거나(3번), 식기를 설거지하는 것은 (2.. 2022. 2. 9.
[REST API] DELETE 메서드로 requestBody를 보낼 수 없는 이유 / 보내는 법 이 문제는 필자가 서비스 개발을 위해 외부 API 연동을 테스트하면서 겪은 문제이다. API 스펙을 보면 DELETE 메서드로 requestBody를 보내라고 해서 분명 값을 Set해서 보내주는걸 확인했음에도 데이터 처리가 안됐었다. 그래서 해당 사이트 개발자에게 로그를 확인해달라고 했고, 답변은 body가 없다는 내용이였다. 문제 원인 결론부터 말하면, Spring 버전문제였다. 통신을 할 때 스프링에 내장된 RestTemplete 객체를 사용하는데, Spring 4.2.x 버전부터는 DELETE 메서드에 대해서 body를 세팅해준다. 하지만 우리가 사용하고 있는 버전은 3.2.x 여서 body가 세팅이 안됐던 것이다. 프레임워크 버전업은 다른 서비스에 영향을 줄 수 있는 여지도 크고 위험성도 크기 때.. 2021. 4. 10.