2021-01-18-TIL

리액티브 선언문

https://www.reactivemanifesto.org/ko/glossary

Java Stream

https://ryan-han.com/post/java/java-stream/

Java Stream sum

https://www.baeldung.com/java-stream-sum

https://medium.com/@kimddub/java-stream-%EA%B3%BC-lambda-%EB%9E%8C%EB%8B%A4%EC%8B%9D-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-ab530e1c1034

https://futurecreator.github.io/2018/08/26/java-8-streams/

프로그래밍 패러다임

  • https://developer.qustory.com/post/programming-paradigm/
  • https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84
  • https://ko.wikipedia.org/wiki/%EB%AA%85%EB%A0%B9%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
  • https://ko.wikipedia.org/wiki/%EC%84%A0%EC%96%B8%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
  • https://ko.wikipedia.org/wiki/%EC%A0%88%EC%B0%A8%EC%A0%81_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
  • https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
  • https://en.wikipedia.org/wiki/Programming_paradigm
  • https://freshrimpsushi.tistory.com/1361
  • https://www.geeksforgeeks.org/introduction-of-programming-paradigms/
  • https://cs.lmu.edu/~ray/notes/paradigms/
  • https://towardsdatascience.com/what-is-a-programming-paradigm-1259362673c2
  • https://www.freecodecamp.org/news/what-exactly-is-a-programming-paradigm/
  • https://digitalfellows.commons.gc.cuny.edu/2018/03/12/an-introduction-to-programming-paradigms/

순수 함수

  • https://en.wikipedia.org/wiki/Pure_function
  • https://jeong-pro.tistory.com/23
  • https://evan-moon.github.io/2019/12/29/about-pure-functions/
  • https://www.freecodecamp.org/news/what-is-a-pure-function-in-javascript-acb887375dfe/
  • https://www.sitepoint.com/functional-programming-pure-functions/
  • https://blog.bitsrc.io/basics-of-javascript-pure-functions-3e6f3437066
  • https://programmingwithmosh.com/javascript/what-are-pure-functions/
  • https://stackoverflow.com/questions/58744557/is-this-a-pure-function
  • https://elmprogramming.com/pure-functions.html
  • https://www.sitepoint.com/functional-programming-pure-functions/

특징 : 지역변수만 사용, call-by-value만 사용, 영향을 미치는 범위가 블록 내부에 한정

클로저

  • https://opentutorials.org/course/743/6544

  • https://www.geeksforgeeks.org/closures-in-java-with-examples/

  • https://stackoverflow.com/questions/3805474/what-is-a-closure-does-java-have-closures/3805546

  • 클로저 closure에 대해 학습하고 정리한다. (예제 코드가 있다면 더 좋다. 리뷰할 때는 다른 언어와 차이점도 비교한다.)

  • 순수함수 pure function에 대해 학습하고 정리한다. (예제 코드가 있다면 더 좋다.)

  • 고차 함수 higher-order function에 대해 학습하고 정리한다. (예제 코드가 있다면 더 좋다. 언어별로 다른 점을 비교해보자.)

  • 프로그래밍 패러다임이 무엇인지 알아보고, 왜 필요한지 토론한다.

  • 객체지향 패러다임과 함수형 패러다임 공통점과 차이점을 토론한다.

Java 초보 때 자주하는 실수

  • 모두 static 필드 및 메서드로 선언해버린다. (main이 static이니깐 자연스럽게 에러 제거를 위해서)
  • 접근제한자를 모두 default나 public으로 선언해버린다.
  • main이나 한 메서드의 덩치가 너무 커져버린다.
  • 메서드는 단일 책임을 가져야 하는데 그렇지 않게 된다.
  • 클래스 단위와 이름이 명확하지 않고, 그 내용 또한 그러하다.
  • 메서드를 너무 잘게 쪼개서 오히려 가독성이 떨어진다.
  • 변수명에 a, b, c 또는 약자를 사용한다. 이는 가독성을 떨어뜨릴 뿐이다. IDE에서 자동완성 기능을 제공하므로, 이를 이용하여 약자를 사용하지않도록 하는 것이 좋다.
  • 들여쓰기가 3번 이상 나오는 경우가 많다. for ~ if ~ if … 이런 경우 우선은 들여쓰기를 제거하도록 노력해본다. 하지만 불가피한 경우 내부 블록의 일부를 메서드로 빼낸다.
  • 주입을 하지않고 생성자를 마구 호출한다.

Java Stream vs for loop

  • https://blog.jdriven.com/2019/10/loop/

method를 pure method로 변경

  1. 클래스 변수를 지역 변수로 변경

https://stackoverflow.com/questions/50466260/does-a-pure-method-have-to-be-static

https://blog.knoldus.com/functional-java-understanding-pure-functions-with-java/

1급 객체

https://medium.com/@lazysoul/functional-programming-%EC%97%90%EC%84%9C-1%EA%B8%89-%EA%B0%9D%EC%B2%B4%EB%9E%80-ba1aeb048059

builder pattern

Method chaining with inheritance

https://blog.advenoh.pe.kr/java/%EC%9E%90%EB%B0%94%EC%97%90%EC%84%9C-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%9D%98-%EC%83%81%EC%86%8D-%EA%B5%AC%EC%A1%B0%EC%97%90%EC%84%9C-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%B2%B4%EC%9D%B4%EB%8B%9D-%ED%95%B4%EB%B3%B4%EA%B8%B0-Method-Chaining-with-Inheritance/

Questions

Q. 매개변수로 함수를 받는게 순수 함수인가? 그 함수도 순수함수라면?

Q. static final을 붙여야 순수 함수인가?

Q. final 클래스 변수를 사용하면 그것도 퓨어 함수인가? 로컬변수만

Q. HashSet을 넣으면 외부에서 약수가 아닌 다른 HashSet을 넣으면 문제가 된다?

Tips

Tip. 그룹핑

Tip. range closed 사용하면 인덱스 + 1 안해줘도 된다.