카테고리 없음

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

asaei623 2022. 7. 26. 12:50

서론

  • 프로그래밍 방법은 다음과 같이 구분된다.
    1. 명령형 프로그래밍
      • 절차지향 프로그래밍
      • 객체지향 프로그래밍
    2. 선언형 프로그래밍
      • 함수형 프로그래밍

명령형 프로그래밍 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)에만 의존한다.
      • 함수의 실행은 프로그램의 실행에 영향을 미치지 않아야 한다.
    • 함수를 조합하는 것이란?
      • 둘 이상의 함수를 조합하는 과정을 말한다. 즉 다른 함수의 결과값을 다른 함수가 인자로 받는 것이다.
  • 예시를 보면 이해하기 편하다.

예시

  • 주어진 문제
    1. 단어의 크기가 2 이상인 경우를 필터링한다.
    2. 모든 단어를 대문자로 변환한다.
    3. 모든 단어를 앞글자만 잘라내어 변환한다
    4. 모든 단어를 스페이스로 구분한 하나의 문자열로 합친다.
  • 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

명령형 프로그래밍 VS 선언형 프로그래밍 (tistory.com)

절차지향 VS 객체지향 :: 불곰 (tistory.com)