본문 바로가기
CS

프로그래밍 패러다임(선언형, 함수형, 객체지향, 절차지향)

by Hyeon_E 2023. 11. 9.
  • 프로그래밍(Programming)
    • 하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술을 의미
  • 패러다임(Paradigm)
    • 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계, 또는 사물에 대한 이론적인 틀이나 체계를 의미하는 개념을 의미
  • 프로그래밍 + 패러다임(Programming  Paradigm)
    • 개발자가 프로그래밍을 위해 어떠한 '관점'을 가지고 개발을 할지에 대해서 결정을 하는데 도움을 주는 것을 의미

 

프로그래밍 패러다임의 종류

https://adjh54.tistory.co m/

 

프로그래밍 패러다임에는 크게 명령형 프로그래밍(Imperative Programming)과 선언형 프로그래밍(Declarative programming)으로 분류 됨

 

▶ 명령형 프로그래밍(Imperative Programming)

어떤 일을 어떻게(How) 수행할 것인지에 대해 관점을 두고 컴퓨터가 수행할 명령들을 순서대로 적어두는 프로그래밍 수행 기법을 의미함

명령형 프로그래밍을 사용하는 언어로는 C언어 등이 있음

명령형 프로그래밍에는 객체 지향 프로그래밍(OOP), 절차 지향 프로그래밍(PP)이 이에 포함

 

 객체 지향 프로그래밍(OOP: Object-Oriented Programming)

객체 지향 프로그래밍(OOP: Object-Oriented Programming)

어떠한 일을 해결 하기 위해 수많은 객체(Object)들을 기본 단위로 나누고 서로 간의 상호관계 작용으로 개발하는 것을 지향하는 프로그램이 기법을 의미함

또한 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들어 객체 들간의 상호작용을 통해 로직을 구성함

 

객체 지향 프로그래밍의 특징

  • 추상화
    • 객체에서 공통된 속성과 행위를 추출 하는 것
    • 공통의 속성과 행위를 찾아서 타입을 정의하는 과정
    • 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것
  • 캡슐화
    • 데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것 (변수와 함수를 하나로 묶는 것을 뜻함)
    • 낮은 결합도를 유지할 수 있도록 설계하는 것
  • 상속
    • 클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것
    • 새로운 클래스가 기존의 클래스의 데이터와 연산을 이용할 수 있게 하는 기능
  • 다형성
    • 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것
    • 어떠한 요소에 여러 개념을 넣어 놓는 것

장점

  • 상속, 캡슐화, 다형성의 특징으로 코드를 재사용하거나 확장하기 좋아서 유지보수가 쉬움
  • 관련이 많은 객체의 상호작용을 생각해 실세계에 대한 모델링을 좀 더 쉽게 해줌
  • 캡슐화 특징으로 실제로 구현되는 부분을 외부에 드러나지 않도록 은닉하여 보안성이 높음

 

단점

  • 캡슐화와 격리구조 때문에 절차지향 프로그래밍보다 실행 속도가 느림
  • 객체 단위의 구성으로 필요한 절차지향 프로그래밍보다 메모리 비용이 큼

 

객체 지향 프로그래밍을 사용하는 대표적인 언어로는 C++, Java, C#, JavaScript 등이 있음

 

절차 지향 프로그래밍(PP: Procedural Programming)

어떠한 일을 해결하기 위해서 아래로 순차적으로 진행이 되어서 프로그램이 유기절으로 연결되도록 구성하는 개발 방식을 지향하는 프로그래밍 기법을 의미함

 

절차 지향 프로그래밍의 특징

  • 하나의 큰 기능을 처리하기 위해 작은 단위의 기능들로 나누어 처리하는 Top-Down 접근 방식으로 설계
  • 데이터와 함수를 별개로 취급
  • 모든 함수는 데이터 공유가 가능함
  • 정해진 순서대로 입력해야 하므로 순서가 바뀌면 결과를 도출하기 어려움
  • 프로그램이 커질수록 구조가 복잡해져 유지보수가 어려움(소형 프로젝트에 적합)

 

절차 지향 프로그래밍을 사용하는 대표적 언어로는 C 등이 있음

 

선언형 프로그래밍(Declarative Programming)

어떻게(How) 수행할 명령들을 순서대로 적어두는것이 아닌 무엇(What)을 나타낼지에 대해서 관점을 두어서 프로그래밍을 수행하는 기법을 의미

명령형 프로그래밍에는 논리형 프로그래밍(Logic), 함수형 프로그래밍(Function)이 이에 포함이 됨
명령형 프로그래밍을 사용하는 언어로는 SQL 등이 있음

 

논리 프로그래밍(Logic Programming)

어떤 일에 대해서 해결을 찾기 위한 단계들에 주목하기 보다는 해결의 '속성들’에 주목하는 프로그래밍 기법을 지향하는 프로그래밍 기법을 의미 즉, 형식 논리를 기반하는 프로그래밍 패러다임.

논리 프로그래밍 언어로 작성된 모든 프로그램은 문제 영역에 대한 사실과 규칙을 표한하는 논리적 형식의 일련의 명령문

 

함수형 프로그래밍(FP: Functional Programming)

상태 및 데이터 변경에는 사용하지 않으며 작은 문제를 해결 하기 위한 함수(function) 단위로 개발을 하는 기법을 지향하는 프로그래밍 기법을 의미  

함수형 프로그래밍의 특징

  • 부수효과(Side Effect):  변화 또는 변화가 발생하는 작업을 의미
    • 변수의 값이 변경됨
    • 자료 구조를 제자리에서 수정함
    • 객체의 필드값을 설정함
    • 예외나 오류가 발생하며 실행이 중단됨
    • 콘솔 또는 파일 I/O가 발생함
  • 순수 함수(Pure Function): 부수 효과들을 제거한 함수
    • Memory or I/O의 관점에서 Side Effect가 없는 함수
    • 함수의 실행이 외부에 영향을 끼치지 않는 함수

순수함수는 함수 자체가 독립적이며 Side-Effect가 없기 때문에 Thread에 안전성을 보장받을 수 있음
Thread에 안정성을 보장받아 병렬 처리를 동기화 없이 진행할 수 있음

  • 1급 객체(First-Class Object)
    • 변수나 데이터 구조 안에 담을 수 있음
    • 파라미터로 전달 할 수 있 음
    • 반환값으로 사용할 수 있 음
    • 할당에 사용된 이름과 무관하게 고유한 구별이 가능함

함수형 프로그래밍에서 함수는 1급 객체로 취급받기 때문에 함수를 파라미터로 넘기는 등의 작업이 가능한 것

또한 함수형 프로그래밍에서 정의하는 순수 함수들과는 다르다는 것을 인지해야 함

 

  • 참조 투명성(Referential Transparency)
    • 동일한 인자에 대해 항상 동일한 결과를 반환해야 함
    • 참조 투명성을 통해 기존의 값은 변경되지 않고 유지됨

 

명령형 프로그래밍을 사용하는 언어로는 JavaScript(객체지향 및 함수형 프로그래밍 모두 이용됨) 등이 있음

 

 

 

 

'CS' 카테고리의 다른 글

TCP/IP  (0) 2023.11.11
연결리스트와 배열  (0) 2023.11.10
MVC, MVP, MVVM  (1) 2023.11.08
페이징, 세그멘테이션  (0) 2023.11.07
가상 메모리  (0) 2023.11.07

댓글