프로그램 언어마다 다른 프로그래밍 동작 원리

프로그래밍 언어 분류

프로그램 언어

저수준, 고수준 언어

프로그램 언어와 프로그래밍 동작 원리를 알려면 언어별 비교와 차이점을 알아야 합니다. 컴퓨터가 이해하기 쉽게 작성된 프로그래밍 언어를 저수준(기계어, 어셈블리어) 언어라고 합니다. 상대적으로 고수준 언어는 고급 프로그래밍, 하이 레벨 프로그래밍 언어로 불리웁니다. 프로그래머들은 기계어로 코드를 짤 수 없기에 고수준 언어로 개발을 하고 있다고 보시면 됩니다.

절차적, 객체지향적 언어

C언어가 대표적인 절차적 언어입니다. 코드 순서에 따라서 작동합니다. 작동 순서는 명확하지만 유지보수나 수정이 필요할 때 전체를 다 손봐야 합니다. 반면에 객체 지향적 언어는 기능 위주로 코드를 기술합니다. 객체간의 관계에 따라서 대상을 추상화하여 구현을 합니다. 또한 기능 위주로 버그 발생을 줄이고자 인자를 대입해서 사용하는 함수형 프로그래밍도 있습니다.

객체지향 프로그램 언어로는 대다수가 포함이 되어 있습니다. 데이터 분야, 인공 지능 분야에 사용되는 파이썬(Python), 자바스크립트(Javascript), 데스크톱 애플리케이션 언어에 사용되는 C#, Back-end 언어인 자바(JAVA)가 있습니다.

컴파일과 인터프리터 차이

Compiler는 프로그래머가 작성한 코드를 기계어로 번역하여 실행 파일을 만드는 것이고, Interpreter는 컴파일 과정없이 소스 코드를 한 줄씩 읽어들이면서 실행을 합니다. 컴파일 언어는 빌드 과정을 통해 저수준 언어로 변환되어 특정 플랫폼에서 실행될 수 있게 만드는 일련의 과정입니다. 인터프리터 언어로는 SQL, 자바스크립트, 파이썬이 있고 컴파일 언어로는 자바 및 C++가 있습니다.

‘어떻게’ 명령하고, ‘무엇을’ 선언할까?

프로그래밍은 명령형 프로그래밍과 선언형 프로그래밍으로 비교가 될 수 있습니다. 예를 들어 설명하면, 명령형 프로그래밍 방식은 밥을 ‘어떻게’ 먹을 수 있는지를 코드로 나열하는 방법이고, 선언형 프로그래밍은 먹을 음식중에 ‘무엇을’ 먹을까를 코드로 나열합니다. 당연히 선언형 프로그래밍이 코드가 간결하고 직관적이겠죠. SQL과 HTML 언어가 선언형이고, 자바스크립트 언어가 명령형입니다. 물론 명령형 방식의 코드가 구현되어 추상화 되어 있기 때문에 선언형으로 사용이 가능한 것입니다. 선언형 방식은 코드의 가독성과 재사용성을 높일 수 있습니다.

프로그램 동작 원리

프로그래밍 동작 원리

컴파일 과정에서 변수의 타입(data type)을 결정하면 정적 언어이고, 자료형을 코드에 명시도 안 할뿐더러 프로그램 실행 과정에서 변수 타입이 결정되는 언어를 동적 언어라 합니다. 정적인 언어로는 C++, JAVA가 있고 동적 언어는 자바스크립트, 파이썬, PHP 등이 있습니다.

C언어

C언어는 소스파일(.c)을 컴파일러가 객체 파일(.obj)로 만들고 링커(Linker)에 의해 여러 개의 코드와 데이터를 한데 모아서 연결하여 한 개의 파일로 만들어 최종적으로 실행파일(.exe)이 만들어집니다. Linker(링커)가 소프트웨어 개발에서 독립적인 컴파일을 가능하게 해 큰 프로젝트에서도 모듈별로 관리 할 수 있게 해줍니다. 컴파일 이후, 실행하기 바로 전 외부 라이브러리를 연결시켜 사용을 가능하게 합니다. 이 과정을 Linking(링킹)이라고 부릅니다. 최종적으로 실행파일(.exe)과 라이브러리(.dll) 파일이 생성되는 걸 알 수 있다. 실행파일에서 필요한 라이브러리 파일이 dll인 것입니다. exe 파일에 필요한 라이브러리가 따로 존재하여 필요할 때마다 사용하는 방식이며 동적 라이브러리라고 불리웁니다. 반면에 exe 파일에 필요한 모든 기능이 하나의 파일에 있다면 정적 라이브러리라 합니다. 다만 실행 파일(.exe)의 크기가 상대적으로 큽니다.

