본문 바로가기

프로그래밍/Java28

[Java9] Reactive Stream Flow - 실습편 안녕하세요. 이전 포스팅에서 Reactive Stream에 대해서 알아봤었습니다. 오늘은 Reactive Stream 스펙을 이용해 실제로 Reactive Stream으로 구현해보도록 하겠습니다. 예제를 만들어 보도록 하겠습니다. 스펙 이전 포스팅에서 확인했던 3가지의 Reactive Stream의 스펙은 아래와 같습니다. 자세한 내용은 이전 포스팅를 참고 부탁드립니다. public interface Publisher { public void subscribe(Subscriber 2020. 7. 15.
[Java8] Java 비동기 - CompletableFuture 안녕하세요. 우리는 이전시간에 [비동기] Reactive Stream 이란 포스팅에서 reactive stream에 대해서 알아보았습니다. Reactive Stream은 published된 이벤트에 반응하여 일련의 값을 처리하는 방식입니다. 하지만 우리가 비동기를 이용할 때는 이벤트를 처리할 때도 있지만 일회성으로 무거운 작업을 여러 CPU로 나눠서 처리하고자 함도 있습니다. 물론 Reactive 방식을 이용하여 처리할 수 있지만 Reactive 방식으로는 이럴경우 Thread를 완벽하게 제어하기가 까다롭습니다. 이럴 때 사용하는 비동기 방식이 일반적으로 생각할 수 있는 thread를 생성하여 작업을 위임하는 방법입니다.이러한 방법은 Java 5에서부터는 Future라는 이름을 추상화 되어 .. 2020. 7. 11.
[Java] Reactive Stream 이란? reactive stream이란 non-blocking(넌블럭킹) backPressure(역압)을 이용하여 비동기 서비스를 할 때 기본이 되는 스펙입니다. java의 RxJava, Spring5 Webflux의 Core에 있는 ProjectReactor 프로젝트 모두 해당 스펙을 따르고 있습니다. 또한 Java9에 추가된 Flow 역시 reactvie stream 스펙을 채택하여 사용하고 있습니다. 따라서 비동기 프로젝트를 잘 이해하기 위해서는 기본 스펙이 되는 Reactive Stream에 대해서 이해가 필요합니다. 이 스펙은 다행스럽게도 공개된 사이트가 있습니다. 원 페이지 주소는 참조에 두도록 하겠습니다. 오늘은 Reactive Stream 스펙에 대해서 한번 알아보는 시간을 가져보겠습니다. 개요 .. 2020. 7. 2.
[Java] 자바에서 줄바꿈, 개행의 규칙 개발은 회사에 들어가면 혼자할 수 도 있지만 협업하는 경우가 훨씬 많습니다. 동일한 시간에 혼자서 만들 수 있는 프로젝트에는 한계가 있기 때문입니다. 무궁무진하게 쉴새없이 좋은 기술들이 나오고 있는 현재, 그리고 계속해서 바뀌는 요구사항. 모든 것을 만족시키려면 협업이 중요합니다. 여러명이서 만들지만 혼자서 만든것과 같은 결과물이 나온다면 그것은 더 없이 좋은 결과물이라고 생각합니다. 그러기 위해서는 코딩의 습관 등이 프로젝트에 일관적일 필요가 있습니다. 이럴 때 이용할 수 있는 것이 Coding Convention입니다. 오늘은 Coding Convention 중 Oracle docs에 나와있는 Coding Convention을 보면서 스스로 자신의 코딩 스타일에 대해서 되돌아보는 시간을 가지고자 합니.. 2020. 6. 26.
[java8] java의 주요 functional interface - Predicate, Operator 안녕하세요. 오늘은 저번 포스팅에 이어서 functional interface를 알아보는 2번째 시간입니다. 오늘 알아볼 Functional Interface는 Predicate, Operate 2가지입니다. Predicate Predicate Interface는 T에대한 조건에 대해서 true / false를 반환하는 Fucntional Interface입니다. Predicate로 사용되며 T는 파라미터입니다. 해당 파라미터에 대해서 true / false를 return 할 수 있도록 작성해주면 됩니다. Predicate interface는 아래와 같습니다. @FunctionalInterface public interface Predicate { /** * Evaluates this predicate .. 2020. 5. 11.
[java8] java의 주요 functional interface - function, supplier, consumer 안녕하세요. 오늘은 java의 functional interface에 대해서 몇가지 알아보는 시간을 가지도록 하겠습니다. functional Interface는 java8에서 나와 주로 람다식으로 자주사용되고 있으며 함수형 패러다임을 달성할 수 있도록 하는데 도움을 주고 있습니다. 해당 interface들은 java.util.function 패키지에 모두 포함되어 있습니다. 오늘은 이런 functional interface와 이용에 대해서 알아보도록 하겠습니다. Function Function은 1개의 파라미터를 받아서 1개의 결과를 반환하는 funtional interface입니다. Function로 사용할 수 있으며 T는 받는 파라미터, R은 반환하는 값입니다. 실제 인터페이스는 아래와 같습니다. @.. 2020. 5. 9.
[java] exception 처리하기 - try-catch-with-resources 안녕하세요. 오늘은 java7에서 추가된 exception을 좀 더 쉽게 처리할 수 있는 방법에 대해서 알아보는 시간을 가지도록 하겠습니다. 우리가 일반적으로 파일을 읽고 쓰는데 Stream을 이용합니다. Stream은 단방향으로 데이터를 전송할 수 있는 개념입니다. 일반적으로 FileInputStream Class를 이용하면 파일에 있는 데이터를 읽을 수 있습니다. 이때 InputStream을 연 후 파일을 읽고 마무리 후에는 Stream을 닫는 흐름을 일반적으로 가져가게 됩니다. 이런 흐름에서 exception이 발생할 수 있는 위치는 InputStream을 열때, 파일을 읽을 때, InputStream을 닫을 때 총 3군대입니다. 이럴때 exception 처리를 어떻게 할 수 있을지 다양하게 보도록.. 2020. 4. 26.
[java] exception 처리하기 - throws에 관하여 안녕하세요. 오늘은 이전 시간에 이어 exception에 대해서 좀 더 알아 보는 시간을 가지고자 합니다. 우리가 이전 포스터에서 확인한 바에 따르면 exception은 JVM에서 일어나고 call stack을 따라서 처리된다고 배웠습니다. 즉, Unchecked exception의 경우 메서드 체인에 의해서 호출한 곳에 exception에 해당하는 catch가 있으면해당 해당 catch method가 실행되는 것입니다. 그렇다면 throws는 왜 있는걸까요? 결론부터 말씀드리면 unchecked exception의 경우에는 즉, RuntimeException을 상속 받는 Exception의 경우 throws는 아무런 의미도 가지지 않습니다. throws는 checked exception의 처리 방법중 .. 2020. 4. 22.
[java] exception 처리하기 - 실전편 안녕하세요. 우리는 이전 포스팅에서 JVM에서 예외(exception) 처리가 어떻게 이루어 지는지를 살펴보았습니다. 예외를 처리하는 방법으로 예외복구, 예외처리 회피, 예외 전환이 있다라는 알려드렸습니다. 오늘은 실제 코드로 exception을 어떻게 처리하는지 공유하고자 합니다. 예외복구 예외복구는 예외가 발생하더라도 어플리케이션의 로직은 정상적으로 실행이 되게 하도록 처리한다는 의미입니다. 한 예로 통신의 재시도를 들 수 있습니다. 예외가 발생하면 일정 시간동안 대기를 시킨 후 다시 해당 로직을 시도하는 것입니다. 일정 횟수동안 재시도를 이런식으로 진행하며, 그래도 정상적인 응답이 오지 않는 경우 fail 처리하는 로직을 생각할 수 있습니다. 실제로 쓰이는 예제를 보도록 하겠습니다. 아래 예제는 s.. 2020. 4. 19.
[java] exception 처리하기 - 이론편 코딩을 하다보면 꼼꼼함의 중요성을 간과할 때가 많습니다. 새로운 기능, 새로운 기술은 정말 재미있고 시간가는 줄 모르고 할 때가 많습니다. 하지만 이러한 새로운 것들을 실제로 시스템에 적용하기 위해서는 기본이 탄탄해야 합니다. 해야함을 알면서도 프로그래밍을 하다보면 까먹게 되는 게 있습니다. 재미가 없어서지요. 재미가 없더라도 반드시 해야하는 것이 2가지 있습니다. 바로 validation과 exception 처리입니다. 반드시 이 2개는 코딩을 하면서 습관으로 가지시는걸 추천드립니다. :) 오늘은 exception에 대해서 알아보도록 하겠습니다. exception exception은 로직이 실행되는 중(Runtime)에 원하지 않는 이벤트가 발생하거나 예상하지 않은 이벤트가 일어났을때의 처리를 말합니다.. 2020. 4. 7.
[java] java Enum의 개념과 기본 메서드 안녕하세요. 오늘은 java의 enum에 대해서 알아보도록 하겠습니다. java에서 정보를 나열할 때 enum class를 많이 사용합니다. enum은 java7에서 부터 등장하기 시작했는데요. 그거 아셨나요 ? enum은 Object Class를 상속 받은 class입니다. 우리가 기본적으로 사용하는 enum 이라고 선언하는 것은 사실 enum class를 상속받아 사용하는 것입니다. Enum 기본 enum을 기본적으로 선언하면 아래와 같습니다. public enum CompanyType { KAKAO, Naver, Coupang } 그리고 사용한다면 아래와 같이 사용할 수 있습니다. 아래 enum Type에는 KAKAO, Naver, Coupuang을 set하고 사용할 수 있습니다. public cl.. 2020. 3. 11.
[Java 8] Java 8, Stream의 Collectors 안녕하세요. 이전 시간에 우리가 Stream에 대해서 알아봤던 것 기억하시나요? 오늘은 이어서 Collectors에 대해서 이야기 해보려고 합니다. Collectors란 "Stream을 일반적인 List, Set등으로 변경시키는 Stream 메서드"라고 입니다. 오늘은 Collectors를 통해 어떤 형태로 변경할 수 있는지에 대해서 알아보겠습니다. 오늘 수고해줄 List는 아래의 String List입니다. List givenList = Arrays.asList("a", "bb", "cc", "bb"); 그렇다면 위의 메서드를 이용하여 한번 Stream을 Collectors로 다뤄보도록 하겠습니다. toCollections toList, toSet toList collector는 모든 Stream el.. 2019. 11. 29.