Programming/basic

프로그래밍의 종류에 대해서 알아보자!! (명령형, 절차 지향, 함수형, 선언형, 논리형, 객체 지향 언어)

방황하는 데이터불도저 2023. 6. 21. 21:26

 

명령형 프로그래밍(imperative programming)

  - 컴퓨터가 처리해야하는 수행 명령어를 순서대로 써놓은 식이다. 

  - 프로그래밍의 상태와 그 상태를 변경시키는 구문의 관점에서 "연산을 설명하는" 프로그래밍 패러다임의 일종이다.

  - "어떻게", "어떤 방식"으로 할 것인지에 중점을 둔다.

  - 거의 대부분의 컴퓨터 하드웨어의 프로그램밍은 명령형으로 구현된다. 

  - 명령형 언어에서는 문(statement)가 가장 작은 독립 요소가 된다.

History

  - 1954년 존 배커스의 포트란, 1950~60년대 알골, 코볼, 베이직, 1970년대 니클라우스 버트의 파스칼, 데니스 리치의 C

  - 1980년대에는 객체지향 프로그래밍이 성장 + 명령형의 형태를 띄면서 객체를 지원하기 위한 특징을 추가함. (C++, Perl, Python)

 

절차지향 프로그래밍. 절차적 프로그래밍 (procedural programming)

  - 때때로 명령형 프로그래밍과 동의어로 쓰임

  - 프로시저(procedure)의 호출의 개념을 바탕으로 하고 있는 프로그래밍 패러다임

  - 수행해야하는 연속적인 계산 과정을 포함하고 있다.

  - 어느 위치에서나 프로그램을 불러올 수 있고, 자기 자신도 불러올 수 있다는 특징이 있다.

 

함수형 프로그래밍 언어 (functional programming)

  - 자료 처리를 수학적 함수(input->function->output의 형태)의 계산으로 취급한다.

  - 가변데이터를 멀리한다.

  - 명령형은 상태에 중점을 둔다면 함수형은 함수의 응용을 강조한다.

  - 따라서, 상태값 변화에 대한 부작용이 일어날 수 있는 명령형과는 달리 입력된 인수에만 의존하는 수학적 함수가 부작용을 제거한다. 이것이 함수형 프로그래밍 개발의 핵심 동기 중 하나이다.

  - 식(expression)이나 선언으로 수행되는 선언형 프로그래밍 패러다임을 따른다.

History

  - 1930년대 람다 대수(lambda calculus)로 함수에 대한 이론적 기반을 세웠다.


선언형 프로그래밍(declarative programming)

  - 명령형 프로그래밍와 반대되는 개념

  - 정의 1 : "어떻게"보다는 "무엇"인지에 더 초점을 맞추는 방식 (ex. HTML의 웹페이지에 제목, 글꼴, 본문, 그림 등을 선언하는 것) = 알고리즘은 명시하지않고, 목표를 명시하는 방식 = 해법보다는 문제를 설명하는 방식

  - 정의 2 : 논리형 프로그래밍, 함수형 프로그래밍, 제한형 프로그래밍이 선언형에 해당됨

  - 제한형+논리형 프로그래밍은 필요한 해의 특성은 설명하고, 해를 찾기위한 방법(알고리즘)은 설명하지 않는다. 하지만 엄밀하게는, 실제 대부분의 제한형+논리형 프로그래밍 언어들은 알고리즘을 설명할 수 있고, 상세한 부분을 구현할 수 있다. 마찬가지로, 명령형 프로그래밍의 라이브러리나 프레임워크 등으로 비선언형 부분을 캡슐화하는 것으로 선언형 프로그래밍을 작성할 수도 있다.

 

논리형 프로그래밍 언어 (logic pragramming)

  - 논리 문장을 이용하여 프로그램을 표현하고 계산을 수행

  - 대표적인 언어로 프롤로그(Prolog)가 있다.

  - 어떤 계산을 해야하는지가 아니라 서로의 관계에 대해서 묻기때문에 선언형이다.


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

  - 프로그램을 명령어의 목록으로 보는 것이 아니라 여러 개의 독립된 단위 "객체"들의 모임으로 보는 컨셉

  - 각각의 객체들은 메시지를 주고받고, 데이터를 처리할 수 있다.

  - 기본 구성 요소 : 클래스(Class), 객체(Object), 메서드(Method), 메시지(Message)

  • 클래스(Class) : (문제 해결을 위한) 같은 종류에 속하는 속성(attribute), 행위(behavior)를 정의 = 추상 자료형
  • 객체(Object) : 클래스의 인스턴스(instance) = 메모리상에 할당된 것. 클래스에서 정의한 속성을 가지고, 행위를 수행한다.
  • 메소드(Method), 메시지(Message) : 객체를 사용하는 방법. 객체의 서브루틴(subroutine)형태로 속성을 조작하고, 객체에 명령을 내린다.
  • 메소드를 호출하는 것을 생성자라고 한다.

  - 특징 : 자료 추상화, 상속, 다중 상속, 다형성 개념, 동적 바인딩

  - 언어 : Simula 67(최초의 객체지향언어), C++, C#, Java, Python, Perl, Swift 등

 

잠깐 상식,

  • 오버라이딩 : 같은 이름의 함수가 여러 클래스에서 각자 다른 기능을 하는 것
  • 오버로딩 : 같은 이름의 함수가 인자의 개수, 자료형에 따라서 다른 기능을 하는 것