연재작/프로그래밍 언어 (10) 썸네일형 리스트형 Aspect Oriented Programming 요즘 DB와 Transaction에 대한 공부를 하면서 AOP라는 흥미로운 개념에 대해 배우게 됐다.방식 자체도 특이하지만 기존에 배웠던 Lombok과 유사한 것처럼 보여서 해당 개념을 설명하고 어떤 부분이 다른지를 설명하고자 한다. 1. Aspect Oriented Programming "In computing, aspect-oriented programming (AOP) is a programming paradigm that aims to increase modularity by allowing the separation of cross-cutting concerns. It does so by adding behavior to existing code (an advice) without modify.. IntegerCache, Atomic, CAS 0. 서론 Java 관련 공부를 하다가 흥미로운 사실을 알게 됐다.Integer i1 = 45;Integer i2 = 45;Integer i3 = 999999999;Integer i4 = 999999999;System.out.println(i1 == i2); // trueSystem.out.println(i3 == i4); // false위쪽은 왜 true이고 아래쪽은 왜 false인가? 에 대한 의문이었다. Java는 Stack 영역에 primitive type일 경우, 그 값을 직접 가지게 되고reference type은 Heap이나 Static영역에 객체 주소를 가지는 것으로 알고 있는데, 전자와 후자 모두 동일한 결과 값을 가져야 하는 것 아닌가?하는 생각이 들었기 때문이다. 1. Integer.. Java Casting, Generic 응용 1. Arrays.asList는 이상하다. 길이가 고정된 어떤 Array를 설정하고,Arrays.asList()를 사용해서 어떤 값을 List로 바꾸어 줬다. 이 상태에서 어떤 값을 추가하거나삭제해서 배열의 길이를 바꾸려고 한다면, UnsupportedOperationException 가 뜬다.String[] temp = {"asdf","dfe", "dfd"};List list = Arrays.asList(temp);System.out.println(list); // [asdf, dfe, dfd]list.add("a"); // UnsupportedOperationExceptionlist.remove(1); // UnsupportedOperationExceptionlist.set(1, "asdf");Sy.. 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값이 발생할 수 있는 값에 대해서분.. 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.. 이전 1 2 다음