현재 진행중인 사이드 프로젝트에서 사용하는 WebFlux를 분석하면서 정리한 글입니다. Disposable는 reactor.core 패키지 내에 있는 함수형 인터페이스입니다. 태스크 또는 리소스를 취소/폐기할 수 있음을 나타냅니다. 삭제 메서드에 대한 호출이 idempotent이거나 같아야 합니다. void dispose(); 기본 태스크 또는 리소스를 취소하거나 삭제합니다. 이 메서드를 idempotent로 만들려면 구현이 필요합니다. default boolean isDisposed() { return false; } 리소스 또는 태스크가 삭제되면 선택적으로 true를 반환합니다. 처분을 추적하기 위해 구현이 필요한 것은 아니며, 따라서 처분되더라도 결코 true로 return되지 않을 수 있습니다. ..
현재 진행중인 사이드 프로젝트에서 사용하는 WebFlux를 분석하면서 정리한 글입니다. 자바에서 Stream 인터페이스 메서드인 map()과 flatMap()는 중개 오퍼레이션 역할을 수행합니다. 중개 오퍼레이션이므로 메소드 출력으로 다른 스트림을 반환합니다. map()과 flatMap()은 모두 변환 및 매핑 작업에 사용됩니다. map()은 하나의 입력 값에 대해 하나의 출력을 생성하는 반면, flatMap()은 각 입력 값에 대해 출력으로 임의의 수의 값을 생성합니다(0 이상). R : 새 스트림의 요소 타입 스트림 : 인터페이스 T : 스트림 요소의 타입 mapper : 각 요소에 적용되는 상태 비저장 함수 map(), flatMap() 둘 다 새 스트림을 반환합니다. map Stream map(F..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 다섯 번째는 Stream이다. 데이터를 담고 있는 저장소(컬렉션)이 아니다. 연속된 데이터를 처리하는 operation의 모임이라고 생각하면 된다. 스트림으로 처리하는 데이터 소스를 변경하지 않는다. 즉, 어느 컬렉션에 스트림 API를 쓰더라도 컬렉션 내 데이터는 변경되지 않는다. 스트림 API를 중개 오퍼레이션과 종료 오퍼레이션이 존재한다. 중개 오퍼레이션이 lazy하다는 의미는 종료 오퍼레이션이 실행될 때까지 중개 오퍼레이션은 실행을 하지 않는다. ⇒ 중개 오퍼레이션은 정의만 한다고 생각하면 된다. 손쉽게 병렬 처리가 가능하다. 스레드를 만들고 병렬처리하는 + 컨텍스트 스위칭을 고려할 때에는 더 오래 걸릴 수 있다. 엄청 방대한 데이터일 경우에만 사..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 네 번째는 default 메서드와 static 메서드다. 자바 8부터 인터페이스의 추가할 수 있는 새로운 기능이다. API이나 스프링 코드가 이 기능 덕분에 많은 변화가 있었다고 한다. 간단한 예시 인터페이스(GreetingInterface)와 그를 구현한 클래스를 살펴보자. public interface GreetingInterface { void printName(); } import java.util.Arrays; public class App implements GreetingInterface { @Override public void printName() { } } GreetingInterface를 구현했을 때 제공해주는 공통 인스턴스를 추가하..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 세 번째는 메서드 레퍼런스이다. 람다가 하는 일이 기존 메서드 또는 생성자를 호출하는 거라면, 메서드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다. 메서드 레퍼런스 실습을 위해 간단한 클래스를 작성하였다. public class Greeting { private String name; public Greeting() { } public Greeting(String name) { this.name = name; } public String hello(String name) { return "hello " + name; } public static String hi(String name) { return "hi " + name; } public Str..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 두 번째는 람다 표현식이다. 람다 표현식의 기본 형태는 다음과 같다. 🐻 (인자 리스트) → (바디) 앞에서 봤던 함수형 인터페이스 예시 코드에도 람다 표현식이 등장했다. public class UseDoSomething { public static void main(String[] args) { DoSomething doSomething = () -> System.out.println("eric test"); doSomething.print(); } } 인자 리스트 인자가 없을 때 : () ⇒ 대개 Supplier에 해당한다. 인자가 하나 일 때 : (value) 또는 value 인자가 여러 개 일 때 : (value1, value2) 컴파일러가 추론..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 첫 번째는 함수형 인터페이스다. 함수형 인터페이스에 대한 설명 예전부터 사용이 되던 인터페이스 추상 메서드가 딱 하나만 있으면 함수형 인터페이스가 된다. Single Abstract Method(SAM) 인터페이스 abstarct는 생략 가능 인터페이스임에도 불구하고 인터페이스 내부에 static 메서드, default 메서드를 다룰 수 있다. static 메서드나 default 메서드가 있더라도 이 외의 추상 메서드가 단 하나라면 함수형 인터페이스가 된다. 자바가 제공해주는 @FunctionalInterface 애너테이션을 통해 인터페이스를 보다 견고하게 관리할 수 있다. @FunctionalInterface public interface DoSome..
String String 클래스는 불변(immutable) 객체입니다. 문자열 연산이 많은 프로그래밍에서는 계속해서 인스턴스를 생성하므로 성능이 떨어지게 됩니다. 기존의 문자열은 garbage collection에 의해 제거되어야 합니다. 불변하기 때문에 조회 연산에는 타 클래스보다 빠릅니다. 불변하므로 멀티쓰레드 환경에서 동기화를 신경쓰지 않아도 됩니다. StringBuffer, StringBuilder 두 클래스는 문자열 연산이 자주 발생 할 때 문자열이 변경 가능한 객체이기 때문에 성능적으로 유리합니다. StringBuffer, StringBuilder의 차이점 둘의 차이점은 동기화 지원 유무입니다. 동기화를 고려하지 않는 상황에서는 Theard-safe할 필요가 없기 때문에 StringBuilde..
- Total
- Today
- Yesterday
- JPA
- C++
- Java
- 코테
- 프로그래머스
- 테라폼
- 디자인패턴
- Kotlin
- 이펙티브 자바
- Effective Java
- MSA
- Spring
- 클린 코드
- 디자인 패턴
- kotest
- AWS
- BAEKJOON
- kkoon9
- node.js
- programmers
- 알고리즘
- Algorithm
- BOJ
- 백준
- 정규표현식
- Olympiad
- 객체지향
- Spring Boot
- 클린 아키텍처
- 이팩티브 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |