CS/개발상식

[개발상식] 프로그래밍 패러다임

bu119 2023. 6. 25. 22:00
728x90
반응형

프로그래밍 패러다임(programming paradigm)이란?

특정 관점과 접근 방식에 따른 개발자의 코딩방식

 

프로그래밍(Programming) 이란?

하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술을 의미한다.

 

패러다임(Paradigm) 이란?

어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계, 또는 사물에 대한 이론적인 틀이나 체계를 의미하는 개념을 의미한다.

 

프로그래밍 + 패러다임(Programming Paradigm)이란?

개발자가 프로그래밍을 위해 어떠한 '관점'을 가지고 개발을 할지에 대해서 결정을 하는데 도움을 주는 것을 의미한다.

 

프로그래밍 패러다임의 변화

'프로그래밍 패러다임'이라 하면 아래 3가지를 의미한다.

  • 절차적 프로그래밍 (PP, Procedure Programming)
  • 객체지향 프로그래밍 (OOP, Object Oriented Programming)
  • 함수형 프로그래밍 (FP, Functional Programming)

 

프로그래밍 패러다임의 등장 순서

  • 함수 지향 프로그래밍(FP) → 객체 지향 프로그래밍(OOP) → 절차 지향 프로그래밍(PP)

 

프로그래밍 패러다임의 성장 순서

  • 절차 지향 프로그래밍(PP) → 객체 지향 프로그래밍(OOP) → 함수 지향 프로그래밍(FP)

 

Google에 프로그래밍 패러다임에 대해 검색을 하면 자주 등장하는 진화의 관점을 빗대어서 표현한 이미지

 

프로그래밍 패러다임은 단순히 진화론적 관점에서 우열을 판단할 수 없다.

  • 프로그래밍 패러다임은 '접근 방식'과 '사용 환경'에 따라 유동적으로 활용된다.
  • 각각의 프로그래밍 패러다임은 장단점이 존재하며, 이에 상호 보완적 특성을 가진다.

 

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

3가지 주요 프로그래밍 패러다임은 [방법/목적]에 따라 재 분류된다.

  • 명령형 프로그래밍 (Imperative Programming)
    • 절차지향 프로그래밍
    • 객체지향 프로그래밍

 

  • 선언형 프로그래밍 (Declearative Programming)
    • 함수형 프로그래밍
    • 반응형 프로그래밍

 

방법 및 목적에 따른 프로그래밍 패러다임

 

명령형 프로그래밍 vs 선언형 프로그래밍

어떻게(How) 할것인가, 무엇(What)을 할 것인가?

 

 

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

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

  • 객체 지향 프로그래밍 (OOP)
  • 절차 지향 프로그래밍 (PP)

 

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

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

  • 객체 지향 프로그래밍을 사용하는 언어:  C++, JAVA, Python

 

객체지향 프로그래밍(OOP)의 장점

  • 캡슐화로 코드의 재사용성이 높다.
  • 코드의 변경이 용이하다.
  • 직관적인 코드분석이 가능하다.
  • 개발속도 향상된다.
  • 상속을 통한 장점 극대화 된다.

 

객체지향 프로그래밍(OOP)의 단

  • 처리속도가 상대적으로 느리다.
  • 객체가 많으면 용량이 커질 수 있다.
  • 설계시 상대적으로 많은 시간이 필요하다.

 

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

1. 추상화

  • 객체들의 공통적인 속성과 기능을 뽑아내는 작업, 즉 우리가 구현하는 객체들이 가진 공통적인 데이터와 기능을 묶어 이름을 붙이는 것을 말한다.

 

2. 캡슐화

  • 관련된 데이터와 함수들을 클래스라는 하나의 ‘캡슐’속에 그룹화시켜주는 것으로 외부에는 실제 구현 내용을 감춘다.
    • 기능과 특성별로 한 곳에 모으고 분류하기 때문에 언제든지 쉽게 불러올 수 있는 재사용성
    • 외부에서는 ‘추상적인 것’으로 보이기에 정보 은닉화

 

3. 상속

  • 상위클래스의 데이터와 함수를 하위클래스가 물려받는 것을 말한다.
  • 하나의 클래스가 가지고 있는 데이터와 함수를 그대로 다른 클래스가 물려주고자 할 때 이를 이용한다.
  • 상속 받은 것을 자식클래스에서 다시 재정의(오버라이딩)해서 사용하는 다형성과도 이어져있다.

 

4. 다형성

  • 하나의 클래스 내부에 같은 이름의 기능을 여러 개 정의하거나, 상위 클래스의 기능을 하위 클래스에서 다시 정의할 수 있다.
  • 대표적인 예로 오버라이딩과 오버로딩이 있다.
    • 오버라이딩 : 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는 것
    • 오버로딩 : 같은 이름의 함수를 여러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것

 

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

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

  • 절차 지향 프로그래밍을 사용하는 언어: C

 

 

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

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

  • 논리형 프로그래밍(Logic)
  • 함수형 프로그래밍(Function)

 

1) 논리 프로그래밍(Logic Programming)

어떤 일에 대해서 해결을 찾기 위한 단계들에 주목하기 보다는 해결의 '속성들’에 주목하는 프로그래밍 기법을 지향하는 프로그래밍 기법을 의미한다.

 

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

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

  • Java 1.8 버전부터 함수형 프로그래밍을 한다.
  • 함수형 프로그래밍을 위해 람다식 (Lambda), Stream API, Functional Interface의 주요한 기능들을 사용한다.
  • 가독성과 함수를 이용한 재 사용성이 장점이 있다.
  • 함수형 프로그래밍을 사용하는 언어: SQL, HTML,Python

 

 

함수형 프로그래밍은 다음과 같은 전제로 동작한다.

  • 모든 데이터는 불변상태(Immutab)이어야 한다.
    • 함수형 프로그래밍에서는 데이터가 변할 수 없는데, 이를 불변성 데이터라고 한다.
    • 데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터를 복사본을 만들어 그 일부를 변경하고, 변경한 복사본을 사용해 작업을 진행한다.
  • 함수는 순수 함수로 만든다.
    • 순수 함수란 동일한 입력에 항상 같은 값을 반환해야하며 프로그램의 실행에 영향을 미치지 않는 함수(다른 말로 side effect가 없어야 한다.)를 뜻한다.
  • 루프보다는 재귀를 사용한다.
    • for나 while같은 루프보다는 함수안에 함수를 호출하는 재귀호출을 사용하는 방법을 사용한다.
  • 코드를 간결하게 하고 가독성을 높여 로직에 집중시켜야한다.
    • 람다식이나 Collection과 같은 API를 통해 가독성을 높힌다.
  • 핵심은 순수 함수를 조합해 간결하게 만들어 SideEffect를 없애는 것이다.

참고 자료

https://adjh54.tistory.com/97

https://iosdevlime.tistory.com/entry/CSBasic-%EC%A2%80-%EB%8D%94-%EB%82%98%EC%9D%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84-%EC%9C%84%ED%95%B4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84

https://hoi5088.medium.com/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84-%EC%A0%88%EC%B0%A8-%EC%A7%80%ED%96%A5-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-a5160a1e39e4

728x90
반응형