우노
[Software Engineering] 절차적 vs 객체지향 vs 함수형 본문
들어가기 앞서,
- 해당 포스트에서는 현존하는 코딩 패러다임에 대해 간단하게 다뤄보겠습니다.
절차적 프로그래밍(Procedural Programming)
- 절차적 프로그래밍이란, 프로그램을 재사용 가능한 함수 단위로 나누는 프로그래밍 구조를 의미합니다.
- 여기서 말하는 '절차'는, 순수한의미의 '절차'가 아닌, Procedual, 즉 함수를 의미합니다.
- 절차적 프로그래밍의 장단점은 아래와 같습니다.
- 장점
- 코드를 단위화할 수 있습니다.
- 단점
- 변수나 상수 등의 값들을 관리하는 '자료형'과
- 해당 자료형을 사용하는 '함수'가 분리되어 사용됩니다.
- 장점
- 따라서, 사람들은 위 단점을 해결하기 위해, 자료형과 함수를 묶어서 사용하는 방법을 모색하게 되었습니다.
객체 지향 프로그래밍(Object-Oriented Programming)
- 객체 지향 프로그래밍은, 모든 데이터를 객체(Object)로 취급하며,
- 모든 객체가 내부의 자료형(Field)와 함수(Method)로 구성된 프로그래밍 구조를 의미합니다.
- 만약, 책이라는 자료를 객체 모델로 만든다면
- 그 책의 쪽수나,이름과 같은 '자료형' 뿐만 아니라
- 책을 읽기, 책을 만들기 등의 '함수'들 역시 '책'이라는 객체로 묶어 놓는 것입니다.
- 객체 지향 프로그래밍의 장단점은 아래와 같습니다.
- 장점
- 객체와 객체간의 독립성이 확립되므로, 유지보수에 도움이 됩니다.
- 단점
- 설계에 많은 시간이 소요됩니다.
- 처리 속도가 상대적으로 느립니다.
- 장점
함수형 프로그래밍(Functional Programming)
절차적, 객체지향 기반으로 개발했던 개발자들은, 개발하는 소프트웨어의 크기가 커짐에 따라,
복잡하게 엉켜있는 스파게티 코드를 유지보수하는 것이 매우 힘들다는 것을 깨닫게 되었습니다.
따라서, 함수형 프로그래밍은, 주어진 문제를 작은 문제로 나눈 뒤, 작은 문제를 해결할 수 있는 '순수 함수'를 사용하는 방식이며,
가독성을 높이고 유지보수를 용이하게하는 프로그래밍 구조를 의미합니다.
순수 함수란, 함수의 입력이 주어지면, 항상 일관된 출력이 나오는 함수이며,
프로그램의 실행에 영향을 미치지 않는 함수를 의미합니다. (Side Effect 가 없다.)
예제 코드
// 순수 함수 function func(a, b) { return a + b; // 인자로 들어온 값만 참조해, 리턴값을 생성 } // 비순수 함수 int c = ??; function func(a, b) { return a + b + c; // 외부 요인(c)에 따라 리턴값이 변경됨 }
함수형 프로그래밍의 장단점은 아래와 같습니다.
- 장점
- 코드에서 프로그램의 실행에 영향을 미치는 영역과 순수한 영역을 최대한 분리함으로써,
- 코드 가독성이 높아지고, 유지보수가 좋아지며, 더 안전한 프로그램을 만들 수 있습니다.
- 단점
- 상태를 조작할 수 없습니다.
- 장점
객체지향 프로그래밍과 함수형 프로그래밍의 차이
- 객체지향 프로그래밍에서는 '클래스' 가 '일급 객체' 가 되지만,
- 함수형 프로그래밍에서는 '함수' 가 '일급 객체' 가 됩니다.
- 일급 객체란?
- 함수의 인자로 넘겨질 수도 있고, 변수에 대입도 가능한 객체를 '일급 객체'라고 합니다.
- 명확한 정의는 아래와 같습니다.
- 모든 일급 객체는, 함수의 매개변수 또는 인자가 될 수 있다.
- 모든 일급 객체는, 함수의 반환값이 될 수 있다.
- 모든 일급 객체는, 변수나 데이터에 할당할 수 있다.
- 모든 일급 객체는, 비교 연산(==, equal)을 적용할 수 있다.
- 일급 객체란?
- 객체지향 프로그래밍에서는, 프로그램을 상호작용하는 객체들의 집합으로 볼 수 있습니다.
- 클래스 디자인과 객체들간의 관계를 중심으로 코드 작성이 이루어집니다.
- 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가지고 있으며
- 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라집니다.
- 함수형 프로그래밍에서는, 프로그램을 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있습니다.
- 값의 연산 및 결과 도출 중심으로 코드작성이 이루어집니다.
- 함수는 인자로 받은 값을 별도로 저장하지 않고,
- 간결한 과정으로 처리하고 매핑하는데에 주 목적을 둡니다.
참고
- https://madplay.github.io/post/functional-programming-object-oriented-programming
- https://susu91.tistory.com/105
- https://suminpixel.tistory.com/m/20
- https://kamang-it.tistory.com/entry/프로그래밍-패러다임순차적비구조적절차적구조적객체지향적-프로그래밍
- https://mangkyu.tistory.com/111
- https://medium.com/humanscape-tech/함수형-프로그래밍에-관해-7f6172599fc
'Etc > CS Term' 카테고리의 다른 글
[Software Engineering] 런타임이란? (0) | 2021.09.30 |
---|---|
[프로그래밍용어] Fine-Grained 와 Coarse-Grained (0) | 2021.07.27 |
[프로그래밍용어] 매개변수와 인자의 차이점 (0) | 2021.03.11 |
[프로그래밍용어] 직렬화(serialized), 역직렬화(deserialized) (0) | 2020.07.13 |
[프로그래밍용어] 고가용성이란? (0) | 2020.07.13 |
Comments