1-2. 프로그래밍 패러다임 - 선언형과 함수형 프로그래밍, 객체지향 프로그래밍, 절차형 프로그래밍

2025. 9. 19. 23:09·CS 스터디

0. 프로그래밍 패러다임 (Programming Paradigm)

프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 해주는 개발 방법론이다. 프로그래밍 언어는 하나 이상의 패러다임을 지원하며, 개발자는 해결하려는 문제에 따라 가장 적합한 패러다임을 선택하여 코드를 작성한다. 프로그래밍 패러다임은 크게 선언형, 명령형으로 나눈다. 선언형은 함수형이라는 하위집합을 갖고, 명령형은 객체지향, 절차지향이라는 하위집합을 가진다.

 

 

 

1. 선언형과 함수형 프로그래밍 (Declarative And Functional Programming)

1) 선언형 프로그래밍

'무엇(What)'을 할 것인가에 집중하며 '프로그램은 함수로 이루어진 것이다'라는 명제가 담겨 있는 패러다임이다. 개발자는 원하는 최종 결과가 무엇인지 기술하고, 그 결과를 어떻게 얻을지에 대한 절차는 컴퓨터에게 위임한다.

 

 

2) 함수형 프로그래밍

선언형 패러다임의 한 종류로, 순수 함수들을 블록처럼 쌓아 로직을 구현하고, 고차 함수를 통해 재사용성을 높인 프로그래밍 패러다임이다. 코틀린, 자바스크립트 등이 함수형 프로그램을 강력 지원한다.

 

- 순수 함수 : 동일한 입력에 대해 항상 동일한 출력을 반환한다. 함수 실행 중에 외부 상태를 변경하지 않고 의존하지 않는다.

fun sum(a: Int, b: Int): Int {
    return a + b
}

 

- 고차 함수 : 함수를 매개변수로 받아 로직을 생성하거나, 함수를 반환하는 함수이다. 코틀린의 람다식, filter, map, forEach와 같은 컬렉션 함수들은 모두 고차 함수의 예시이다.

fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

val sumResult = calculate(10, 5) { x, y -> x + y }

 

- 일급 객체 : 변수나 메서드에 할당될 수 있고, 함수의 매개변수로 전달되거나 함수가 반환할 수 있는 독립적인 존재를 의미한다. 고차 함수를 쓰기 위해서는 해당 언어가 일급 객체라는 특징을 가져야 한다.

// 함수를 변수에 할당
val sumFunction = { a: Int, b: Int -> a + b }

// 할당된 변수를 함수처럼 사용
println(sumFunction(1, 2))

 

 

 

 

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

객체지향 프로그래밍은 현실 세계의 사물이나 개념을 '객체'라는 단위로 만들어 프로그래밍 하는 방식이다. 객체들의 집합으로 프로그램의 상호 작용을 표현하며, 객체는 데이터와 메서드를 하나의 덩어리로 묶어서 관리한다. 설계에 많은 시간이 소요되며 다른 프로그래밍 패러다임에 비해 처리 속도가 상대적으로 느리다.

 

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

 

- 추상화 : 복잡한 내부 구현은 숨기고, 핵심 개념이나 기능만 노출한다.

- 캡슐화 : 객체의 속성과 메서드를 하나로 묶고, 외부에서 데이터에 직접 접근하는 것을 막는다.

- 상속성 : 상위 클래스의 속성과 메서드를 하위 클래스가 물려받아 재사용하거나 추가, 확장하는 것이다.

- 다형성 : 하나의 객체가 여러 가지 형태로 동작하는 것을 말한다. ex) 오버로딩, 오버라이딩

 

* 오버로딩 : 같은 이름을 가진 메서드를 메서드 타입, 매개변수의 유형, 개수 등의 차이로 여러 개 두는 것. 컴파일 중에 발생하는 정적 다형성.

* 오버라이딩 : 상위 클래스로부터 상속 받은 메서드를 하위 클래스가 재정의 하는 것. 런타임 중에 발생하는 동적 다형성.

 

 

