Computer Science/Programming Paradigm

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

JunOnJuly 2023. 10. 26. 22:12
728x90

절차적 프로그래밍


개념

절차적 프로그래밍절차지향 프로그래밍 혹은 절차지향적 프로그래밍이라고도 불립니다. 또 명령형 프로그래밍과 동의어로 쓰이기도 합니다. 그리고 일반적으로 프로시저 호출의 개념을 바탕으로 하는 프로그래밍 패러다임을 뜻합니다. 프로시저는 루틴, 서브루틴, 메서드, 함수 등으로 부르기도 합니다. 수행되어야 할 계산과정들을 포함하고 있고 아무 위치에서나 호출할 수 있으며 다른 프로시저, 자기 자신에서도 호출할 수 있다는 특징이 있습니다.

 

특징으로는 모듈성이 있는데, 코드의 재사용성이 늘어나고 프로그램의 흐름을 더 쉽게 파악할 수 있게 됩니다. 입력과 출력 그리고 그 사이의 규칙을 정하여 구현하는데 일반적으로 쓰는 함수가 그렇습니다. 또 스코프 개념을 통해 변수를 보호하고 프로시저 사이의 독립성을 보장해줍니다.

절차적 프로그래밍은 컴퓨터의 처리방식과 비슷하게 코드가 짜여져있어 실행속도가 빠르지만 순서에 민감해 유지보수가 어렵다는 단점이 있습니다.

대표적인 언어로는 C 언어가 있습니다.


함수형 프로그래밍


개념

함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 이들을 조합하여 프로그램을 만드는 프로그래밍 패러다임 입니다. 함수형 프로그래밍은 함수의 응용을 강조하는데, 다수의 함수형 프로그래밍 언어들은 람다 연산을 발전시킨 것으로 볼 수 있습니다.

 

함수형 프로그래밍의 특성은 세 가지가 있습니다.

순수 함수
익명 함수
고계 함수

가장 중요한 특성인 순수 함수부작용이 없는 함수를 뜻합니다. 함수의 실행이 외부에 영향을 미치지 않는다는 뜻입니다. 즉 함수의 과정과 결과는 함수가 끝나면 반환값이 있을 뿐 아무 것에도 영향을 미치지 않습니다.

 

익명함수는 흔히 말하는 람다 함수 입니다.

list = [[1, 2], [3, 1], [4, 7], [5, 8], [6, 7]]
list = sorted(list, key=lambda x: x[2])

함수의 이름이 없고 입력과 출력만으로 표현되는 함수입니다.

 

고계함수함수를 다루는 함수입니다. 간단한 예시로는 map 함수를 말할 수 있겠습니다.

a, b = map(int, input().split())

인자로 함수를 활용할 수 있는 함수를 뜻합니다.

 

코드를 실행에 관여하는 영역순수한 영역을 최대한 불리하여 코드의 가독성을 높이고, 유지 보수를 쉽게 한다는 장점이 있습니다.

대표적인 언어로는 클로저, 스칼라, 하스켈 등이 있습니다


객체지향 프로그래밍


개념

객체지향 프로그래밍은 프로그램을 명령어가 아닌 여러개의 독립된 객체들의 모임으로 파악하려는 프로그래밍 패러다임입니다. 각 객체는 서로 메시지를 주고받고 데이터를 처리합니다.

 

일반적으로 클래스와 객체, 메서드와 메시지로 구성된 프로그래밍을 뜻합니다. 특징으로는 다섯 가지 정도가 있습니다.

자료 추상화
상혹
다중 상속
다형성
동적 바인딩

자료 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현하는 방식입니다. 일반적으로 추상 자료형을 클래스, 추상 자료형의 인스턴스를 객체, 추상 자료형에서 정의된 연산을 메소드, 메소드의 호출을 생성자라고 합니다.

 

상속새로운 클래스기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능입니다. 상속을 받는 클래스를 부 클래스, 파생 클래스, 하위 클래스, 자식 클래스라고 말하며 기존의 클래스를 기반 클래스, 상위 클래스, 부모 클래스라고 합니다. 상속을 통해서 기존의 클래스를 프로그램의 요구에 맞춰 수정할 수 있고 종속관계를 형성해 객체를 조직화할 수 있습니다.

 

다중 상속하나의 클래스가 두 개 이상의 클래스를 상속받을 수 있는 기능입니다. 다만 클래스의 상속관계에 혼란을 줄 수 있고 프로그래밍 언어에 따라 사용 유무가 다릅니다.

 

다형성 개념은 한 요소에 여러 개념을 넣어놓는 것으로 오버라이딩이나 오버로딩을 의미합니다. 다형 개념을 통해서 프로그램 안의 객체간의 관계를 조직적으로 나타낼 수 있습니다.

 

동적 바인딩실행 시간 중이나 실행 과정에 변경될 수 있는 바인딩입니다. 동적 바인딩은 프로그램의 한 개체나 기호를 실행 과정에 여러 속성이나 연산에 바인딩합니다.

 

소프트웨어 공학의 관점으로 질을 향상시키기 위한 요소로 강한 응집력약한 결합력을 말하는데 문제 해결을 위한 데이터를 클래스에 모아놓아 데이터형을 사용해 응집력을 강화하고, 클래스간에 독립적인 역할을 부여해 결합력을 약하게 합니다.

대표적인 언어로는 자바나 파이썬이 있습니다.

728x90