본문 바로가기

진법 변환 프로그래밍 활용법 - 2진수부터 16진수까지 개발 실무에서 쓰이는 순간들

색상 코드, 파일 권한, 해시값은 모두 진법 변환 위에서 돌아갑니다. Python, JavaScript, Java 예제 코드와 함께 2진수, 8진수, 16진수가 실무에서 어떻게 쓰이는지 한 번에 정리했습니다.


진법 변환 프로그래밍 활용법 - 2진수부터 16진수까지 개발 실무에서 쓰이는 순간들

개발 공부를 하다 보면 #FF5733 같은 색상 코드나 chmod 755 같은 명령어를 하루에도 몇 번씩 마주칩니다. 그런데 막상 누가 '그 숫자가 왜 그런 값인지' 물어보면 말문이 막히는 경우가 많습니다. 학교에서 배운 진법 변환이 실무와 어떻게 연결되는지 아무도 알려주지 않았기 때문입니다. 진법 변환 프로그래밍 활용법을 제대로 이해하면 색상 코드, 파일 권한, 해시값이 전부 하나의 원리로 읽히기 시작합니다.

컴퓨터는 왜 2진수로 계산할까

컴퓨터의 가장 작은 부품인 트랜지스터는 전기가 흐르는 상태와 흐르지 않는 상태, 딱 두 가지만 구분할 수 있습니다. 이 두 상태를 1과 0으로 표현한 것이 비트(bit)이고, 비트 8개를 묶은 것이 바이트(byte)입니다. 1바이트로 표현할 수 있는 수는 0부터 255까지, 총 256가지입니다.

문제는 2진수가 사람이 읽기에 너무 길다는 점입니다. 255를 2진수로 쓰면 11111111, 여덟 자리나 됩니다. 그래서 개발자들은 2진수 4자리를 정확히 한 글자로 압축할 수 있는 16진수를 함께 사용합니다. 16은 2의 4제곱이기 때문에 두 진법 사이의 변환은 자리수만 끊어 읽으면 될 정도로 간단합니다.

진법 변환을 잘한다는 것은 암산을 잘한다는 뜻이 아닙니다. 컴퓨터가 데이터를 어떤 모양으로 저장하는지 이해한다는 뜻이고, 그 이해가 디버깅 속도를 바꿉니다.

개발자가 자주 만나는 진법 4가지

실무에서 쓰는 진법은 사실상 4가지로 정리됩니다. 같은 수 255가 진법마다 어떻게 표기되는지 비교해 보면 감이 빨리 잡힙니다.

진법접두사주요 사용처255의 표기
2진수0b비트 연산, 플래그, 마스킹0b11111111
8진수0o리눅스 파일 권한(chmod)0o377
10진수없음일상적인 수 계산255
16진수0x색상 코드, 해시값, 메모리 주소0xFF

여기서 접두사가 중요합니다. 코드에서 0x로 시작하면 16진수, 0b로 시작하면 2진수라는 약속이 대부분의 언어에서 동일하게 통용됩니다.

프로그래밍 언어별 진법 변환 코드

진법 변환은 직접 나눗셈으로 구현할 수도 있지만, 실무에서는 언어가 제공하는 내장 함수를 쓰는 것이 정확하고 빠릅니다.

Python

# 10진수를 다른 진법 문자열로
bin(255)   # '0b11111111'
oct(255)   # '0o377'
hex(255)   # '0xff'

# 다른 진법 문자열을 10진수로
int('ff', 16)        # 255
int('11111111', 2)   # 255

JavaScript

// 10진수를 다른 진법 문자열로
(255).toString(2);    // '11111111'
(255).toString(16);   // 'ff'

// 다른 진법 문자열을 10진수로
parseInt('ff', 16);   // 255
parseInt('377', 8);   // 255

Java

Integer.toBinaryString(255);   // "11111111"
Integer.toHexString(255);      // "ff"
Integer.parseInt("ff", 16);    // 255
참고: JavaScript의 parseInt는 두 번째 인자(진법)를 생략하면 문자열 형태에 따라 해석이 달라질 수 있습니다. 특히 과거 자바스크립트 엔진은 0으로 시작하는 문자열을 8진수로 해석하는 경우가 있었습니다. 진법을 항상 명시하는 습관이 안전합니다.

