본문 바로가기

항해99_10기/105일의 TIL & WIL

[기술면접 스터디] [230301] 프로그래밍 패러다임, 시간복잡도 & 공간복잡도

Q1. 절차지향 / 객체지향 / 함수형 프로그래밍이란 무엇이고 차이점은 무엇인가?
절차지향 프로그래밍은 로직이 수행되어야 할 연속적인 계산과정으로 이루어져있습니다. 로직이 진행되는 방식으로 코드를 구현하면 되므로 코드의 가독성이 좋으며 실행 속도가 빠릅니다. 때문에, 많은 계산 작업이 필요한 프로그래밍에 적합한 패러다임입니다. 예를 들어, 포트란(fortran)을 이용한 대기 과학 관련 연산 작업, 머신 러닝의 배치 작업 등에 쓰입니다. 하지만, 이러한 특성 때문에, 모듈화가 어렵고 유지보수성이 떨어진다는 단점이 있습니다.

객체지향 프로그래밍은 객체들의 집합으로 프로그램의 상호작용을 객체로 표현하며, 데이터를 객체로 취급하여 객체 내부에 선언된 메소드를 활용하는 방식을 말합니다. 설계에 많은 시간이 걸리며 처리 속도가 다른 프로그래밍 패러다임에 비해 상대적으로 느리지만, 추상화, 캡슐화, 상속성, 다형성의 특징을 가지며, SOLID 설계원칙을 따라 설계하므로 모듈화, 유지보수와 재사용성, 코드의 가독성이 매우 높은 장점을 가집니다.

함수형 프로그래밍은 선언형 패러다임의 일종으로, 선언형 프로그래밍은 "무엇"을 풀어내는가에 집중하는 패러다임으로 "프로그램은 함수로 이루어진다"라는 명제가 담겨있습니다. 함수형 프로그래밍은 순수 함수들을 블록처럼 쌓아 로직을 구현하고 고차 함수를 통해 재사용성을 높인 것이 특징입니다. 특히, 자바스크립트의 경우, 단순하고 유연한 언어로, 함수가 일급 객체이기 때문에 객체지향보다는 함수형 프로그래밍 방식이 선호됩니다.

- 순수 함수 : 출력이 입력에만 의존하는 함수
- 고차 함수 : 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는 함수
- 일급 객체 : 변수나 메서드 안에 함수를 할당할 수 있고, 함수 안에 함수를 매개변수로 담을 수 있으며, 함수가 함수를 반환할 수 있는 특징을


Q2. 알고리즘에서 ‘시간복잡도‘와 ‘공간복잡도’란 무엇인가? 그리고 이것들은 왜 중요한가?
시간복잡도란 '문제를 해결하는 데 걸리는 시간과 입력의 함수 관계'를 가리키며, 어떠한 알고리즘의 로직이 '얼마나 오랜 시간'이 걸리는지 나타내는 데 쓰입니다. 보통 빅오 표기법으로 나타냅니다. 시간복잡도는 비효율적인 코드를 개선하는 데 쓰이는 척도입니다.

공간복잡도란 프로그램을 실행시켰을 때 필요로 하는 자원 공간의 양을 말합니다. 정적 변수로 선언된 것 말고도 동적으로 재귀적인 함수로 인해 공간을 계속해서 필요로 할 경우도 포함합니다.

이 두 개념은 프로그램의 성능을 나타내기 때문에 중요합니다. 같은 로직을 수행하는 알고리즘이라면, 더욱 효율적으로 자원을 사용하는 알고리즘이 필요하기 때문에 중요하다고 할 수 있습니다.