# 함수형 코딩

# 객체 지향 프로그래밍

객체 지향 프로그래밍은 객체와 클래스, '정보은닉', '추상 데이터 타입'에 대한 초기 개념을 정리했습니다. 객체지향 프로그램의 핵심 개념은 두가지. 모두 데이터 접근에 관한 내용.

  1. 모든 변수가 어떤 구조에 '캡슐화'되거나 '포함'된다는 것. 코드의 특정 부분에서만 변수에 접근할 수 있기 때문에 코드를 관리하고 읽기 쉬워짐. 프로그램 가장 위에 변수를 선언하지 않고 블록 안에 로컬 변수를 선언하거나 클래스의 메서드만 접근할 수 있도록 안전하게 변수를 선언할 수 있습니다.
  2. 두번째는 상속. 상속은 단순한 클래스에 변수나 메서드를 추가하거나 메서드를 재정의해서 더 복잡한 객체를 만드는 것을 의미합니다. 상속도 캡슐화가 있기 때문에 가능.

# 함수형 프로그래밍

  1. 함수형 프로그래밍은 부수 효과 구성에 관한 내용입니다. 부수 효과를 잘 관리해서 코드의 아무 곳에나 있지 않도록 하는 것입니다. 함수형 프로그래밍에도 연결된 두 가지 핵심 개념이 있습니다. 하나는 계산액션을 구분하는 것입니다. 계산은 외부에 어떤 영향을 주지 않기 때문에 여러 번 실행해도 같은 결과를 돌려줍니다. 하지만 화면에 글씨를 표시하거나 로켓을 발사하는 것과 같은 액션은 실행할 때마다 다른 결과가 나올 수 있습니다. 즉, 액션은 부수효과를 가지고 있습니다. 따라서 코드에 어떤 부분에 부수 효과가 있고 어떤 부분은 '순수한 계산'인지 쉽게 구분할 수 있는 패턴으로 구성하면 프로그램을 쉽게 이해할 수 있습니다. 이 패턴은 단일 스레드(순차적 실행)에서 실행하는 경우와 다중 스레드(동시 실행)에서 실행하는 경우로 나눌 수 있다.
  2. 두번째 중요한 개념은 배열, 리스트 , 데이터베이스와 같은 컬렉션을 하나씩 처리하지 않고 '한 번에' 처리한다는 개념입니다. '한 번에' 처리하기 위해서는 컬렉션 항목에 외부에 영향을 주는 부수 효과가 없어야 합니다.

# 액션과 계산, 데이터의 차이를 알기

  • 액션: 실행 시점과 횟수에 의존. 다른 말로 부수효과(side effects), 부수 효과가 있는 함수(side-effecting function), 순수하지 않은 함수(impure function)라고 부르기도 합니다. 예) 이메일 보내기, 데이터 베이스 읽기
  • 계산: 입력으로 출력을 계산합니다. 다른 말로 순수 함수(pure function), 수학 함수(mathematical function)라고 부르기도 합니다. 예) 최댓값 찾기, 이메일 주소가 올바른지 확인하기
  • 데이터: 이벤트에 대한 사실. 예) 사용자가 입력한 이메일 주소, 은행 API로 읽은 달러 수량

# 데이터에 관하여

# 불변성

함수형 프로그래머는 불변 데이터 구조를 만들기 위한 두 가지 원칙을 사용.

  1. 카피 온 라이트: 변경할 때 복사본을 만듬.
  2. 방어적 복사: 보관하려고 하는 데이터의 복사본을 만듬.

# 데이터의 장점

  1. 직렬화: 직렬화된 데이터는 전송하거나 디스크에 저장했다가 읽기 쉽다.
  2. 동일성 비교: 계산이나 액션은 서로 비교하기 어렵지만 데이터는 쉽다.
  3. 자유로운 해석: 데이터는 여러 가지 방법으로 해석할 수 있음.

# 데이터의 단점

유연하게 해석할 수 있음은 장점이지만, 해석이 반드시 필요하다는 단점. 계산은 해석하지 않아도 실행 가능하나, 해석하지 않은 데이터는 쓸모없는 바이트일 뿐.