[자바 – Java]프로그래밍 방법론 – 함수형 프로그래밍, 객체지향 프로그래밍, 1급 시민, 구조적 프로그래밍, 절차식 프로그래밍, 순수함수

1. 프로그래밍 방법론

 

1) 절차식 프로그래밍 : 순차적인 명령을 수행하고 간단한 분기만 가능하다.

2) 구조적 프로그래밍 : 특정 변수를 묶어 구조화하고 이를 통해 프로그래밍의 효율을 높인다.

3) 객체 지향 프로그래밍 : 객체를 기반으로 프로그래밍되며 클래스, 속성, 기능들의 현실 세계 모델을 반영한다.

4) 함수형 프로그래밍 : 객체의 형태를 벗어나 함수형을 확장해 함수를 변수처럼 사용 가능하다.

    


2. 명령형 프로그래밍 vs 선언형 프로그래밍

 

1)  명령형 프로그래밍(Imperative Programming)

– OOP 객체지향 프로그래밍

– 어떻게 하여야 하는가? (How) 예) 이메일을 담을 리스트 선언 -> 루프 -> 검증되지 않았는지 체크 -> 않았다면 변수에 이메일 추출 -> 이메일 리스트에 넣기

2) 선언형 프로그래밍(Declarative Programming)

– Functional Programming

– 무엇을 하여야 하는가? (What) 예) 유저 리스트에서 검증되지 않은 유저만 골라내서 이메일을 추출해서 리스트로 받기

 


3. First-Class Citizen(1급 시민) 조건

 

1) 함수/메서드의 매개변수(parameter)로서 전달할 수 있는가

2) 함수/메서드의 반환 값(return)이 될 수 있는가

3) 변수에 담을 수 있는가




4. OOP (Object Oriented Programming) : 객체 지향 프로그래밍 / f(x) (Functional Programming) : 함수형 프로그래밍




5. 함수형 프로그래밍과 람다식(Lambda expression)

1) 자바는 객체지향 프로그래밍이다.

– 기능을 수행하기 위해서는 객체를 만들고 그 객체 내부에 멤버 변수를 선언하고 기능을 수행하는 메서드를 구현한다.

2) 자바 8부터 함수형 프로그래밍 방식을 지원하고 이를 람다식이라고 한다.

– 함수의 구현과 호출만으로 프로그래밍이 수행되는 방식이다.

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

– 함수를 기반으로 하는 프로그래밍이다. 입력받는 자료 이외에 외부 자료를 사용하지 않는다.

– 여러 자료가 동시에 수행되는 병렬 처리가 가능하다.

– 동일한 자료에 대해 동일한 결과를 보장한다.

– 순수 함수(pure function)를 구현하고 호출함으로써 외부 자료에 부수적인 영향(side effect)을 주지 않도록 구현하는 방식이다.

 

* 순수 함수란?

– 매개 변수만을 사용하여 만드는 함수이다.

– 함수 내부에서 함수 외부에 있는 변수를 사용하지 않는다.

– 함수가 수행되더라도 외부에 영향을 주지 않는다.