Java
![[Kotlin] @JvmOverloads - 생성자/함수 손쉽게 오버로딩](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV9Qei%2FbtsMt6eGUVw%2FZ5DKoEICoz1NdwioLXiRxk%2Fimg.png)
[Kotlin] @JvmOverloads - 생성자/함수 손쉽게 오버로딩
Kotlin으로 생성자를 만들 때, 다음과 같이 default value를 지정할 수 있다.data class TestDto( val one: String = "1", val two: String = "12", val three: String = "123",) 생성자를 사용하는 곳에서도 다음과 같이 파라미터를 직접 명시해서 편하게 생성자를 호출할 수 있다.TestDto(one = "1", three = "234")-> 이러면 two 프로퍼티에는 default value가 들어간다. 그러나 java에서 kotlin의 객체를 사용한다면? 이렇게 전체 생성자 혹은 기본 생성자만 생성할 수 있게 된다.kotlin처럼 유연하게 생성자를 만들고 싶어서, 각 케이스별로 kotlin에 부 생성자를 정..
[Spring] ObjectMapper -> Jackson2ObjectMapperBuilder vs 생성자
1. 기본생성자가 없는 객체에 대한 역직렬화 차이여기 객체 1개가 있다.@Getter@AllArgsConstructorpublic class TestDto { private String id;} 기본생성자가 없는 객체를 만들었다. 직렬화/역직렬화 테스트를 해보자.@RestControllerpublic class TestController { @GetMapping public TestDto test(@RequestBody TestDto dto) { return dto; }}// input{ "id": "1"}// output{ "id": "1"}문제 없이 성공한다. 성공하는 이유는 JacksonHttpMessageConvertersConfiguration 클래스..
[Spring] jackson 역직렬화, 필드가 1개일 때 HttpMessageNotReadableException
jackson 2.17 문제 상황개발환경java 21spring 3.3.0jackson 2.17.1 다음과 같은 java 코드가 있다.@RestControllerpublic class TestController { @GetMapping public TestDto test(@RequestBody TestDto dto) { return dto; }}@Getter@AllArgsConstructorpublic class TestDto { private String id;} 1. TestDto는 필드가 1개 & 기본 생성자 없이 전체 생성자만 갖고 있다.2. 컨트롤러에서는 필드가 1개인 TestDto를 @RequestBody로 역직렬화해야 한다. HttpMessageNotRead..
[Java] String + null
Java에서 String 타입과 null에 대해 '+' 연산을 수행하면 어떻게 될까?System.out.println("123" + null);// 결과123nullNPE가 발생할줄 알았는데, 123null이 출력된다..? 그 이유는 자바 doc을 보면 알 수 있다. If an operand of type String is null, then the string "null" is used instead of that operand. -> 어느 한 피연산자가 null이면 해당 피연산자 대신 문자열 "null"이 사용된다는 뜻이다. 만약 특정 문자열에 null이 더해질 때 NPE를 발생시키고 싶다면 String.concat() 메서드를 사용하면 된다."123".concat(null)null.concat("1..
[Java] Suppressed Exception
✅ Suppressed ExceptionSuppressed Exception은 throw되지만 무시되는 예외를 말한다.예를 들어, try-catch-finally 문에서 try문에서 예외가 발생했을 때, catch문에서 예외를 받아 throw한 상황에서,finally 문에서도 예외가 발생했다면, try문에서 발생한 예외는 무시(suppressed)된다.'무시'된 예외는 실제로 throw되지 않아, stacktrace에 찍히지 않는다.-> 잘 이해가 안될 수 있는데, 다음 예제를 통해 더 자세하게 알아보자. ✅ try-catch-finally문에서 Suppressed Exceptionpublic static void demoSuppressedException(String filePath) throws IO..
[Java] Comparator와 @FunctionalInterface
함수형 인터페이스 공부하다가, Comparator 인터페이스 @FunctionalInterface 애노테이션이 붙은 것을 확인했다. @FunctionalInterface public interface Comparator { int compare(T o1, T o2); boolean equals(Object obj); ... } 해당 애노테이션은 Comparator가 함수형 인터페이스라고 명시하는 것이다. 그러나 함수형 인터페이스는 추상 메서드가 한 개여야 한다. 근데 Comparator는 위와 같이 추상 메서드가 두개다. -> 왜 Comparator를 함수형 인터페이스로 명시한걸까하는 의문이 들었다. 찾아보니, 모든 클래스는 Object 클래스를 상속받데, 만약 아무 것도 상속받지 않은 클래스가 있으면 ..
[Java] public class
자바에서 하나의 .java 파일에 여러 class를 만들 수 있지만, public class는 파일명과 동일한 이름의 클래스 하나만 만들 수 있다. ex) Member.java public class Member { } class Id { } class Name { } 하나의 자바 파일에 여러 클래스를 작성하는 경우에, 하나의 public(대표) class를 파일명과 동일하게 하는 것이 코드의 가독성에 도움이 된다고 한다. (자바를 만든 제임슨 고슬링이 이렇게 하라고 함..) +) 만약 public class의 클래스 이름이 파일명과 다르면 컴파일 오류가 발생한다. 참고로 Kotlin의 경우, 하나의 파일에 여러 class를 선언할 수 있고, 파일명과 꼭 맞출 필요도 없다. ex) Member.kt cl..
![[자바 최적화] 자바 언어의 성능 향상 기법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6Xe2U%2FbtsxkhKf9h6%2FJf6Cq6FIvpJkgQoz4XnJsk%2Fimg.png)
[자바 최적화] 자바 언어의 성능 향상 기법
자바 최적화 책 정리 자바 최적화(Optimizing Java) | 벤저민 J. 에번스 - 교보문고 자바 최적화(Optimizing Java) | 자바 애플리케이션 성능을 한 단계 높여줄 튜닝 이야기성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고 product.kyobobook.co.kr 컬렉션 최적화 ✅ 자바 최적화의 한계 자바는 객체를 생성하면 객체를 가리키는 레퍼런스와(스택), 객체 자체(힙)를 따로 저장한다. -> 이렇게 레이아웃을 나누는 방식은 C/C++ 형식의 배열이나 벡터를 사용하는 것만큼 성능을 얻을 수 없게 한다. ✅ 자바 컬렉션 컬렉션이 애플리케이션 성능에 전체적인 영향을 끼칠 수 있다는 사실을 인식해야 한다. List 최적..