객체지향 | 함수지향 |
---|---|
모든 데이터를 객체로 취급하고, 처리 요청시 객체 내부 기능으로 처리하는 방법 | "순수 함수"를 사용해, 상태를 제어하기보단, 빨리 처리하는데 초점을 둔 방법 |
코드의 재사용이 가능하여 유지 보수에 용이 | 함수의 동작부가 간결해지기 때문에, 코드 이해도와 가독성이 좋아짐. |
처리 속도가 상대적으로 다소 느리고 설계에 많은 시간이 소요됨. | 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없음. |
함수가 일급 객체 | 객체(클래스)가 일급 객체 |
Python, C++, Javascript | Javascript |
** 순수함수: 동일한 입력값을 넣었을 때 항상 동일한 리턴값을 반환하며 외부요인에 영향을 받지 않는 함수.
** 일급객체: 다른 요소들과 아무런 차별이 없는 객체. 즉, 함수의 인자로도 넘겨질 수 있고, 변수에 대입도 가능한 객체를 일급 객체.
컴파일러 언어 | 인터프리터 언어 | |
---|---|---|
의미 | 코드 실행 전 컴파일 시, 소스 코드 전체를 한번에 기계어로 변환 후 실행하는 언어 | 코드가 실행 단계인 런타임에서 코드 한 줄씩 중간 코드인 바이트코드로 변환 후 즉시 실행하는 언어 |
실행 파일 | O | X |
횟수 | 컴파일은 한번만 | 인터프리트는 코드 실행마다 반복적으로 |
예시 | C, C++, JAVA | Python, Javascript |
++ 스크립트 언어: 이미 존재하는 소프트웨어를 제어하기 위한 용도로 사용되는 언어. 인터프리터 언어이다.
ex) JavaScript는 웹 브라우저의 스크립트 언어이다. 그 목적이 고정되어 있어서 스크립트 언어라고 한다.
컴파일러 언어와 인터프리터 언어랑은 다른 얘기!
메모리 관리 기법 중 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 자동으로 해제하는 기능
장점 | 단점 |
---|---|
이미 동적 할당한 메모리를 해제한 영역에 접근하게 되는 버그를 줄임 | 어떤 메모리를 해제해야 할 지 결정하는데 사용되는 알고리즘에 의해 비용이 듦 |
이미 해제된 메모리를 또 다시 해제하는 오류를 줄임 | 할당된 메모리가 해제되는 시점을 알 수 없게 됨 |
메모리 누수를 줄임 | 시작과 실행 타이밍을 모르기에 실시간 예측 시스템에는 부적합 |