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

Soo·2023년 3월 1일
0

Q. 알고리즘에서 '시간복잡도'와 '공간복잡도'란 무엇인가? 그리고 이것들은 왜 중요한가?

시간복잡도

특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간을 의미한다. 같은 결과를 갖는 프로그래밍 소스도 작성 방법에 따라 걸리는 시간이 달라진다.

공간복잡도

작성한 프로그램이 얼마나 많은 메모리를 차지 하느냐를 분석하는 방법을 의미한다.

최근 대용량 시스템이 보편화되면서, 공간복잡도 보다는 시간 복잡도가 우선이다.

시간복잡도와 공간복잡도를 통해 원하는 데이터를 빠르고 효율적으로 찾을 수 있기 때문에 중요하다.

Q. 절차지향/객체지향/함수형 프로그래밍이란 무엇이고 차이점은 무엇인가?

절차지향 (Procedural Programming)

물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되고, 프로그램 전체가 유기적으로 연결되도록 마드는 프로그래밍 기법

특징

  • 컴퓨터의 작업 처리방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리함
  • 코드의 가독성이 좋고, 컴퓨터의 처리구조와 유사해 실행속도가 빠르다는 장점이 있음
  • 각각의 코드가 순서에 민감하게 연결되어있기 때문에 유지보수 및 분석이 어려움

객체지향 (Object Oriented Programming)

  • 모든 데이터를 객체(Object)로 취급하고, 객체가 처리 요청 받았을 때, 객체 내부에 있는 기능을 사용해 처리하는 방법
  • 데이터와 절차를 하나의 덩어리로 묶어서 생각하게 된다.

특징

  • 코드의 재활용성이 높음 (확장, 유지보수에 용이!)
  • 절차지향보다 간편함
  • 처리속도가 절차지향보다 느리고 설계에 많은 시간 소요가 들어간다는 단점이 있음
  • 메서드를 통해서만 접근이 가능하기 때문에 절차지향식처럼 특정 함수에 접근할 수 없고, 식으로만 접은이 가능해 속도적인 측면에서 불이익이 있음

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

  • "순수함수"를 사용해, 상태를 제어하기 보다는 빨리 처리하는 데에 초점을 둔 방법
  • 실행 순서를 지정할 필요가 없기 때문에 비절차형 언어라고도 함

특징

  • 함수의 동작부가 간결해지기 때문에 객체지향 프로그래밍에 비해 코드 이해도나 가독성이 좋아지고 테스트가 쉬웁
  • 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없음
profile
Soogineer's Devlog

0개의 댓글