카테고리 없음
절차지향 프로그래밍 vs 객체지향 프로그래밍 vs 함수형 프로그래밍
asaei623
2022. 7. 26. 12:50
서론
- 프로그래밍 방법은 다음과 같이 구분된다.
- 명령형 프로그래밍
- 절차지향 프로그래밍
- 객체지향 프로그래밍
- 선언형 프로그래밍
- 함수형 프로그래밍
- 명령형 프로그래밍
명령형 프로그래밍 vs 선언형 프로그래밍
- 한 문장으로 설명하면 이렇다.
- 명령형 프로그래밍 : 무엇(What)을 할 것인지 나타내기보다 어떻게(How) 할 건지를 설명하는 방식
- 선언형 프로그래밍 : 어떻게 할건지(How)를 나타내기보다 무엇(What)을 할 건지를 설명하는 방식
- 다음의 예시를 보면 보다 쉽게 이해된다.
- 코드로 확인하면 다음과 같다. 다음은 모든 요소에 2를 곱하는 함수를 구현한 것이다.
명령형 프로그래밍
//배열을 받아서 -> for문으로 반복해서 -> 각 요소에 2를 곱해서 -> 반환한다
function double (arr) {
let results = []
for (let i = 0; i < arr.length; i++){
results.push(arr[i] * 2)
}
return results
}
선언형 프로그래밍
//각 요소에, 2를 곱해라!
function double (arr) {
return arr.map((item) => item * 2)
}
절차지향 프로그래밍
정의
- 말 그대로 코드가 적힌 순서대로 처리되는 프로그래밍이다. 대표적인 절차지향 언어로는 C언어가 있다.
장점
- 컴퓨터의 작업 처리 방식과 유사하기 때문에 처리 속도가 빠르다.
단점
- 코드 전체가 유기적으로 연결되어 있어 유지보수나 재활용이 어렵다.
객체지향 프로그래밍
정의
- 컴퓨터 부품을 하나씩 사서 컴퓨터를 조립하는 것과 같은 방법이다.
- 캡슐화, 상속, 다형성의 특징을 갖고 있다.
- 다음의 사진을 보면 절차지향 프로그래밍과의 차이를 명확히 이해할 수 있다.
장점
- 코드가 객체로 모듈화되기 때문에 재활용이 쉽다.
단점
- 설계에 많은 시간 소요가 들어간다.
함수형 프로그래밍
정의
- 순수함수를 조합하여 프로그래밍 하는 방법
- 순수함수란?
- 동일한 입력에는 항상 같은 값을 반환해야 한다.
- 함수의 출력(return)은 오로지 그 함수에 입력된 값(input)에만 의존한다.
- 함수의 실행은 프로그램의 실행에 영향을 미치지 않아야 한다.
- 함수를 조합하는 것이란?
- 둘 이상의 함수를 조합하는 과정을 말한다. 즉 다른 함수의 결과값을 다른 함수가 인자로 받는 것이다.
- 순수함수란?
- 예시를 보면 이해하기 편하다.
예시
- 주어진 문제
- 단어의 크기가 2 이상인 경우를 필터링한다.
- 모든 단어를 대문자로 변환한다.
- 모든 단어를 앞글자만 잘라내어 변환한다
- 모든 단어를 스페이스로 구분한 하나의 문자열로 합친다.
- java로 구현한 코드
public class WordProcessTest {
private final List<String> words = Arrays.asList("TONY", "a", "hULK", "B", "america", "X", "nebula", "Korea");
@Test
void wordProcessTest() {
String result = words.stream()
.filter(w -> w.length() > 1)
.map(String::toUpperCase)
.map(w -> w.substring(0, 1))
.collect(Collectors.joining(" "));
assertThat(result).isEqualTo("T H A N K");
}
}
- 정리
- 사용된 순수함수
- filter, map, collect
- 이 순수함수들은 각자의 역할 하나만 수행하고, 전체 코드에는 영향을 주지 못한다.
- 함수의 조합
- filter의 결과값을 map이 인자로 받고, 등등등 의 식으로 함수들이 연결되고 있는 것을 알 수 있다.
- 사용된 순수함수
참고한 내용
https://mangkyu.tistory.com/111