본문 바로가기

CS/Java

(5)
Java FP 5. Monads Monads A structure that puts a value in a computational context. 이것도 제대로 된 개념은 아니다. 수학적으로 어려운 개념이라 한 줄로 딱 정의하기가 어렵다고 한다. 나는 일단, 객체이면서 content가 있을지 없을지 모르는 상태까지 포함하는 개념이라고 이해하도록 하겠다. Monads에는 unit과 bind의 역할을 하는 함수들이 있는데 대충 어떤 건지는 예시를 보면 알 수 있다. stepik에서도 여기서 설명은 안할거니까 너가 구글링해서 찾아봐~! 라고 한다. Java에서 Monads의 역할을 하는 것에는 Optional과 Stream이 있다. Stream은 전에 했던거니까 Optional만 가져온다. Optional Optional encapsula..
Java FP 4. Currying Currying a technique of translating the evaluation of a function that takes multiple parameters into evaluating a sequence of functions, each with a single parameter. 그러니까 currying은 여러개의 인자를 받는 함수를 하나의 인자를 사용하는 함수 여러개로 바꾸는 것이다. 즉, doSomething(1, “Hello”, true) 대신에 doSomething(1)(“Hello”)(true)처럼 하는것! 이렇게 하면 함수를 재사용할 수도 있고, 여러 파라미터를 한 번에 다 받지 않고 몇 개만 받아서 함수의 실행을 늦출 수 있다. (사실 재사용 빼고 후자는 뭐가 장점인지 모르..
Java FP 3. Streams Stream! 겁나 쉬운줄 알았는데 역시나 object 개념들어가니까 바로 적용 못하고~ 개념같은 건 구글링하면 나오니까 헷갈리는 것만 오답노트 시작! 맨 처음에 바보같이 filter와 map을 헷갈려했는데, - filter는 stream에서 조건에 맞는 것들만 살려두는 것 - map은 stream에서 모든 element들에 대해 명령을 실행하는 것 완전 다른 거라 헷갈릴 이유가 없다! Use Stream.range() or Stream.rangeClosed(). Method rangeClosed() includes an upper bound. LongStream rangedStream = LongStream.rangeClosed(100_000, 1_000_000); Map과 reduce는 용법이 다양하..
Java FP 2. Functions are objects Functional Interface Interface with a single abstract method (aside from the methods of Object). @FunctionalInterface public interface Fun { R apply(T t); static void doNothingStatic() { } default void doNothingByDefault() { } } 기본형은 위와 같다. 무조건 하나의 method만을 갖고 있으며, @FunctionalInterface 라고 선언해줄시 method의 개수를 검사해서 1개가 아닐경우 오류를 반환해준다. 이렇게 선언해주는 건 필수는 아니다. 근데 좀 헷갈리는게,, 하나의 method만을 가질 수 있지만 위와 같이 def..
Java FP 1. Lambda expressions and method references Functional Programming in Java! 그 첫번째, lambda expression이다. 람다식 쓰는 자체는 어려운 건 없어서 일단 용법만 step ik에 있는 거 그대로 가져왔다. // a simple way to write a lambda expression BiFunction sum = (x, y) -> x + y; // if the only one argument Function identity = x -> x; // (x) -> x; is valid too // without type inference Function mult = (Integer x) -> x * 2; // with multiple statements Function adder = (x) -> { x += 5;..