반디북
객체에서 함수로
Ch0
우석
만혁

0. 왜 함수형 프로그래밍인가?

내가 함수형 프로그래밍에 관심을 갖는 이유는 단지 다양한 사고방식을 위해서인데

책에서도 비슷하게 이야기 하고있다

"한번 함수형 방식으로 사고하기 시작하면, 이전 같은 방식으로 코드를 보지 않게된다"

0.2 함수형 프로그래밍의 진정한 의미는 무엇인가?

코드 내에서 어떤 식을 변경해도 프로그램의 행동이 변하지 않는다면, 코드는 참조 투명하고 함수형으로 볼 수 있다고 한다

코드 내의 모든 식을 값으로 바꿀 수 있다면 함수형이고, 아니면 함수형이 아닌것이다

펑터, 고차 함수, 모나드, 애플리케이티브 등과 같은 개념이 코드를 함수형으로 만들어 주는게 아니다

앞서 여러 책들도 읽어보고 강의도 들어보면서 생각한 질문들인데

저자는 참조 투명성에 대해서 강조했다

개인적으로는 함수형 프로그래밍을 한다는 것은 함수형 사고를 하는게 가장 첫번째인것 같다

함수형 사고를 통해 코드를 순수 함수로 만들기 위한 노력을 하고 구현하는게 함수형 프로그래밍이 아닌가 싶다

저자가 말했던 참조 투명성도 순수 함수여야 가능한것같으니 결국 비슷한 생각인거 같기도 ㅎㅎㅎ;;

0.3 객체 지향 프로그래밍 일부러 잊어버리기

원래도 잘 몰라서 잊어버리는건 어렵지 않지

대상과 동작에 집중하기 보다 데이터 변환에 집중하기

이전에 읽었던 DOP 의 내용과 비슷한것 같다

메서드 없는 객체 생성하기

OOP 에서는 클래스에 필드가 공개되어 있고 메서드가 없는 클래스를 흔히 안티패턴으로 부르는데

class User {
    public String name;
    public int age;
}

뭐 이런 느낌이겠지?

함수형에서는 일반적이다 왜냐면 객체가 불변이기 때문 ㅋ

불필요한 인터페이스 피하기

객체 지향 언어에서는 객체가 구체적인 클래스 구현에 의존하지 않고 상호작용할 수 있도록 인터페이스를 정의하는게 일반적이다

하지만 함수형에선 클래스가 필요한 함수의 시그니처에만 의존하게 된다

복잡한 제네릭 타입을 두려워하지 말자

객체지향에선 일반적으로 제네릭 타입을 한두개정도 사용하지만

함수형에선 꽤 많이 사용하게 되는데 이는 함수형 프로그래밍의 복잡성으로 생각되기도 한다

하지만 제네릭 타입은 결국 타입 빌더다

제네릭 5개가 있다는건 생성자 인자로 5개가 들어간다는것과 비슷하다

하지만 20개가 넘어간다면 고민을 해보자