본문 바로가기
반응형

학습/Java43

Java 8에 등장한 Optional이란? 개요 Java 8에 Optional이 새로 등장했습니다. 어떤 문법인지 어떤 경우에 사용하는지 정리합니다. 코드 가독성을 높이고 널 포인트 예외를 방어해보자 널(Null)은 값이 없음을 가리키며 널 참조는 많은 문제의 원인이 됩니다. 따라서 Java 8에서는 이런 문제점을 일부 해결하기 위해서 java.util.Optional을 만들었습니다. 다음과 같은 코드가 있다고 가정해보겠습니다. String version = computer.getSoundcard().getUSB().getVersion(); 코드에는 문제가 없지만 많은 컴퓨터는 사운드 카드를 가지고 있지 않습니다. 그렇다면 getSoundcard()는 어떻게 될까요? 대게의 경우 null을 리턴해서 사운드 카드가 없다는 것을 가리켰습니다. 불행히.. 2022. 10. 29.
자바 8에 추가된 Date Time API 개요 자바 8의 변화 중 Date와 Time이 새롭게 추가되었습니다. 기존에 어떤 방식을 사용하였고, 어떻게 개선되었는지 확인해보겠습니다. 기존의 Date API와 새로운 API 기존의 Date API는 java.util에 속해 있습니다. java.util.Date - 날짜와 시간, 기본 시간대를 사용하여 출력 java.util.Calendar - 날짜와 시간, 날짜를 조작하는데 더 많은 메소드 제공 java.text.SimpleDateFormat - 날짜와 달력을위한 형식 (날짜 -> 텍스트), 변환 (텍스트 -> 날짜) 자바 8에서는 JSR310(Joda-time을 참고)이 새로 만들어졌으며 java.time 패키지에 담겨 있습니다. java.time.LocalDate - 날짜(시간 포함하지 않음),.. 2022. 10. 28.
Java 8에서 개선된 가비지 컬렉터는? 개요 Java 8은 2014년 3월에 출시되었으며, Java 7과 다른 가비지 컬렉터 구조를 가집니다. 대표적으로 Java 7의 PermGen이 Java 8에서 Metaspace로 대체되었습니다. 어떤 차이가 있는지 알아보겠습니다. PermGen PermGen(Permanent Generation)은 클래스와 메서드 메타 데이터, static 내용들이 저장되는 힙에서 분리된 별도의 힙 공간입니다. 또한 바이트코드, 이름, JIT 정보를 저장합니다. 기본 최대 메모리 크기는 32bit에서 64MB, 64bit에서 82MB입니다. JVM의 메모리 크기를 다음 명령어로 설정할 수 있습니다. -XX:PermSize=[size] is the initial or minimum size of the PermGen s.. 2022. 10. 19.
jar war 차이점 *개요 spring 프로젝트를 서버에 배포할 때 jar, war 2가지 방법으로 배포 할 수 있습니다. 각 방식의 차이점이 무엇인지, 구조가 어떻게 다른지 확인해봅니다. From Java Tips: Difference between ear jar and war files 둘다 모두 java jar를 사용해서 압축된 것이다. 이 파일들은 다른 목적으로 만들어졌다: .jar files: libraries, resources, accessories files 처럼 설정파일로 구성되어 있다. .war files: 어떠한 servlet/jsp container에도 배포할 수 있는 웹 어플리케이션을 포함한다. jsp, html, javascript 혹은 웹 어플리케이션 개발을 위한 파일들이 포함된다. 위 설명에 따.. 2022. 4. 26.
자바 비동기 동기 : 작업들이 한번에 하나씩 이루어지며, 하나의 작업이 끝나고 나서 다음 작업이 시작된다. 비동기 : 하나의 작업이 끝나기 이전에 또다른 작업을 처리할 수 있다. 다양한 요청을 동시에 처리할 수 있으며, 많은 작업을 보다 빠른 시간 내에 끝낼 수 있다. 자바에서 동시성 사용하기 @Async와 @EnableAsync로 자바 비동기를 구현할 수 있지만, 비동기 메서드와 같은 클래스 내의 다른 메서드에서 비동기 메서드를 호출한다면, AOP proxy를 우회하기 때문에 비동기로 작동하지 않는 것을 유의하여야 한다. 보통 비동기처리는 여러개의 API를 동시에 사용하는 경우가 많다. 또한 결과를 이어받아서 처리하거나 결과를 합쳐서 새로운 결과를 내야하는 경우들이 많으므로 CompletableFuture를 통해서.. 2021. 8. 16.
RestTemplate RestTemplate이란? RestTemplate은 클라이언트 사이드에서 동기적인 HTTP 요청을 하는 클래스이다. Spring JdbcTemplate과 마찬가지로, HTTP client에 기반을 둔다. HTTP client 라이브러리는 다른 서버로 request를 보내 response 받아 데이터를 처리하는 기능이 있으며 RestTemplate 이외에 JDK HttpURLConnection, Apache HttpComponents 등이 있다. RestTemplate의 장점 RestTemplate은 기본적으로 HttpUrlConnection으로 구현되어 있다. HttpUrlConnection이나 다른 HTTP client API를 사용하면, 요청을 할 떄마다 같은 상용구 코드가 계속 또 계속 반복등장한.. 2021. 8. 15.
Filter vs Interceptor 차이 (Spring) 개요 Filter와 Interceptor는 모두 요청을 받을 때, 특정 조건으로 제한을 하거나 변경을 할 때 사용하는 것으로 알고 있습니다. 그런데, 단순히 사용만 해보고 어디서 어떻게 작동하는지는 확인했던 적이 없습니다. 그래서 이번 기회에 정리해보겠습니다. 그림에서 알아보는 Filter와 Interceptor Filter Filter는 Web Application에서 관리되며 Spring Framework에 속하지 않습니다. 로깅, UTF-8 설정에 이용되며, 또 하나의 대표적인 예는 Spring Security가 있습니다. Interceptor Interceptor는 DispatcherServlet 안에서 있으며, Spring의 Context에서 관리됩니다. 초록 배경화면을 보면 Intercepto.. 2021. 8. 13.
Validation 어노테이션 직접 만들어보기 build.gradle에 추가한 spring-boot-starter-validation 덕분에 많은 Validaiton 어노테이션들을 사용했고 이것이 전부라고 생각했습니다. 하지만, 알고보니 제가 직접 커스터마이징을 해서 사용할 수 있었습니다. 따라서, 해당 방법에 대해 정리해보고자 합니다. 1. 의존성 추가 // Gradle implementation 'org.springframework.boot:spring-boot-starter-validation' 2. 어노테이션 생성 "yyyyMM" 형식으로 문자열을 입력했는지 알아보는 어노테이션을 만들고자 한다. 아래는 어노테이션을 만드는 가장 기초적인 방법으로 처음에는 굉장히 낯설겠지만 하나씩 이해하다보면 생각보다 직접 만드는게 어렵지 않다. @Constra.. 2021. 8. 12.
@Qualifier & @Resource & @Autowired 문득, 인터페이스를 구현한 클래스들의 @Component등록을 보면서 @Qualfier와 @Resrouce를 살펴보게 되었다. @Autowired로 객체를 사용하고 싶을 때, Spring Container에 Type이 같은 객체들이 여러개 등록되어있다면, 어떤 것을 사용할지 명시해주어야 한다. public interface Party { } ==== package com.sourceallies.person; ... @Component public class Person implements Party { } === package com.sourceallies.organization; ... @Component public class Organization implements Party { } public .. 2021. 8. 12.
반응형