요즘 CS 공부를 하다가 종종 마주치는 것이 '컴파일 타임에 동작한다.'라는 표현이다.
물론 컴파일 타임은 인간이 사용하는 컴퓨터 언어(어셈블리어)를 컴퓨터가 이해할 수 있는 언어(기계어)로 변환하는 시간이 아닐까! 하는 어렷품함이 있다. 그리고 런타임이란 프로그램을 실행시키기 위해서 빌드되는 과정에 소요되는 시간이 아닐까..? 하는 생각도 있었다.
하지만 결국 결론은 누가 나에게 이 둘을 물어봤을 때 깔끔하게 답변할 수 없음을 깨달았다 ^-^...
확인해보자!
컴파일은 뭘까?
Computer Science에서 컴파일은 프로그래밍 언어로 작성된 고급 소스 코드를 컴퓨터에서 실행할 수 있는 저급 기계 코드로 번역하는 과정을 의미한다. 이 번역 프로세스는 컴파일러라는 특수 프로그램에 의해 수행된다.
컴퓨터 언어는 세 단계로 나누어진다고 볼 수 있다.
- 사람들이 보기 편하게 만들어진 친절한 언어 고급 언어(Python, C++, Swift 등이 이에 속한다.)
- 기계들이 이해할 수 있는 이진수로 이루어져있는 저급 언어(기계어)
- 그 중간에 있다고 볼 수 있는 어셈블리 언어
즉 사람이 이해할 수 있는 고급언어를 기계도 이해해야하기 때문에 이를 중간에서 번역하는 것이 컴파일인 것이다.
그럼 '컴파일타임(Compile time)'은?
컴파일타임은 프로그램의 소스 코드가 컴퓨터의 프로세서에서 실행할 수 있는 기계 코드로 변환되는 단계를 나타낸다.
이 번역 프로세스는 코드를 분석하고 오류 또는 불일치를 식별하며 해당 기계 코드를 생성하는 컴파일러에 의해 수행된다.
컴파일타임 동안 컴파일러는 코드의 구문과 의미를 검사하여 프로그래밍 언어의 규칙에 따라 코드가 올바르고 유효한지 확인한다.
오류나 경고가 있는 경우 개발자에게 보고되며 개발자는 프로그램을 실행하기 전에 수정할 수 있다.
그럼 '런타임'은 뭘까?
런타임은 프로그램의 기계 코드가 컴퓨터의 프로세서에 의해 실행되는 단계를 나타낸다.
이 단계에서 프로그램은 컴퓨터의 하드웨어 및 기타 소프트웨어 구성 요소(운영 체제 및 기타 응용 프로그램 등)와 상호 작용한다.
런타임 시 프로그램에서 0으로 나누기, 메모리 부족 오류 또는 런타임 유형 오류와 같은 오류 또는 예외가 발생할 수 있다.
이러한 오류는 잘못된 입력 데이터, 예외적 시스템 조건 또는 프로그래밍 오류로 인해 발생할 수 있으며 종종 프로그램이 충돌하거나 강제 종료될 수 있다.
이 두 가지의 차이를 알아두어야 하는 이유는 뭘까?
컴파일이 성공했다고해서 프로그램을 구동(Run)할 수 없는 것처럼, 이 두가지를 모두 아는 것은 특히 디버깅에 중요하다. 컴파일타임과 런타임은 각각 실행될때 발생하는 특징적인 오류를 가지고 있고, 우리는 각각의 특징을 숙지하고 있어야 이 오류가 컴파일타임때 발생한 것이기 때문에 어떤 코드적 수정을 진행해야하는지 혹은 런타임 직전의 오류로 인해 메모리를 더 신경써주어야 할지 등등 디버깅을 할 수 있다.
Swift에서 발생하는 컴파일타임 오류, 런타임 오류
Swift에서 발생하는 컴파일타임 오류는 대부분 문법의 문제이다. 단적으로 예를들어 Struct를 상속받고자 한다던지, 외부라이브러리를 사용하는데 외부라이브러리가 업데이트 되어 문법적 차이 혹은 XCode가 이를 읽지 못해버릴때 발생하기도 한다. 런타임 오류의 경우 다양한데 위에서도 언급했듯이 특정 값을 0으로 나누는 논리적 모순, 배열이 index가 정해지지 않았는데 특정 index에 값을 넣는다던지, for 문의 범위를 초과해서 반복시킨다던지... 너무나 다양하다.
개발에 있어 디버깅은 굉장히 중요한 요소이기 때문에... 앞으로 컴파일타임, 런타임 등의 부수적인 개념에도 조금 더 디테일하게 알고 넘어가야겠다!
'TIL > CS(feat. Swift)' 카테고리의 다른 글
정적 메모리 할당(Static Memory Allocation)과 동적 메모리 할당(Dynamic Memory Allcoation) (0) | 2023.02.24 |
---|---|
COW(Copy on Write) 훑어보기 (0) | 2023.02.16 |
디자인 패턴 훑어보기_MVC 패턴 (0) | 2023.02.06 |
디자인 패턴 훑어보기_옵저버 패턴 (0) | 2023.02.06 |
디자인 패턴 훑어보기_싱글톤 패턴 (0) | 2023.02.05 |