yeahzy
주말에 몰아쓰는 개발일기
yeahzy
전체 방문자
오늘
어제
  • 분류 전체보기 (22)
    • 주말에 쓰는 개발일기 (20)
      • javascript (10)
      • java (1)
      • react-native (5)
      • react (2)
    • 모든 일은 평일에 이루어지지 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • popup에서 부모창 함수 호출
  • javascript
  • fileupload
  • Ajax
  • opener 안될 때
  • 크롬 opener
  • 크롬개발자도구오류
  • 프론트엔드로드맵
  • showModalDialog
  • 신입개발자로드맵
  • window.opener
  • showModalDialog.js
  • javascript opener오류
  • Java
  • 개발자역량강화로드맵
  • event.preventDefault()
  • event.stopPropagation()
  • next.js기초
  • 파일업로드
  • popup opener

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yeahzy

주말에 몰아쓰는 개발일기

주말에 쓰는 개발일기/javascript

함수형 프로그래밍(Functional Programming)

2022. 9. 7. 00:31

프로그래밍 패러다임

프로그래밍 패러다임은 어떤 방식으로 프로그래밍 할 것인가에 대한 방식과 기법 중 하나이다.

절차지향프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍, 함수형 반응형 프로그래밍 등이 있다.

 

함수형 프로그래밍

함수형 프로그래밍 (函數型 프로그래밍, 영어: functional programming)은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.
-위키백과

사람의 사고방식과 비슷한 객체지향, 절차지향 프로그래밍과 다르게, 함수형 프로그래밍은 대량의 데이터를 병렬적으로 안정적으로 처리할 수 있도록 수학적 함수처럼 프로그램을 구현한다. 마치 파이프라인처럼 인풋을 넣으면 처리과정을 거쳐 아웃풋이 나오게 되며, 외부에서는 함수 내부에 접근할 수 없고, 함수 내부에서도 외부에 접근할 수 없다.

 

함수형 프로그래밍의 특징

순수함수 (Pure Functions)

같은 인자가 입력될 때 같은 결과값을 리턴하는 함수이다.

외부의 상태값이나 변수를 변경하지 않고, 외부의 상태를 참조하지 않는다.

언제 선언이 되었든지 외부에 전혀 영향을 받지 않는다.

const add = (a:number, b:number) => {
	return a+b
}

const result = add(2,3)

비상태(Stateless), 불변성(Immutability)

전달된 인자의 데이터를 변경하지 않고 새로운 객체를 만들어 리턴해야 한다.

외부의 상태가 변경되거나 예상하지 못한 에러가 발생하는 등의 사이드 이펙트(side effect)가 발생하지 않기 때문에 동시다발적 멀티스레딩 환경에서도 안정성을 유지할 수 있다.

자바스크립트에서는 불변성의 데이터타입이 따로 없으므로 object.freeze() 함수를 이용하여 Object를 불변성으로 만들어줄 수 있다.

const object = {c:1, d:'d'}
const update = (object) => {
	return {...object, c:c+1}
}

//Object.freeze()
const object = Object.freeze({c:1, d:'d'})
const update = (object) => {
	return Object.freeze({...object, c:c+1})
}

문장이 아닌 표현식만!

if, switch, for 문 등의 statement를 사용하지 않는다. 

let numbers = [1,2,3];

const notFuctional = () => {
	for(let number of numbers){
    	number = number * 2;
    }
}

const functional = () => {
	return numbers.map(number => number * 2);
}

일급객체(First-class)와 고차함수(higher-order functions)

일급객체

다른 객체들이 일반적으로 적용 가능한 연산을 모두 지원하는 객체로, 함수 자체가 객체가 된다.

  1. 모든 요소는 함수의 실제 매개변수가 될 수 있다.
  2. 모든 요소는 함수의 반환 값이 될 수 있다.
  3. 모든 요소는 할당 명령문의 대상이 될 수 있다.
  4. 모든 요소는 동일 비교의 대상이 될 수 있다.

 

고차함수

하나 이상의 함수 자체를 인수로 전달하거나 또 다른 함수를 리턴 하는 함수이다.

//일급객체
const increase = (a:number) => a + 1;
const multiple = (a:number) => a * 2;
const tramsform = numbers => numbers.map(increase).map(multiple);

console.log(transform([1,2,3,4]);

//고차함수
const addText = (text1:string) => (text2:string) => text1 + text2;
const beautiful = addText('beutiful');

console.log(beautiful('korea')); //koreabeautiful

 

객체지향 프로그래밍(Obejct-Oriented Programming)

캡슐화(은닉화), 상속, 추상화, 다형성과 여러 디자인 패턴을 이용하여 객체 중심의 프로그래밍이다.
객체지향 프로그래밍은 객체 안에 상태를 저장하고 이 상태를 이용하여 메소드를 추가하며 상태변화를 위해 다양한 기능을 사용한다. 이에 반해 함수형 프로그래밍은 상태를 제어하는 것이 아니라 상태를 없애는 것에 초점이 맞춰져있다. 

객체지향 프로그래밍은 상태를 저장하는 필드와 그 필드들을 이용해 기능을 제공하는 메소드를 만들고 클래스를 만들지만 함수형프로그래밍은 몇몇 자료구조(list, map, set) 등을 이용해 최적화된 동작을 만들어낸다.

함수형 프로그래밍과 객체지향 프로그래밍을 적절히 사용하여 안정적인 프로그램을 만드는 것이 중요하다.

 

'주말에 쓰는 개발일기 > javascript' 카테고리의 다른 글

[Javascript] 이벤트 버블링과 이벤트 캡쳐링  (0) 2022.04.28
오류 : Uncaught TypeError: window.showModalDialog is not a function  (0) 2021.12.01
크롬에서 opener의 함수호출 오류 (개발자도구를 켜야 작동할 경우)  (0) 2021.11.16
chrome 80 samesite 정책 (크롬 / 엣지 결제모듈 인증모듈 사용 후 세션 유실)  (1) 2021.01.08
ArrayList 함수 clear() UnsupportedOperationException 에러.  (0) 2021.01.08
    '주말에 쓰는 개발일기/javascript' 카테고리의 다른 글
    • [Javascript] 이벤트 버블링과 이벤트 캡쳐링
    • 오류 : Uncaught TypeError: window.showModalDialog is not a function
    • 크롬에서 opener의 함수호출 오류 (개발자도구를 켜야 작동할 경우)
    • chrome 80 samesite 정책 (크롬 / 엣지 결제모듈 인증모듈 사용 후 세션 유실)
    yeahzy
    yeahzy
    주말에 몰아 쓰려고 만들었는데 생각보다 주말은 빠르다..

    티스토리툴바