본문 바로가기
카테고리 없음

[CS]절차지향/객체지향/함수형 프로그래밍

by hbIncoding 2023. 5. 17.

1. 절차지향(Procedural Programming)

  • 특징
    • 절차 중심 : 프로그램은 일련의 절차 또는 함수로 구성되며, 절차가 중심이 되어 데이터를 처리
    • 데이터와 처리의 분리 : 데이터와 데이터를 처리하는 절차를 분리하여 생각하고 설계
    • 코드의 재사용 : 함수나 서브루틴을 사용하여 코드의 재 사용성을 높임
    • 전역 데이터 : 전역 변수를 통해 데이터를 공유하고, 이로 인해 데이터의 접근과 변경이 자유롭다.
    • 순차적 실행 : 프로그램은 단계별로 순차적으로 실행되며, 제어 흐름은 일련의 절차에 따라 진행
  • 장점
    • 코드의 가독성이 좋음
    • 컴퓨터의 처리구조와 비슷해 실행 속도가 빠름
  • 단점
    • 각각의 코드가 순서에 민감하게 연결되어 있어서, 유지보수 및 분석이 어려움
  • 언어 : C, Pascal, FORTRAN, COBOL 등이 있다.

2. 객체지향(Object Oriented Programming)

  • 취모든 데이터를 객체(Object)로 취급하고, 객체가 처리 요청을 받았을 때, 객체 내부에 있는 기능을 사용해 처리하는 방법
  • 특징
    •  
    • 추상화 : 공통적인 속성이나 기능을 묶어서 이름을 붙이는 것
    • 캡슐화 : 데이터를 은닉하고 데이터 기능을 노출시키지 않음
    • 상속성 : 상위 부모 객체의 속성과 특징을 하위 객체가 물려 받는 것
    • 다형성 : 같은 함수가 있어도 매개변수에 따라 각자 다른 일을 하는 것
  • 장점
    • 코드의 재사용이 가능(확장, 유지보수에 용이)
    • 분석과 설계의 전환이 쉬움
  • 단점
    • 처리 속도가 상대적으로 느림
    • 설꼐에 많은 시간이 소요 됨
  • 언어 : Java, C++, Python, C#, Ruby, Swift 등등

3. 함수형 프로그래밍

  • "순수 함수"를 사용해, 상태를 제어하기 보단, 빨리 처리하는데 초점을 둔 방법
  • 실행 순서를 지정할 필요가 없기 때문에 비절차형 언어라고도 한다.
    • 순수함수란? : 동일한 입력값을 넣었을 때 항상 동일한 리턴값을 반환하며 외부에 영향을 받지 않는 함수
      • 함수의 실행이 프로그램에 영향을 주지 않음
      • 비상태 불변성 유지 -> 여러가지 동시다발적인 멀티쓰레딩 환경에서 안정적으로 동작함
  • 장점
    • 함수의 동작부가 간결해지기 때문에, 객체지향 프로그래밍에 비해 코드 이해도와 가독성이 좋아짐
    • 테스트가 쉬움
  • 단점
    • 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없음
  • 언어 : Haskell, OCaml
    • C++ , Python, Java와 같은 언어의 최신버전에 함수형 프로그래밍의 특징들이 더해짐

 

4. 절차형과 객체지향의 차이

  • 절차형 프로그래밍 위에서 객체지향 프로그래밍이 탄생
  • 절차형 프로그래밍이 갖고 있는 부족함을 객체지향 프로그래밍이 보완해주는 역할
  • 절차형 프로그래밍은 함수가 있고, 객체지향 프로그래밍도 함수가 있지만 객체라는 개념이 등장

5. 함수형과 객체지향의 차이

1)함수형 프로그래밍에서는 함수 자체가 일급 객체가 되지만, 객체지향에서는 클래스가 일급 객체가 됨

  • 일급객체란 : 다른 요소들과 아무런 차별이 없는 객체. 즉, 함수의 인자로도 넘겨질 수 있고, 변수에 대입도 가능한 객체를 일급 객체.
  • 일급객체의 명확한 정의
    • 모든 일급 객체는 실질적인 매개변수가 될 수 있다.
    • 모든 일급 객체는 함수의 반환값이 될 수 있다.
    • 모든 일급 객체는 할당의 대상이 될 수 있다.
    • 모든 일급 객체는 비교 연산(==,equal)을 적용 할 수 있다.

2)객체지향 프로그래밍에서는 프로그램을 상호작용(interaction)하는 객체들의 집합으로 불 ㅅ ㅜ있지만, 함수형 프로그래밍에서는 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있다.

  • 객체지향 프로그래밍
    • 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어짐
    • 따라서, 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가짐
    • 특히, 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 다름
  • 함수형 프로그래밍
    • 값의 연산 및 결과 도출 중심으로 코드 작성이 이루어짐
    • 함수는 인자로 받은 갑슬 별도로 저장하지 않고, 간결한 과정으로 처리하고 매핑하는데에 목적을 둠
  • 어느 하나가 우위에 있다고 말하기 보다는 필요에 따라 합쳐서 사용하거나 골라서 잘 사용해야함.

6. 참조

1)절차지향,객제지향,함수형 : https://velog.io/@majaeh43/%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%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D