연재작 (37) 썸네일형 리스트형 Java - Optional 뽀개기 (2) 지난번 글에서는 optional의 의의와 생성까지 다루어 보았다.이번 글에서는 optional이 다루는 중간연산과가장 중요한 최종 연산 및 null이 있을 경우와 없을 경우 값을 어떻게 다룰 지를 써보겠다. + Optional의 경우, context를 유지하는 것이 가장 중요하기 때문에각각의 method에서 값을 처리하기 전에 항상 isPresent()를 통해 있는지 없는지를 확인한다.isPresent 메서드는 간단히 말해 해당하는 Optional의 값이 empty인지 아닌지를 체크하는 메서드이다.Optional이 모나드 패턴, 즉 context를 유지하기 위해서 사용하는 방식인 듯 하다. 2. stream에 비해 처리할 게 적어진 중간 연산 메서드.Optional은 stream과 같이 중간 연산에 대해.. Java - Optional 뽀개기 (1) Optional이란? 모나드 패턴을 사용해서 값을 상태로 래핑한 객체이다.Optional의 가장 큰 특징이자 장점은 Null을 처리하는 과정에 있다. 어떤 값을 받고, 이에 대해 처리하고 싶을 때 해당하는 값으로 Null을 받는 경우가 있다.그렇기 때문에 Null 이 될 수 있다면 기존의 방식은 if문을 사용한 분기처리(혹은 이에 파생된 삼항 연산자 (isNull) ? yes : no 와 같은 방식)를 사용하게 된다.하지만 이러한 로직을 사용하는 코드는 가독성을 떨어트리고null값이 발생한다는 상황을 항상 고려해주어야 하는 단점이 있다. Optional은 이러한 null값이 발생하는 모든 상황에 대해서 유연하게 대처할 수 있는 방식을 제시한다.Optional은 null값이 발생할 수 있는 값에 대해서분.. Spring bean (2) - Singleton, Bean 1. 싱글턴 패턴. 싱글턴 패턴이란? 하나의 클래스에 대해 오직 하나의 인스턴스만 생성되도록 보장하는 디자인 패턴이다.그리고 이를 이용해서 전역적인 관리를 하기 위해 사용한다. 주요 특징 : 하나의 인스턴스: 클래스에 대해 단 하나의 인스턴스만 존재, 필요시 인스턴스를 생성하거나 기존 인스턴스를 반환글로벌 접근: 싱글톤 객체는 어디서든 접근 가능메모리 효율성: 불필요한 객체 생성을 막아 메모리와 자원을 절약 가령 MVC 패턴을 사용한다고 할 때, Controller에서 사용되는 View와 같은 인스턴스는재생성 될 필요가 없고, 이를 어플리케이션이 끝날 때 까지 사용해야 한다.이럴 경우 View를 싱글턴을 사용해서 관리 할 수 있다. 인스턴스가 단 한 개만 존재하기 위해서 클래스를 작성할 때 아래와 같은 .. Java - Stream 뽀개기 (2) Stream은 크게 3가지로 구성되었고 중간 연산 메소드까지 소개했었다. 3. 최종 연산 - Optional을 반환하는 경우(Optional로 가로채는)도 있으니 주의Stream은 데이터들의 다양한 연산을 도와주는데,그 중에는 연산을 했지만 값이 나오지 않거나 에러가 뜨는 연산도 존재할 수 있다.이럴 가능성이 있는 메소드들은 Stream이 아니라 Optional로 반환을 한다. 종류를 설명하기 전에 최종 연산에 대해 간단히 설명하자면,stream을 소비하고 연산을 종료한다.최종 연산이 호출되면 스트림을 더이상 사용할 수 없다.해당 색깔의 method는 전부 다 Optional을 반환한다.findFirst : 첫 번째 요소를 반환. stream이 비어있는 경우도 있기에 Optional을 반환한다.Opti.. Java - Stream 뽀개기 (1) (feat. 함수형 인터페이스) Stream이란?자바에서 대량의 데이터를 가지고 있는 Collection 자료들의 효율적인 병렬처리를 위해서 주어지는 API이다. Stream은 크게 3가지 구조로 나눌 수 있다.Stream의 생성 (Collection ➡️ Stream)중간 연산 (Stream ➡️ Stream)최종 소비 연산 (Stream ➡️ Collection) 1. Stream 생성Stream은 무조건 Collection의 구현체들로부터 생성된다.그래서 아래와 같은 생성의 모습을 보인다.List list = Arrays.asList("a", "b", "c"); // ArrayList로 구현Stream stream = list.stream(); 2. 중간 연산스트림을 변환하거나 필터링 하는 작업을 수행한다.항상 Stream을 반환.. monad 패턴, optional, promise, stream Monad 패턴이란?함수형 인터페이스에서 등장하는 디자인 패턴 개념으로,함수(메서드)에 return값 (Value)을 특정한 타입으로 감싸는 형태의 패턴이다. 모나드 패턴은 두 개의 operator를 정의하는데,Unit : 모나드 타입으로 감싸는 형태의 operator Bind : 모나드 타입으로 감싸져 있는 것을 다른 함수에 적용한 후 , 다시 모나드로 반환하는 연산자이다.Associativity : 연산이 체인될 때 순서와 상관없이 동일한 결과를 보장해야 함.수학에서의 그 결합법칙이다. 찾아보니 Monad 라는 패턴은 수학에서의 범주론에서 다루는 내용이라 그 내용이 수학에서의 것과 동일하다. 이러한 관점에서 보았을 때OptionalOptional은 모나드 패턴이다.Optional unit = Opt.. Spring bean (1) - Dispatcher Servlet (Front Controller Pattern) 1. tomcat에서 dispatcher servlet은 왜 하나인가?공부를 하다보니 왜 하나인가? 라는 질문은 적절하지 않다고 생각되었다.이것을 완벽하게 설명하기 위해서 dispatcher servlet이 둘 이상일 때 효율성에 관련된 내용을 찾아보아야했지만열심히 논문과 같은 부분을 뒤져본 결과 dispatcher servlet, 더 나아가서 Front Controller pattern이 효율적으로 더 낫다는 내용의 정량적 비교에 대한 논문을 찾지 못했기 때문이다.그렇지만 공부를 하면서 Front Controller의 장점에 대한 내용은 많이 볼 수 있었기에 이에 대해 정리해보려 한다. Front Controller Pattern이는 웹 어플리케이션에서 구현되는 디자인 패턴 중 하나로,웹 사이트에서 발.. Java Collection, Map에 내재되어 있는 수학 Java에서는 여러가지 자료구조를 제공하기 위해서java.util을 통해 Collections라는 기본 인터페이스를 내장하고 있다.여기에서 나오는 각종 자료구조들을 우리가 프로그래밍에서 사용하게 된다. Collection을 상속받는 인터페이스는 크게 List, Set이 있으며Collection을 상속받는 인터페이스는 아니지만 Map도 Collection으로 분류한다.제일 상위에 있는 만큼Collection은 상속할 인터페이스, 클래스에게 공통적으로 중요한 메소드를 정의한다. 그런데 이러한 메소드들을 살펴보면 상당히 특이한 부분이 있다.이 메소드들은 진짜 너무나도 기초적인부분인데, 마치 수학에서의 집합과 매우 유사하다.그리고 더 나아가서 생각해보면 이런 자료구조들은 수학에서의 집합과 다를바가 없다. Col.. 이전 1 2 3 4 5 다음