티스토리 뷰

기타/TIL

210119 화 TIL

bong-f 2021. 1. 19. 09:43

Done

  • 미션 완료
  • 미션과 관련된 개념 학습

Learned

함수형 프로그래밍 vs 객체지향 프로그래밍

  • 어떤 것이든 컴퓨터는 신경 안쓴다. 인간이 보기에 편하고 사용하기 좋은 것
  • 둘의 프로그래밍은 반대는 아니다. 다른 것
  • 함수형 프로그래밍은 문제를 함수 단위로 나누고 해결 vs 객체지향은 객체 단위로 나누고 해결
  • 함수형 프로그래밍은 알고리즘을 노출 x vs OOP는 알고리즘을 노출, 전역상태 인정
  • 선언형 vs 명령형
  • 함수형 프로그래밍 장점
    • 검증이 쉽다
    • 동시성 프로그래밍이 가능하다. 어떤 다른 변수들이나 외부요인의 충돌이 x.

함수가 1등 시민

  • 말그대로 함수가 1등이다.
  • 함수를 기준으로 프로그래밍을 한다.
  • 함수를 변수에 할당할 수 있고 인자값으로 넘기거나 리턴값으로 받을 수 있다. 함수를 객체처럼 쓸 수 있다는 말로 이해했다.
  • 함수의 재사용 가능

람다식

  • 메소드를 선언하지 않고도 () -> { } 이런식으로 하나의 식으로 표현한다.
  • 이 자체가 return 값에 들어갈 수도, 매개변수로 들어갈 수도 있다. ( 람다로 인해서 자바도 함수를 변수처럼 다루는 것이 가능해졌다)
  • 메서드에서 이름과 반환타입을 제거하고 (인자) -> { } 식으로 작성
    • '()'는 인자값이 한 개일 때 삭제 가능하다.
    • 매개변수의 타입이 추론 가능한 경우 생략 할 수 있다.
    • { } 의 값이 한 문장일 때 생략가능하다. 단 return 이 포함되어 있으면 생략 불가인데, 보통 return까지 생략한다.
  • 람다식은 함수형 인터페이스를 활용해서 다룰 수 있다.

FP 키워드

  1. 고차함수 Higher Order Functions
  • 인자로 함수를 받아 새로만든 함수
  1. 불변성
    • 데이터를 변경하지 않는다. 새로운 데이터를 만든다고 해도 기존 데이터를 건들지 않고 그를 복사해서 만든다.
    • 그렇기 때문에 데이터 파싱하는 곳에서는 잘 활용할 수 있다. 데이터를 건들지 않으니까.
    • 그렇기 때문에 검증하기가 쉽다. 결과값이 예측되고 불변하니까. 또 각 함수들의 결합이므로 각 함수들이 잘 동작하는지 테스트하면 된다. (객체지향은 그 상호작용까지 고려해야한다)
  2. 순수성
    • 순수함수(Pure Function) : 동일한 입력에 동일한 결과가 나오면 된다.
    • 함수 내부에 상태가 없기 때문에 변하는 값이 없다. 입력값에 결과값 나온다.
    • 부작용을 방지한다. (해당 함수 호출이 returns값 외에 메서드 바깥에서 관찰가능한 어떠한 변화도 일으키지 않는다.) (side effect가 부작용으로 해당되어 외부에서 함수에 영향을 주는지 알았는데 함수 실행이 다른 외부에 어떤 영향을 주지 않음을 뜻한다. 그래서 부수효과로 해석하기도 한다)

Shared State

  • 공유되는 스코프 안의 변수, 객체, 메모리 공간이거나 두 스코프 간의 전달되는 객체의 상태
  • 한 변수가 여러 메소드에서 쓰일 때, a작업이 다음 작업으로 넘어가려고 특정 변수상태를 만들어 두었는데, b작업이 변수상태를 바꿔 버리는 것. 그럼 a작업은 에러가 난다. 공유 상태를 피하면 이런 경우를 방지할 수 있다.

커링

  • 인자를 여러개 받는 함수를 분리해서 인자를 하나만 받게 만드는 것이다.
  • 못받은 인자를 받는 다른 함수를 구현한다.
  • 인자값을 한 개로 만들어 다른 함수와의 결합 용이성을 높인다.

