본문 바로가기

Computer

프로그래밍 패러다임

프로그래밍 패러다임

프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론이다.

프로그래밍 패러다임은 크게 선언형, 명령형으로 나누며, 선언형은 함수형을 포함하고 있다.

명령형은 객체지향과 절차지향으로 나눈다.

프로그래밍 패러다임


선언형(declarative) 프로그래밍

당신이 무엇을 할 것인가에 관한 것이다.

프로그램이 실제로 어떻게 흘러가는 지와 상관없이 프로그램의 논리에 초점을 맞춘다.

상태와 제어 흐름이 존재하지 않는다.

 

장점

  • 읽기만 해도 의미가 해석이 되어 가독성이 높다.
  • 재사용성이 높다.
  • 작동 순서를 구체적으로 정하지 않아서 오류가 적다.
  • 프로그램 동작을 변경하지 않고도 관련 값을 대체할 수 있다.

명령형(imperative) 프로그래밍

당신이 어떤 일을 어떻게 할 것인가에 관한 것이다. 

프로그램의 상태를 변화시키는 구문들에 초점을 둔다.

상태와 제어흐름이 존재하며 상태를 필요에 따라 생성하고 정의하고 변경한다.

 

장점

  • 동작을 실행시키며 복잡한 문제를 유연하게 해결한다.

예시

첫 번째 예시

당신은 애인과 함께 근사한 레스토랑에 가서 식사를 하기로 결정했다. 즐거운 기분으로 레스토랑에 도착한 뒤 안내 데스크에 다가가 이렇게 말한다.

  • 명령형 방식 : "저기 창가 쪽 자리가 비었네요. 저 자리로 걸어가서 앉을게요"
  • 선언형 방식 : "두 명 앉을자리 부탁해요"

명령형은 내가 자리를 어떻게 앉을 것이지에 대해서, 선언형은 어떤 것을 원하는지를 말했다.

두 번째 예시

낯선 사람이 당신에게 OO호텔이 어디 있는지를 묻는다. 당신은 그곳이 어디 있는지 잘 안다. 이때 당신은 이렇게 말한다.

  • 명령형 방식 : "여기서 쭉 직진하시다가 롯데리아가 보이시면 우회전하세요. 직진하다가 두 번째 신호등에서 좌회전하세요. OO호텔이 보일 겁니다"
  • 선언형 방식 : "OO 호텔은 xxx동 xxx로 xx길 10에 있습니다.

명령형은 OO호텔에 어떻게 가는지에 대해서, 선언형은 어떤 곳을 가야 하는 지를 말했다.


위의 예시에서 선언형 방식을 보면 "자리는 어떻게 앉지?", "주소만 알고 어떻게 찾아가지?"와 같은 의문이 들 수 있다.

사실 이것은 다음과 같은 가정이 숨겨져 있다.

  • 1. 첫 번째 예시 : 직원이 고객들을 자리로 안내할 방법을 알고 있다.
  • 2. 두 번째 예시 :  낯선 사람이 내비게이션을 가지고 있다.

이러한 가정 덕분에 고객은 자리를 찾아가는 방법이 아닌 자리 그 자체를 요청하고, 낯선 사람에게 길을 찾아가는 방법이 아닌 주소만을 알려줘도 됐던 것이다.

 

이처럼 많은 선언형 접근 방식은 명령형으로 구현된 것들이 추상화되어 있어야 한다.


함수형(Functional) 프로그래밍

'순수 함수'들을 블록처럼 쌓아 로직을 구현하고 '고차 함수'를 통해 재사용성을 높인 프로그래밍 패러다임이다.

 

순수 함수 : 출력이 입력에만 의존하는 함수

고차 함수 : 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는 함수

일급 객체 : 고차 함수를 쓰기 위해서는 해당 언어가 일급 객체라는 아래와 같은 특징을 가져야 한다.

  • 변수나 메서드에 함수를 할당할 수 있다.
  • 함수 안에 함수를 매개변수로 담을 수 있다.
  • 함수가 함수를 반환할 수 있다.

장점

  • 개발 생산성을 높일 수 있다.
  • 함수 단위의 코드 재사용이 쉽다.
  • 가독성이 높은 코드를 작성하기 쉽다.
  • 더 나은 모듈화와 짧은 코드를 제공한다.
  • 테스트와 디버깅이 용이하다.
  • 프로그램의 동작을 예측하기 쉽다.

객체지향(Object Oriented) 프로그래밍

객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식이다.

특징

추상화 : 복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추려내는 것을 의미한다.

캡슐화 : 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것이다.

상속성 : 상위 클래스의 특성을 하위 클래스가 이어받아 재사용하거나, 추가, 확장하는 것이다.

다형성 : 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것을 의미한다. 오버로딩, 오버라이딩이 있다.

  • 오버로딩 : 같은 이름을 가진 메서드를 여러 개 두는 것이다.
  • 오버라이딩 : 상위 클래스로부터 상속받은 메서드를 하위 클래스가 재정의하는 것을 의미한다.

 

장점

  • 코드의 재사용성이 높다.
  • 신뢰성 잇는 소프트웨어를 작성할 수 있다.
  • 실세계에 대한 모델링을 조금 더 쉽게 해 준다.
  • 디버깅이 쉽다.
  • 보안성이 높다.

단점

  • 설계에 많은 시간이 소요된다.
  • 처리 속도가 다른 패러다임에 비해 상대적으로 느리다.

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

물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다. 대표적인 언어로 C 언어가 있다.

 

장점

  • 코드의 가독성이 좋다
  • 실행 속도가 빠르다.

단점

  • 모듈화가 어렵다.
  • 유지 보수성이 떨어진다.

'Computer' 카테고리의 다른 글

파이썬으로 데이터 API를 MySQL에 저장하기  (0) 2023.08.31
네트워크 기초  (0) 2023.07.11
디자인 패턴 with Python code  (2) 2023.06.08
Computer Network  (0) 2023.04.04
Operating System  (0) 2023.04.03