엔디언

엔디언 (endian)은 컴퓨터 과학에서 여러 바이트로 이루어진 데이터를 메모리에 저장하거나 전송할 때, 그 바이트들의 저장 순서를 지칭하는 용어이다. 주로 '빅 엔디언(Big-endian)'과 '리틀 엔디언(Little-endian)'의 두 가지 방식으로 나뉘며, 이는 시스템 간의 데이터 호환성 및 처리 방식에 중요한 영향을 미친다.

어원

엔디언이라는 용어는 아일랜드 작가 조너선 스위프트의 풍자 소설 《걸리버 여행기》에서 유래했다. 소설 속에서 계란을 깨는 방식(큰 쪽 끝으로 깨느냐, 작은 쪽 끝으로 깨느냐)을 두고 싸우는 '빅엔디언'과 '리틀엔디언'이라는 두 파벌에서 따왔으며, 컴퓨터 분야에서 바이트 순서의 중요성을 강조하기 위해 차용되었다.

종류 및 설명

정수나 부동소수점 수와 같이 2바이트 이상의 데이터를 다룰 때, 각 바이트를 메모리에 어떤 순서로 배치할 것인가에 대한 규칙이다. 최상위 바이트(MSB: Most Significant Byte)와 최하위 바이트(LSB: Least Significant Byte)를 기준으로 설명할 수 있다.

빅 엔디언 (Big-endian)

최상위 바이트(MSB)를 가장 낮은 메모리 주소(앞쪽)에 저장하는 방식이다. 사람이 숫자를 읽는 방식(예: 1234는 '12'가 '34'보다 먼저 옴)과 유사하여 가독성이 높다. 주로 네트워크 프로토콜(TCP/IP 등)에서 표준으로 사용되며, 모토로라 68k, SPARC, PowerPC 등 일부 RISC 프로세서에서 주로 사용되었다.

  • 예시: 4바이트 정수 0x12345678이 메모리 주소 0x1000에 저장될 때:
    • 0x1000: 0x12 (MSB)
    • 0x1001: 0x34
    • 0x1002: 0x56
    • 0x1003: 0x78 (LSB)

리틀 엔디언 (Little-endian)

최하위 바이트(LSB)를 가장 낮은 메모리 주소(앞쪽)에 저장하는 방식이다. 인텔 x86 아키텍처에서 채택되어 현재 대부분의 개인용 컴퓨터에서 사용된다. 데이터 캐스팅이나 일부 주소 계산에서 효율적일 수 있다.

  • 예시: 4바이트 정수 0x12345678이 메모리 주소 0x1000에 저장될 때:
    • 0x1000: 0x78 (LSB)
    • 0x1001: 0x56
    • 0x1002: 0x34
    • 0x1003: 0x12 (MSB)

바이 엔디언 (Bi-endian)

일부 프로세서(예: ARM)는 '바이 엔디언(bi-endian)' 모드를 지원하여, 소프트웨어적으로 빅 엔디언 또는 리틀 엔디언 모드를 선택할 수 있도록 한다. 이는 유연성을 제공하여 다양한 환경에 대응할 수 있게 한다.

중요성

서로 다른 엔디언 방식을 사용하는 시스템 간에 데이터를 교환할 경우, 바이트 순서가 뒤바뀌어 데이터가 왜곡될 수 있다. 예를 들어, 리틀 엔디언 시스템에서 작성된 파일을 빅 엔디언 시스템에서 읽으려 할 때, 바이트 순서를 명시적으로 변환해주지 않으면 데이터가 잘못 해석된다.

따라서 네트워크 통신, 파일 형식(예: JPEG, GIF, BMP 등 많은 파일 형식은 특정 엔디언을 가정하거나, 메타데이터에 엔디언 정보를 포함한다), 크로스 플랫폼 개발 등에서 엔디언 변환(바이트 스와핑)이 필수적으로 요구된다. 네트워크 프로토콜은 일반적으로 빅 엔디언을 "네트워크 바이트 순서"로 통일하여 사용하며, 이는 서로 다른 시스템 간의 데이터 통신에서 혼란을 방지하기 위함이다.

관련 항목

  • 바이트 순서 (Byte order)
  • 네트워크 바이트 순서 (Network byte order)
  • 데이터 형식 (Data type)
  • 플랫폼 독립성 (Platform independence)
둘러보기

더 찾아볼 만한 주제