절차지향 / 객체지향 / 함수형 프로그래밍이란?, 시간복잡도와 공간복잡도란?

송현진·2023년 7월 28일
0

CS공부

목록 보기
4/5
post-thumbnail

절차지향 프로그래밍(Procedure Programming)

Top-Down 방식으로 접근하며 순차적인 처리가 중요시 되어 프로그램 전체적으로 연결되도록 만드는 프로그래밍 기법

장점

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

단점

  • 유지보수 및 디버깅이 어려움

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

Bottom-Up 방식으로 접근하며, 데이터와 절차를 하나의 덩어리(Object)로 묶어서 처리하는 프로그래밍 기법

장점

  • 객체를 이용하여 코드 재사용이 용이하고, 상속을 통한 확장이 가능
  • 클래스단위로 모듈화, 작게 나눌 수 있기 때문에 유지보수에 좋고, 분업에도 좋다

단점

  • 객체가 많아질수록 용량이 커질 수 있다
  • 객체를 올바르게 설계하는데 많은 노력과 시간이 필요하다

특징

  • 캡슐화(Encapsulation)
    객체의 속성(Field)과 행위(Method)를 하나로 묶고, 외부로 부터 내부를 감싸 숨기는 것

  • 추상화(Abstraction)
    객체의 공통적인 속성과 기능을 추출하여 정의하는 것

  • 상속(Inheritance)
    상위 클래스의 모든 것을 하위 클래스가 새롭게 클래스와 행위를 정의 할 수 있는 것

  • 다형성(Polymorphism)
    하나의 메서드나 클래스가 있다고 가정할 때 이 메서드나 클래스를 다양한 방법으로 동작하게 하는 것

함수형 프로그래밍

주어진 문제를 작은 문제로 나눈 후, 이 작은 문제를 순수 함수로 만들어 순수함수를 조합하여 프로그램을 만드는 선언형 프로그래밍 기법
어떻게 하는지보다, 무엇을 할건지 중심으로 설명하는 프로그램 방식

장점

  • 사용하는 모든 데이터가 변경 불가능
  • 함수는 부수효과를 가지지 않기 때문에, 공유 데이터에 대한 동시성 접근 문제에 대해
    비교적 자유로울 수 있다.

단점

  • 모든 설계를 순수 함수 단위 쪼개어, 유기적으로 설계해야하기 때문에 로직이 커질수록
    생각해야하는 부분이 많아진다
  • 잘못된 설계는 효율의 감소로 이어진다

차이점

  • 절차지향 vs 객체지향

    • 절차지향 프로그래밍이 가지고 있는 부족함을 객체지향 프로그래밍이 보완해주는 역할
    • 절차지향, 객체지향 프로그래밍 둘 다 함수가 있지만, '객체'라는 개념 등장
    • 절차지향은 데이터 중심, 객체지향은 기능 중심
  • 객체지향 vs 함수형

    • 객체지향일 경우
      • 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어진다
      • 상태, 멤버변수, 메서드 등이 긴밀한 관계 가진다
      • 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라진다
    • 함수형
      • 값의 연산 및 결과 도출 중심으로 코드작성이 이루어진다
      • 함수는 인자로 받은 값을 별도로 저장하지 않고, 간결한 과정으로 처리하고
        매핑하는 데 목적을 둔다

시간복잡도

특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간을 의미
같은 결과를 가져오는 코드라면 시간 복잡도가 작을수록 더 효율적인 알고리즘이라고 할 수 있다.

공간복잡도

작성한 프로그램이 얼마나 많은 메모리를 차지하는지 분석하는 방법
하지만 최근 컴퓨터 성능의 발다라로 인해 메모리의 여유 공간이 충분하기 때문에 공간 복잡성의
중요성이 예전에 비해 많이 낮아짐

시간 복잡도의 경우 알고리즘을 잘못 구성했을 경우 결과값이 나오지 않거나 현저하게 느린속도가
나오기에 최근에는 공간복잡도 보다 시간복잡도를 우선시하여 프로그램을 작성한다.

참고
절차지향 / 객체지향 / 함수형 프로그래밍
시간복잡도, 공간복잡도

profile
개발자가 되고 싶은 취준생

0개의 댓글