파이썬(Python)

인터프리터 방식을 쓰는 프로그래밍 언어로 소스 코드를 한 줄씩 기계어로 번역을 하기에 실행 속도는 컴파일 언어보다 느립니다. 장점으로는 개발자들이 프로그램 수정을 간단하게 할 수 있습니다. 컴파일 언어였다면 일부 코드를 약간만 수정해도 컴파일러로 실행파일을 만들어서 다시 배포해야 합니다.

python은 C언어로 구현이 되어 있고 구현체가 CPython입니다. python 파일을 Cpython이 컴파일하여 바이트 코드로 변환한 다음에 인터프리터가 동작하게 됩니다. 동적 타입으로써 타입을 지정하지 않고 변수를 사용할 수 있으며 형변환에 자유로워 집니다.

자바(Java)

OS단 위에 JVM(JAVA Virtual Machine)이 실행되고 그 위에 자바 프로그램이 실행되어 동작합니다. JVM은 자바 가상 머신으로 컴파일된 코드, 즉 바이트코드를 실행시켜주는 가상 머신입니다. JVM이 있어야 프로그램이 실행된다는 것을 알 수 있습니다. 가장 큰 장점은 플랫폼에 독립적입니다. 컴파일된 코드가 있고 하드웨어와 운영체제에 호환되는 JVM이 실행한다는 전제면 플랫폼에 자유롭습니다.

자바 소스 파일인 .java를 자바 컴파일러가 자바 바이트 코드인 .class파일로 변환합니다. 이 파일이 JVM 메모리에 올라가면 명령어 단위로 하나식 가져와서 실행합니다. JVM 동작 순서는 클래스를 로더하고 런타임 데이터 영역에 메모리를 할당하고 실행이 되는데 이 모든 게 JRE(Java Runtime Environment)에 포함이 되어 있습니다. JRE란 자바 프로그램을 실행할 수 있는 환경을 제공하는 소프트웨어 플랫폼입니다.

Android 앱

안드로이드 앱은 Java, Kotlin 또는 C++과 같은 프로그래밍 언어로 작성됩니다. 안드로이드 앱은 안드로이드 운영 체제 위에서 실행되며, 안드로이드 운영 체제는 리눅스 커널을 기반으로 합니다. 앱은 안드로이드 애플리케이션 패키지(APK) 파일 형식으로 빌드되며, APK 파일에는 앱의 리소스, 메타 데이터 및 실행 가능한 코드가 포함됩니다. 안드로이드 앱은 안드로이드 운영 체제가 제공하는 API(Application Programming Interface)를 사용하여 기기의 기능에 접근하고 상호 작용합니다. 이러한 기능에는 카메라, 센서, 네트워크 연결, 데이터베이스 액세스 등이 포함됩니다.

IOS 앱

iOS 앱은 주로 Objective-C 또는 Swift와 같은 프로그래밍 언어로 작성됩니다. iOS 앱은 Xcode와 같은 통합 개발 환경(IDE)에서 개발되며, 앱의 빌드, 디버깅 및 배포를 위한 도구를 제공합니다. iOS 앱은 Cocoa Touch 프레임워크를 기반으로 작성되며, 이 프레임워크는 사용자 인터페이스 기능, 멀티터치 이벤트 처리, 네트워킹, 애니메이션 및 다른 핵심 기능을 포함합니다.

Node.js

Node.js는 JavaScript 런타임 환경으로, 서버 측 애플리케이션을 개발하는 데 사용됩니다. Node.js는 Chrome V8 JavaScript 엔진으로 빌드되어 있으며, 비동기 이벤트 기반 아키텍처를 가지고 있습니다.

이벤트 기반, 비동기식, 논 블로킹 I/O 모델을 사용하여 동작합니다. Node.js는 단일 스레드 이벤트 루프를 사용하여 여러 요청을 동시에 처리할 수 있습니다. 이러한 특징은 Node.js를 확장 가능하고 빠르게 만들어주며, I/O 집약적인 작업에 특히 적합합니다.

Leave a Comment