실무에서 진법 변환이 쓰이는 순간들

진법 변환이 실제 개발 현장에서 어디에 숨어 있는지 알면, 외우지 않아도 자연스럽게 손에 익습니다.

  • 색상 코드: #FF5733은 빨강 FF(255), 초록 57(87), 파랑 33(51)을 16진수로 이어 붙인 값입니다. 색상 하나가 곧 16진수 3쌍입니다.
  • 리눅스 파일 권한: chmod 755에서 7은 2진수 111, 즉 읽기+쓰기+실행 권한을 모두 켠 상태입니다. 5는 101이므로 읽기와 실행만 허용됩니다.
  • 해시값: SHA-256 해시가 항상 64자리인 이유는 256비트를 16진수 한 글자당 4비트씩 표현하기 때문입니다. MD5가 32자리인 것도 같은 원리(128비트)입니다.
  • 유니코드: 한글 '한'의 코드 포인트는 U+D55C처럼 16진수로 표기됩니다.
  • IP 주소: IPv4는 32비트를 8비트씩 4덩어리로 나눈 것이고, IPv6는 128비트를 16진수로 표기합니다.

해시값 부분은 직접 확인해 보면 이해가 훨씬 빠릅니다. 해시 생성기에 아무 문자열이나 넣고 SHA-256 결과를 보면, 어떤 입력이든 정확히 64자리 16진수가 나오는 것을 눈으로 확인할 수 있습니다. 글자 수를 세어 보고 4비트 곱하기 64가 256비트라는 계산까지 해 보면 진법과 비트의 관계가 확실히 잡힙니다.

데이터 용량 단위도 진법과 관련이 깊습니다. 1KiB는 2의 10제곱인 1024바이트이고, SI 기준 1KB는 1000바이트라서 하드디스크 표기 용량과 운영체제 표시 용량이 다르게 보이는 것입니다. 이런 단위가 헷갈릴 때는 단위 변환기로 값을 직접 비교해 보면 차이가 명확하게 보입니다.

진법 변환에서 흔히 하는 실수

초보 개발자들이 진법 때문에 겪는 버그는 대체로 비슷한 패턴입니다.

  • 진법 인자 생략: parseInt에 진법을 안 넘겨서 의도와 다른 값이 나오는 경우입니다. 항상 두 번째 인자를 씁니다.
  • 문자열과 숫자 혼동: hex(255)의 결과는 숫자가 아니라 문자열 '0xff'입니다. 문자열끼리 더하면 산술 연산이 아니라 이어 붙이기가 됩니다.
  • 대소문자 비교 실패: 16진수 FF와 ff는 같은 값이지만 문자열로 비교하면 다릅니다. 해시값 비교 전에는 소문자로 통일하는 것이 관례입니다.
  • 음수 표현 오해: 컴퓨터는 음수를 2의 보수로 저장하기 때문에, 8비트에서 11111111은 부호 없는 정수로는 255지만 부호 있는 정수로는 -1입니다.
팁: 윈도우 기본 계산기를 프로그래머 모드로 바꾸면 2진수, 8진수, 10진수, 16진수가 실시간으로 동시에 표시됩니다. 코드를 짜기 전에 값을 빠르게 확인할 때 가장 간단한 도구입니다.

오늘 바로 해볼 수 있는 연습

진법 변환은 이론으로 외우는 것보다 손으로 두어 번 확인하는 쪽이 훨씬 오래 남습니다. 두 가지만 해 보시길 권합니다.

첫째, 지금 쓰는 웹사이트의 대표 색상 코드를 하나 골라 두 자리씩 끊어 10진수로 바꿔 보세요. Python이라면 int('ff', 16) 한 줄이면 됩니다. 둘째, 터미널에서 ls -l로 파일 권한을 확인하고 rwxr-xr-x 같은 표기를 직접 8진수 755로 환산해 보세요. 이 두 가지만 해 봐도 진법 변환이 시험 문제가 아니라 매일 쓰는 실무 도구라는 감각이 생깁니다.

3일 무료체험큰손탐지기, 지금 바로 시작하세요

설치 없이 웹에서 바로 사용 가능 · PC & 모바일 지원

무료체험 시작
카카오톡 상담