2021-01-19-TIL

Tip. 백엔드 개발자, 프론트엔드 개발자, 모바일 개발자 는 신입 때 어필해야하는 요소가 아니다. 신입은 문제가 주어졌을 때 해결할 수 있는 개발자라는 점을 키워야하고 어필해야한다.

Tip. 매개변수가 너무 많다면 그 함수가 너무 많은 기능을 담당하고 있는것은 아닌지 검사해보아야한다. 기능을 축소한다면 매개변수의 개수는 줄어들것이다.

Tip. for를 사용하지 않고 forEach만을 사용하는 방법 연습

클로저를 이해할 때 시점에 따라 다르게 생각해야한다. 선언할 때와 실행할 때 의미가 다르다.

객체지향적 프로그래밍을 공부하다가 함수형 프로그래밍으로 넘어가는 것은 비교적 수월하나, 그 반대는 어렵다.

  1. 역할을 잘 정한다. 역할에 대한 블록을 집어들고 원하는 곳에 끼운다.
  2. 그렇게 정하면 파이프로 그 블록을 연결할 수 있다.
  3. 그 파이프인 LineA, LineB를 또다른 파이프의 함수로 사용할 수 있다.
  • 함수 합성
const lineA = pipe(method1, method2, method3);
lineA([1,2,3])
lineA(['foo'])

method3(method2(method1[1,2,3]))

FP는 프로그래밍계의 산업혁명일까? 그렇다고 해도 아직 수공업으로 만드는 장인이 존재하듯이 OOP가 사라지진 않을 것 같다.

함수 합성을 위해서는 요소에 속하는 함수들이 모두 순수해야한다. 순수함이 보장되어야 블록처럼 이어붙여서 실행한 그 덩어리 함수도 순수성이 보장된다.

const sum = (a) => (b) => (c) => a+b+c;
const foo = sum(1)(3);
foo(50);
> 54
  • 테스트 용이성

같은 입력에 대해 같은 출력이 보장된다면, 테스트가 매우 용이하다. 순수함수 1만개가 상호연결되어 동작하는 프로그램에서 1개가 더 추가되어도 다시 테스트를 돌려서 모두 정상적으로 테스트가 된다면, 프로그램 전체도 정상적으로 동작한다는 것이 보장된다. 프로그램 전체도 순수함수이기 떄문이다.

method currying and chaiging

  • https://blog.revathskumar.com/2014/12/javascript-currying-and-chaining.html

  • https://stackoverflow.com/questions/4120968/javascript-currying-vs-method-chaining

Q. 체이닝과 커링이 자바스크립트에서 코드는 다른데, 내부적으로도 다르다고 할 수 있는 건가요?

Q. 순수함수의 순수성을 검증할만한 툴이나 프레임워크가 있는가?

A. 테스트 코드를 작성해서 계속 동일한 입력에 대해 동일한 출력이 보장된다면 순수하다고 인정할 수 있다. 하지만 순수 함수라는 개념 자체는 이상적인 개념이다.

Q. 체이닝과 커링의 차이점?

A. 체이닝은 같은 타입을 리턴해야 가능하고, 커링은 그냥 연결

Pure Functions with Java

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

Java8 : Lambdas

https://www.oracle.com/technical-resources/articles/java/architect-lambdas-part1.html

https://www.oracle.com/technical-resources/articles/java/architect-lambdas-part2.html

Database Index and Optimizer

https://www.red-gate.com/simple-talk/sql/performance/index-selection-and-the-query-optimizer/

Enum in Java

https://woowabros.github.io/tools/2017/07/10/java-enum-uses.html

String vs StringBuilder, StringBuffer

https://ifuwanna.tistory.com/221

  • 공부할 거리 : 네이버 부스트코스 CS50, 함수형사고(닐 포드, 한빛미디어), 모던 자바 인 액션(라울 등, 한빛미디어), 스프링 입문을 위한 자바 객체 지향의 원리와 이해(김종민, 위키북스)

Mutable and Immutable data

  • https://benmccormick.org/2016/06/04/what-are-mutable-and-immutable-data-structures-2

  • https://en.wikipedia.org/wiki/Immutable_object

  • https://towardsdatascience.com/immutable-vs-mutable-data-types-in-python-e8a9a6fcfbdc

OOP vs FP

https://www.educba.com/functional-programming-vs-oop/

https://medium.com/@shaistha24/functional-programming-vs-object-oriented-programming-oop-which-is-better-82172e53a526

https://www.geeksforgeeks.org/difference-between-functional-programming-and-object-oriented-programming/

Parameter vs Argument

https://stackoverflow.com/questions/156767/whats-the-difference-between-an-argument-and-a-parameter

내가 아는 바에 의하면 파라미터는 함수의 시그니처에서 괄호안에 표시된 그 타입과 타입의 이름이고, 아규먼트는 실제로 그 함수를 호출할 때 파라미터로 전달되는 값이다. Parameter == 매개변수, Argument == 인자, 인수로 대응되는 것으로 보인다. 하지만 한글 표현에는 혼동의 여지가 너무 많다. 따라서 그냥 외래어 표기를 하는 것이 차라리 나은 것 같다.

컴퓨터 용어를 영어와 대응하는 한글로 짝을 지어서 표로 정리하여 따로 페이지를 구성하면 블로그의 글을 이해하는데에 좀 더 도움이 될 것 같다.