프로그래밍 언어는 하드웨어에 대한 추상화 수준에 따라 상위레벨(High-level)과 하위레벨(Low-level)로 나눌 수 있습니다. 이 글에서는 언어의 구조, 메모리 접근 방식, 예시 코드와 함께 고수준/저수준 언어의 차이를 명확하게 정리해드립니다.
🏗️ 추상화가 높을수록 개발이 쉬워지지만 제어력은 낮아집니다.
🧬 추상화가 낮을수록 제어력은 높지만 개발이 어려워집니다.
if, for, class)for i in range(10):
print(i)
반복문 하나로 간단하게 구현 가능. 내부 메모리 관리, 컴파일 등은 런타임이 자동 처리.
mov eax, 0
loop_start:
cmp eax, 10
jge loop_end
; 출력 시스템 호출 생략
inc eax
jmp loop_start
loop_end:
CPU 레지스터와 점프 명령어 등을 직접 사용해야 하는 방식
int arr[10];
for(int i=0; i<10; i++)
arr[i] = i;
추상화와 제어력의 균형을 갖춘 대표적인 시스템 언어
a = [1, 2, 3]
print(a[0]) # 추상화된 배열 접근
arr2 = a.copy() # 내부는 memcpy지만 개발자는 신경 안 씀
int arr[3] = {1, 2, 3};
int *p = arr;
printf("%d\n", *(p+1)); // 두 번째 요소에 직접 접근
// 하드웨어 레지스터 직접 제어
volatile unsigned int *reg = (unsigned int *)0x40021000;
*reg = 0x1;
| 항목 | 상위레벨 언어 | 하위레벨 언어 |
|---|---|---|
| 추상화 수준 | 높음 | 낮음 |
| 하드웨어 지식 필요 | 없음 | 필수 |
| 생산성 | 높음 | 낮음 |
| 성능 최적화 | 제한적 | 가능 |
| 메모리 접근 | 자동화 | 직접 제어 |
| 안전성 | 높음 | 낮음 |
| 이식성 | 높음 | 낮음 |
| 대표 예시 | Python, Java, Go | Assembly, Machine Code |
“택배 시스템이 집 주소 없이도 물건을 배달해줌”
“지도 보고 직접 집 찾아가서 물건 전달”
사용 목적에 따라 적절한 언어를 선택하는 것이 효율적인 개발의 핵심입니다.