TIL] 함수?객체? 형 프로그래밍

Song-Minhyung·2023년 7월 18일
0

TIL

목록 보기
6/12

함수형 프로그래밍 언어란

바로 전날 에 객체지향 프로그래밍에 대해 적었습니다.
이 둘을 간접적으로 경험해보니 어떤점이 좋고 또 불편한지 느낄 수 있었습니다.

함수형 프로그래밍 언어에서는 사이드 이펙트를 최대한 줄이기 위해서 불변성을 가지고, 참조 투명성과 일급함수, 게으른 평가라는 특징이 있습니다.

불변성

여기서 불변성은 메모리에 이미 담긴 값은 다시 변경하지 않는다는걸 의미합니다.
js에서는 primitive 타입에 대해서 불변성이 지켜집니다. 즉, 값이 바뀌면 다른 메모리에 값을 할당하고 포인터도 역시 그곳을 바라보게 됩니다. 하지만 reference 타입은 불변성이 지켜지지 않습니다. 그래서 리액트를 사용할 때 상태를 갱신해주려면 map등을 사용하게됩니다.

참조투명성

참조 투명성은 개념을 익히는데 시간이 조금 걸렸습니다. 프로그램의 변경 없이도 어떤 표현식을 값으로 대체할 수 있다는 뜻인데 예를들어 f(x) 가 y를 반환할 때 여기의 x에 다시 y를 넣어도 아무런 무리없이 돌아가는 함수를 뜻합니다. 그리고 외부의 값은 참조하지 않고, 함수에 들어온 값만 연산해서 리턴하게 됩니다.

일급함수

일급함수역시 js도 가지고 있는 특징입니다. 함수가 매개변수가 될 수 있고, 함수가 함수의 리턴이 가능하고, 함수를 변수나 자료구조등에 담을 수 있습니다. 요즘에는 c++이나 자바도 이런식으로 사용할 수 있는 방법이 추가됐던것같던데 그래서 전에 코테를 풀 때 js처럼 사용하며, 더 편리하게 쓸 수 있었습니다.

게으른 평가

마지막으로 제일 중요한 게으른 평가라는 개념입니다. js에서 제너레이터를 사용하면 이를 구현할 수 있습니다. 즉, 원할 때 내가 원하는 함수를 실행할 수 있게 됩니다. 이렇게 적고나니 js가 가진 특징만으로 다른 하스켈과 같은 언어처럼 함수형 프로그래밍을 할 수 있을것같은데 이번 주말에 시간이 나면 한번 도전 해봐야 겠습니다.

배운점/실수한점

  • 월요일
    • 상속관계를 표현하는데 abstract class를 사용하자.
    • 클래스의 구조를 설명할 때 interface를 사용하자
    • 보드 등을 탐색할 때 중간에 break하지 않도록 다시 체크해보자.
    • 클래스 설계에 조금 더 신경쓰자
  • 화요일
    • console.table을 사용하면 로그를 더 이쁘게 찍을 수 있다.
    • 불변성(immutable)을 지키려면 다른 메모리에 할당해주면 된다.
    • 참조 투명성은 입력에 대해서만 계산이 이뤄져야하고 외부에는 영향을 주지 않는걸 말한다.
profile
기록하는 블로그

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

뛰어난 글이네요, 감사합니다.

답글 달기

관련 채용 정보