Intro TREE 형태로 만들어둔 메뉴 목록을 평면화해야 하는 일이 있었습니다. Stream의 flatMap을 활용하면 이중 컬렉션의 평면화를 아주 쉽게 할 수 있는데, 트리 전체를 평면화 시키는건 코드를 깔끔하게 작성하는데 고민이 많았습니다. 스트림을 활용해 트리 형태의 그래프를 평면화 시키는 작업을 한번 해 보도록 하겠습니다. 이중 컬렉션 평면화 가장 먼저 이중 컬렉션의 평면화를 몸풀기로 진행 해 보도록 하겠습니다. 이 작업은 필요한 경우가 잦아 모두 한번쯤은 작성해 해 보셨을거에요. 일단 중첩 컬렉션을 평면화시키는 메서드를 가진 인터페이스를 선언 하고 interface CollectionFlatter { Collection flatten(Collection collection); } 거기에 맞는 ..
Programming/Java 48
Intro Build a reactive microservice at your pace: Armeria는 아주 작고 단순한 형태로부터 시작해 점차 서비스를 키울 수 있게 해줍니다. your go-to microservice framework for any situation: 어떤 상황에서도 마이크로소프트를 만들 수 있는 프레임워크 입니다. gRPC, Thrift, GraphQL 등의 프로토콜도 지원합니다. 최근 학습을 하다보면 비동기와 논블로킹이라는 키워드가 참 많이 보입니다. 부끄럽지만 저는 항상 Java로 동기식 서버만을 작성해와서 잘 모릅니다. 4개월 쯤 전 프로젝트의 스프링부트 버전을 1.x -> 2.x 으로 마이그레이션 하기 위해 그 차이를 학습중에 스프링 5의 WebFlux 라는게 눈에 들어왔..
Intro 자바가 8버전으로 넘어오며 추가된 기능들이 굉장히 많이 있습니다. 보통 가장 먼저 언급되는 Lamdba와 Stream API 뿐만 아니라 조금의 차이는 있지만 Joda-Time을 그대로 가져온듯한 날짜와 시간 API, 인터페이스에 추가된 Default 메서드와 static 메서드 등 지금까지 이 기능들 없이 어떻게 코드를 짰을까 싶은 요소들이 굉장히 많습니다. 그중에서도 둘째로 치면 서러워 할 클래스가 있으니 바로 Optional 입니다. Optional java.util.Optional.java 자바 아키텍트인 Brian Goetz는 결과 값이 없음을 명확하게 표현 하려는 의도로 Optional을 추가했다고 합니다. 자바8 이전까지는 null이 그 역할을 해 왔지만, null을 사용할 경우에..
Intro 코드를 작성하다 보면 switch 문으로 작성할지, 혹은 if-else 를 사용할 지 고민될때가 자주 있습니다. 개인적으로는 보통 elseif 가 두개이상 붙게되는 시점부터는 보통 코드의 가독성이나 문맥에 따라 switch 문을 사용 하려 하고 있습니다. if.java void function(String args) { if ("a".equals(args)) { // A logic } else if ("b".equals(args)) { // B logic } else { // C logic } } switch.java void function(String args) { switch (args) { case "a": // A logic break; case "b": // B logic break..
Intro COVID 19 이후로 정말 많은것이 달라졌습니다. 하나하나 나열하기도 힘든 만큼 일상 생활 속에서 달라진 것 들이 많지만 그 중 하나의 기술을 뽑자면 QR 코드가 아닐까 싶습니다. 아주 오래전부터 있었지만 별다른 주목을 받지 못했고 그렇게 잊혀지는가 했는데 코로나로 인한 방문 기록, 전자문진표 등 조금씩 많이 쓰이는가 싶더니 카카오페이를 비롯한 여러가지 간편결제 서비스가 많아지면서 없어서는 안 될 기술이 되었습니다. 어플리케이션을 만들 때에도 곳곳에 QR코드를 활용 할 일이 많아졌는데요, QR코드 생성 한다면 크게 두가지 방법이 있습니다. 구글의 QR Codes API 에 요청 QR 코드를 작성하는 OpenSource를 활용해 로컬에서 생성 얼핏 보면 외부 API를 활용 하는게 간단해 보이는..