클로저

고차함수

  • 함수를 더 추상화하면 차원이 높아지는 고차함수로 표현할 수 있다. ?
  • 하나 이상의 함수를 파라미터로 받거나 결과로 다른 함수를 반환할 수 있는 경우에만 고차함수로 본다.https://sthwin.tistory.com/21
  • 함수를 추상화 하면 그 높은 차원의 복잡한 것을 몰라도 된다. 그냥 추상화한 함수 안에 무엇인지 몰라도 사용할 수 있다.

프로그래밍 패러다임이 무엇인지, 왜 필요한지

  • 위키백과의 정의

    프로그래밍 패러다임(programming paradigm)은 프로그래밍의 패러다임 형태이다. 프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 해 주고, 결정하는 역할을 한다. 예를 들어 객체지향 프로그래밍은 프로그래머들이 프로그램을 상호작용하는 객체들의 집합으로 볼 수 있게 하는 반면에, 함수형 프로그래밍은 상태값을 지니지 않는 함수값들의 연속으로 생각할 수 있게 해준다.

  • 프로그래밍의 기본단위를 어떤 것으로 볼 것인가를 결정하주게 한다고 생각했다.

  • 자바는 객체지향 프로그래밍 지원

그 외 공부할 키워드

  • 객체지향 패러다임, 함수형 패러다임의 공통점, 차이점
  • 지연실행 : 순서대로 코드를 실행하지 않고, 간단한 작업부터 처리하는 것?
  • 지연연산(Lazy Evaluation) : 지연 연산이란 어떤 값이 실제로 쓰이기 전까지 그 값의 계산을 최대한 미루는 것?
  • 함수형 프로그래밍 구현 방법 : 함수를 잘게 나누고 파이프 라인을 구현해 본다. (자바로 파이프 라인을 구현하는 법)
  • 메소드 체이닝
  • 무상태

참고자료

공부할만한 자료

  • EVERNOTE에 작성

학습태도

  • 전문분야를 갖는 것은 좋지만 좋은 프로그래머가 되겠다 목표를 삼아야 한다 프론트는 절대 안할 거야가 되어선 안돼. 프로그래머 = 문제를 해결하는 사람
  • 미션 목표 : 문제를 보고 설계도를 그린다 > 코드를 짠다. 이를 연습.

Bad

  • 어제 달려서인지 오늘 조금 놓았다

Good

  • 코드스쿼드에는 ( 뛰어남 + 열심히함) 하는 사람들이 정말 많다. 그 분들을 보며 자극받아 나아간다. 코드 스쿼드 짱짱맨

Feeling

  • 평 - 안
  • 자바에서 제공하는 기본? 함수 인터페이스를 이용해서 함수를 만들어보았다. 사실 a(b(())와 (둘다 Function 인터페이스의 로직을 따르는 함수일 떄) a.andthen(b)과 별 다를 바가 없지만 눈으로 함수를 조립하는 기분을 더 생생하게 느낄 수 있었다. 그리고 a.andthem(b)를 이름을 붙여 함수처럼 들고 다니는 과정이 더 편리했다. a(b())라는 메소드를 선언하려면 그 로직을 다 짜줘야 하는데 단지 a.antthen(b) 하면서 로직을 짜지 않아도 되고 명시적으로 보이는 느낌이 재밌었다. 레고를 하나하나 조립하는 느낌. 그래서 미션이 제시한 목표를 달성한 코드 보다는 함수형 인터페이스를 통해 함수형 프로그래밍의 재미를 알아간다는 느낌으로 답을 제출했다. 함수가 레고블록처럼 쓰이는 느낌 재밌다. 이것이 오늘 학습한 함수형 프로그래밍은 how보다는what에 집중하는 철학? 과 일맥상통하는 것 같다.

'기타 > TIL' 카테고리의 다른 글

210121 목 TIL  (0) 2021.01.21
210120 수 TIL  (0) 2021.01.20
210118 월 TIL  (0) 2021.01.18
210116-07 토일 TIL  (0) 2021.01.16
Learned  (0) 2021.01.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함