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

김형준 Kim Hyeong Jun·2023년 3월 5일
0

프로그래밍 패러다임

1. 명령형 프로그래밍

명령형 프로그래밍이란 무엇(What)을 할 것인지 나타내기보다 어떻게(How)할 것인지 설명하는 방식입니다.
자동차 공장을 예시로 설명하자면 각 공정을 개발자가 심사숙고해서 체계적인 체제를 설계 후 작업하여 자동차를 만드는 사고이며, 자동차를 어떻게 만드는지에 초점이 맞춰져 있습니다.

  • 절차지향 프로그래밍
  • 객체지향 프로그래밍

2. 선언형 프로그래밍

선언형 프로그래밍이란 어떻게(How)할 것인지 나타내기보다 무엇(What)을 할 것인지 설명하는 방식입니다.
자동차 공장을 예시로 설명하자면 한마디로 '자동차를 생산할 것이다.'로 정의할 수 있습니다. 다시 말해서 무엇을 할 것인지만 설명하고 있으며 전체적인 체계는 신경쓰지 않습니다. 즉 선언형 프로그래밍에서 각 공정은 체계적으로 설계되어 있기보다는 자동차를 만들기 위한 행위적인 개념으로만 볼 수 있습니다.

  • 함수형 프로그래밍

절차지향 프로그래밍

절차지향 프로그래밍이란 일이 진행되는 순서대로 프로그래밍하는 방법으로 프로그램 전체가 유기적으로 연결되어 있습니다. 사물에 빗대어 예시를 들어봅시다. 조립식 테이블이 있고, 저희는 이 조립식 테이블을 설명서의 순서에 따라 조립하고 완성된 형태를 사용해야합니다. 조립식 테이블은 분리되어 있으면 제 역할을 못하며(유기적) 조립하는 순서(순차적)가 틀려서도 안됩니다. 이처럼 절차지향 프로그래밍 또한 코드가 분리되어 있으면 동작하지 않으며, 순서를 지키지 않으면 다른 결과가 나타날 수 있습니다.

장점

  • 컴퓨터와 처리 구조가 비슷하여 실행속도가 빠릅니다.

단점

  • 각각의 코드가 유기적으로 연결되어 있어서 유지보수가 어렵습니다.
  • 문제 해결을 위해 일부가 아닌 전체를 수리해야 하기 때문에 유지보수, 디버깅이 어렵습니다.
  • 엄격하게 순서가 정해져 있기에 비효율적입니다.
  • 순서가 바뀐다면 결과 또한 달라집니다.

객체지향 프로그래밍

대형 프로젝트에 적합하지 않고, 유지보수가 어려운 절차지향 프로그래밍의 단점을 극복하기 위해서 등장한 프로그래밍 패러다임입니다. 실세계의 실체(사물 혹은 개념)를 인식하는 철학적 사고를 프로그래밍에 접목하려는 시도에서 시작되었습니다. 사물에 해당하는 노트북, 키보드, 마우스부터 시작해서, 사물이 아닌 개념에 해당하는 볼륨, 밝기 등이 모두 객체에 포함될 수 있습니다.

객체지향은 모든 것을 객체로 취급하고 객체가 처리 요청을 받았을 때, 객체 내부의 기능을 사용해 처리하는 방법입니다. 예시로 불륨이라는 객체가 있고, 내부에는 소리 증가, 감소와 같은 기능(메서드)을 담을 수 있습니다. 사용자가 볼륨을 조절하면 객체 내부의 기능인 소리 증가, 감소를 이용할 수 있는 것입니다.

객체지향은 추상화, 캡슐화, 상속성, 다형성이라는 특징을 가지고 있습니다.

장점

  • 객체지향 특징으로는 코드 재사용이 가능하다는 것입니다.
  • 절차지향과 달리 독립된 객체로 이루어져 있기 때문에 유지보수가 용이합니다.
  • 캡슐화로 정보를 은닉할 수 있기에 보안성이 높습니다.

단점

  • 캡슐화 격리 구조 때문에 절차형 프로그래밍에 비해서 속도가 느립니다.
  • 모든 객체의 역할과 기능을 이해해야 하므로 프로그래밍에 많은 시간이 소요됩니다.

함수형 프로그래밍

객체지향 프로그래밍에서는 객체를 생성하기 위해 잘 짜인 일련의 프로세스가 존재합니다. 하지만 함수형 프로그래밍은 프로세스보다 순수 함수에 집중합니다.

왜일까요?

여러 함수들이 사용하는 외부 변수가 바뀌어 예기치 못한 오류가 생기면 프로세스에 차질이 생길 수 밖에 없기 때문입니다. 함수형 프로그래밍은 순수 함수 덕분에 부작용 문제로부터 자유롭고 문제의 소지가 있는 코딩을 피할 수 있습니다.

특징

  • 부작용(=부수작용)
    : 컴퓨터 과학에서 함수가 결과값 이외에 다른 상태를 변경시킬 때 부작용이 있다고 말합니다.

  • 참조 투명성
    : 참조에 투명한 함수란 같은 인자를 주면 항상 같은 결과값을 돌려주는 함수입니다.

  • 순수 함수
    : 순수 함수란 부작용이 제거된 함수를 뜻합니다.

  • 1급 객체
    : 1급 객체란 함수를 변수로 사용할 수 있다는 의미로 해석할 수 있습니다. 주의할점은 함수와 변수를 동일한 개념으로 생각해서는 안됩니다.


Reference

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

profile
I want be a developer🙂

0개의 댓글