빅엔디안(Big Endian) vs 리틀엔디안(Little Endian)
2023. 6. 6. 22:55ㆍHigh Level Programming Language
🔥 빅엔디안(Big Endian) vs 리틀엔디안(Little Endian) 완전 정복
1. Endian(엔디안)이란 무엇인가? 🧠
컴퓨터는 데이터를 메모리에 저장할 때,
여러 바이트로 구성된 값(2바이트, 4바이트, 8바이트 등)을 어떻게 나열할지를 결정해야 합니다.
이때 가장 중요한 개념이 바로 엔디안(Endian)입니다.
Endian = "멀티바이트 데이터 저장 순서 규칙"
2. Big Endian과 Little Endian ✨
엔디안은 두 가지 방식이 있습니다:
용어 | 설명 | 이모지 비유 |
---|---|---|
Big Endian | 가장 큰 바이트를 먼저 저장 | 🏰👶 (큰 것 먼저) |
Little Endian | 가장 작은 바이트를 먼저 저장 | 👶🏰 (작은 것 먼저) |
🔵 Big Endian (🏰👶)
- 메모리의 낮은 주소에 가장 상위 바이트(MSB) 저장
- 사람이 숫자를 읽는 방식과 비슷함 (왼쪽부터 큰 자리수)
예시:
32비트 값 0x12345678
을 메모리에 저장하면:
주소 | 값 (Big Endian) |
---|---|
0x00000000 | 0x12 |
0x00000001 | 0x34 |
0x00000002 | 0x56 |
0x00000003 | 0x78 |
→ 큰 바이트부터 메모리에 저장합니다.
🔵 Little Endian (👶🏰)
- 메모리의 낮은 주소에 가장 하위 바이트(LSB) 저장
- 반대로, 가장 작은 자리수가 먼저
예시:
같은 32비트 값 0x12345678
을 메모리에 저장하면:
주소 | 값 (Little Endian) |
---|---|
0x00000000 | 0x78 |
0x00000001 | 0x56 |
0x00000002 | 0x34 |
0x00000003 | 0x12 |
→ 작은 바이트부터 메모리에 저장합니다.
3. 요약 다이어그램 🎯
Big Endian (🏰👶):
[0x12][0x34][0x56][0x78] (큰 것부터 저장)
Little Endian (👶🏰):
[0x78][0x56][0x34][0x12] (작은 것부터 저장)
4. 누가 어떤 방식을 사용하는가? 🌍
아키텍처/환경 | 엔디안 방식 | 비고 |
---|---|---|
Network Protocol (TCP/IP 등) | Big Endian | "Network Byte Order"라고 부름 |
x86 (Intel, AMD PC CPU) | Little Endian | Windows, Linux PC 대부분 |
ARM CPU | 기본 Little Endian (Big도 지원) | 스마트폰, 임베디드 |
SPARC, PowerPC (구형) | Big Endian (또는 Dual) | 서버용 |
✅ 인터넷 네트워크 표준은 항상 Big Endian을 사용합니다! (TCP/IP, IP Header 등)
5. Big Endian vs Little Endian 비교 정리 🔥
항목 | Big Endian | Little Endian |
---|---|---|
메모리 저장 순서 | 큰 바이트 먼저 | 작은 바이트 먼저 |
사람이 읽는 방식과 유사성 | 높음 | 낮음 |
네트워크 표준 | 사용 (Network Byte Order) | 사용하지 않음 |
x86 아키텍처 | 사용하지 않음 | 기본 사용 |
속도 최적화 측면 (x86) | 불리함 | 유리함 |
메모리 덤프 분석 | 쉽다 | 헷갈릴 수 있다 |
6. 왜 Little Endian이 PC에서 기본이 되었는가? 🤔
주요 이유:
- 산술 연산 최적화:
- 덧셈, 뺄셈 연산 시, 낮은 자리수부터 처리하는데,
Little Endian이면 메모리 접근이 자연스러움.
- 덧셈, 뺄셈 연산 시, 낮은 자리수부터 처리하는데,
- 확장성:
- 8비트 → 16비트 → 32비트 → 64비트 확장 시 주소 재배치 없이 가능.
결론:
CPU 산술 속도를 높이기 위해 Little Endian이 채택되었습니다.
(특히 x86 아키텍처가 전 세계를 점령하면서 사실상 Little Endian이 "현실 표준"이 되었습니다.)
7. 엔디안 변환이 필요한 경우 🚚
다른 엔디안 방식 간에 데이터를 주고 받을 때는 변환이 필요합니다.
예를 들어:
- PC(Little Endian) ↔ 네트워크 장비(Big Endian) 간 통신
- Windows ↔ ARM 서버 간 바이너리 파일 이동
변환 함수 예시(C 언어):
uint32_t htonl(uint32_t hostlong); // Host to Network Long (Big Endian으로 변환)
uint32_t ntohl(uint32_t netlong); // Network to Host Long (Host 엔디안으로 변환)
✅ 운영체제나 네트워크 프로토콜에서는 항상 이런 변환을 수행합니다.
✨ 최종 요약
항목 | 요약 |
---|---|
Big Endian | 큰 바이트를 먼저 저장, 네트워크 표준 |
Little Endian | 작은 바이트를 먼저 저장, x86 기본 |
사용 추세 | 네트워크 프로토콜은 Big, PC/모바일은 Little |
엔디안 변환 | 다른 시스템 간 통신 시 반드시 필요 |
🔥 한 문장 요약
"Big Endian은 큰 것부터 저장, Little Endian은 작은 것부터 저장하며, 네트워크는 Big, 현대 PC는 Little이 주류다."
'High Level Programming Language' 카테고리의 다른 글
이클립스에서 main 메소드의 파라미터에 아규먼트를 전달하는 방법 (0) | 2024.05.30 |
---|---|
이진 탐색 트리 (0) | 2023.06.23 |
생성자와 빌더 (0) | 2023.06.04 |
Java Advanced Programming Quiz 문제 + 정답 (0) | 2023.06.03 |
Object Graph (0) | 2023.06.03 |