2) 객체지향 프로그램 설계 원칙 (SOLID)

 

- 단일 책임 원칙 (S, Single Responsibility Principle) : 모든 클래스는 각각 하나의 책임만 가져야 한다.

- 개방-폐쇄 원칙 (O, Open Closed Principle) : 코드를 쉽게 확장할 수 있도록 하며, 수정이나 변경할 때는 닫혀 있어야 한다.

- 리스코프 치환 원칙 (L, Liskov Substitution Principle) : 자식 클래스는 언제든 부모 클래스로 대체 가능해야 한다.

- 인터페이스 분리 원칙 (I, Interface Segregation Principle) : 작고 구체적인 여러 개의 인터페이스를 만들어야 한다.

- 의존 역전 원칙 (D, Dependency Inversion Principle) : 상위 계층은 하위 계층이 아닌 추상화된 인터페이스에 의존해야 한다.

 

 

 

3. 절차형 프로그래밍 (Procedural Programming)

'어떻게(How)' 할 것인가에 집중하여 컴퓨터가 수행할 명령어의 순서를 정해진 절차에 따라 순차적으로 실행하는 프로그래밍 패러다임이다. 반복되는 코드를 함수나 프로시저로 묶어서 재사용하며, 여러 함수가 공유하는 전역 변수를 많이 사용한다. 대표적으로 C언어가 있다.

 

1) 절차형 프로그래밍의 장점

- 코드가 단순하고 직관적이며, 가독성이 좋아 초보자가 이해하기 쉽다.

- 컴파일러의 지원이 잘 되어 있어 실행 속도가 빠르고 성능이 좋다.

 

 

2) 절차형 프로그래밍의 단점

- 데이터 구조가 변경되면 모든 함수를 수정해야 하므로 코드 변경이 어렵고 모듈화하기 어렵다.

- 전역 변수를 많이 사용하기 때문에 예상치 못한 오류가 발생할 수 있고 이를 추적하기 어려워 디버깅이 어렵다.

- 유지 보수성이 떨어진다.

'CS 스터디' 카테고리의 다른 글

2-1. 네트워크의 기초 [02]- 네트워크 분류, 네트워크 성능 분석 명령어, 네트워크 프로토콜 표준화  (0) 2025.09.26
2-1. 네트워크의 기초 [01]- 처리량과 지연 시간, 네트워크 토폴로지와 병목 현상  (0) 2025.09.26
1-1. 디자인 패턴 [03] - MVC 패턴, MVP 패턴, MVVM 패턴  (1) 2025.09.15
1-1. 디자인 패턴 [02] - 프록시 패턴과 프록시 서버, 이터레이터 패턴, 노출모듈 패턴  (0) 2025.09.15
1-1. 디자인 패턴 [01] - 싱글톤 패턴, 팩토리 패턴, 전략 패턴, 옵저버 패턴  (1) 2025.09.08
'CS 스터디' 카테고리의 다른 글
  • 2-1. 네트워크의 기초 [02]- 네트워크 분류, 네트워크 성능 분석 명령어, 네트워크 프로토콜 표준화
  • 2-1. 네트워크의 기초 [01]- 처리량과 지연 시간, 네트워크 토폴로지와 병목 현상
  • 1-1. 디자인 패턴 [03] - MVC 패턴, MVP 패턴, MVVM 패턴
  • 1-1. 디자인 패턴 [02] - 프록시 패턴과 프록시 서버, 이터레이터 패턴, 노출모듈 패턴
leastzero
leastzero
  • leastzero
    빵이
    leastzero
  • 전체
    오늘
    어제
    • 모든 글 (31) N
      • CS 스터디 (25)
      • 활동 (2)
      • IT 기술 (4) N
  • hELLO· Designed By정상우.v4.10.4
leastzero
1-2. 프로그래밍 패러다임 - 선언형과 함수형 프로그래밍, 객체지향 프로그래밍, 절차형 프로그래밍
상단으로

티스토리툴바