⚠️ 공부한 내용을 정리하는 공간입니다. 설명이 부족하거나 옳바르지 못한 부분이 있을 수 있습니다. 옳바르지 못한 내용을 발견하셨다면 댓글로 알려주시길 부탁드립니다. 수정하도록 하겠습니다.
오늘의 사족
여러분들은 인생 책이 있나요?
책을 안 읽은지 너무 오래되어서(참고서, 전공서적 제외) 책을 읽고 싶습니다.
시간가는지 모르고 몰입력이 대단한 그런 소설책 추천 받습니다.
< 목차 >
1. 컴퓨터는 어떻게 사람의 말을 표현하는가
1-1. Encoding과 Decoding
2. Encoding 방식
2-1. ASCII (American Standard Code for Information Interchange)
2-2. EUC-KR
2-3. Unicode
이전 글에서는 컴퓨터가 어떤 언어를 이해하는지에 대해 설명하면서 수를 표현하는 여러 방법(이진법, 십진법, 십육진법)에 대해 알아보았다.
오늘은 컴퓨터가 어떻게 0과 1로 사람이 사용하는 언어를 표현하는지에 대해 알아보겠다.
1. 컴퓨터는 어떻게 사람의 말을 표현하는가
워드나 한글과 같은 문서 편집기를 사용할 때 우리는 키보드를 사용하여 문장을 작성할 것이다. 그때 모니터에 출력되는 다양한 언어들은 어떻게 표현되는 것일까? 컴퓨터는 분명히 0과 1만 이해한다고 했다. 그렇다는 것은 컴퓨터는 언어를 0과 1로 이해한다는 것이다.
어떻게? HOW?!
이전 글에서 컴퓨터가 이해하는 언어에 대해 설명할 때 우리가 일상생활에서 사용하는 숫자를 표현하는 방식인 십진법으로 표현된 수는 0과 1로만 수를 표현하는 방식인 이진법으로 표현된 수로 바꾼다고 했었다. 문자도 같다. 인간의 언어를 컴퓨터의 언어로 바꿔주는 것이다. 여기서 이해해야 하는 개념이 바로 Encoding과 Decoding이다.
1-1. Encoding과 Decoding
Encoding
우리가 사용하는 언어를 컴퓨터가 이해하는 언어로 바꾸는 과정을 Encoding이라 한다.
컴퓨터는 0과 1만 이해한다고 했으니 Encoding은 인간의 문자를 0과 1로만 표현되도록 바꾸는 과정이다.
Decoding
만약 컴퓨터가 사용하는 언어인 저급언어를 인간이 이해하는 언어인 고급언어로 변환하는 과정을 거치지 않는다면 위 사진과 같은 상황이 벌어질 것이다.
이때 컴퓨터가 사용하는 언어를 인간이 이해할 수 있는 언어로 바꾸는 과정을 Decoding이라 한다.
2. Encoding 방식
Encoding은 인간의 언어를 컴퓨터의 언어로 바꾸는 과정이라고 했다.
여기서 인간의 언어는 다양하다. 영어, 한국어 등 지구에서 사용하는 언어는 나라마다 정말 다양하다. 그렇다면 이렇게 다양한 언어가 존재하는데 어떤 방식으로 인간의 언어를 컴퓨터의 언어로 변환하는지 알아보자.
2-1. ASCII (American Standard Code for Information Interchange)
아스키 코드는 영어 알파벳과 숫자, 일부 특수문자를 포함하는 문자 집합이다. 아스키 문자는 각각 7비트로 표현되기 때문에 2⁷ 개인 128개로 표현이 가능하다. 밑에 표는 아스키 코드표이다.
이진법 | 십진법 | 십육진법 | 문자 |
0000000 | 0 | 0 | Null Character |
0000001 | 1 | 1 | Start of Header |
0000010 | 2 | 2 | Start of Text |
0000011 | 3 | 3 | End of Text |
0000100 | 4 | 4 | End of Transmission |
0000101 | 5 | 5 | Enquiry |
0000110 | 6 | 6 | Acknowledgment |
0000111 | 7 | 7 | Bell |
0001000 | 8 | 8 | Backspace |
0001001 | 9 | 9 | Horizontal Tab |
0001010 | 10 | 0A | Line feed |
0001011 | 11 | 0B | Vertical Tab |
0001100 | 12 | 0C | Form feed |
0001101 | 13 | 0D | Carriage return |
0001110 | 14 | 0E | Shift Out |
0001111 | 15 | 0F | Shift In |
0010000 | 16 | 10 | Data Link Escape |
0010001 | 17 | 11 | Device Control 1 |
0010010 | 18 | 12 | Device Control 2 |
0010011 | 19 | 13 | Device Control 3 |
0010100 | 20 | 14 | Device Control 4 |
0010101 | 21 | 15 | Negative Acknowledgement |
0010110 | 22 | 16 | Synchronous idle |
0010111 | 23 | 17 | End of Transmission Block |
0011000 | 24 | 18 | Cancel |
0011001 | 25 | 19 | End of Medium |
0011010 | 26 | 1A | Substitute |
0011011 | 27 | 1B | Escape |
0011100 | 28 | 1C | File Separator |
0011101 | 29 | 1D | Group Separator |
0011110 | 30 | 1E | Record Separator |
0011111 | 31 | 1F | Unit Separator |
0100000 | 32 | 20 | Space |
0100001 | 33 | 21 | ! |
0100010 | 34 | 22 | " |
0100011 | 35 | 23 | # |
0100100 | 36 | 24 | $ |
0100101 | 37 | 25 | % |
0100110 | 38 | 26 | & |
0100111 | 39 | 27 | ' |
0101000 | 40 | 28 | ( |
0101001 | 41 | 29 | ) |
0101010 | 42 | 2A | * |
0101011 | 43 | 2B | + |
0101100 | 44 | 2C | , |
0101101 | 45 | 2D | - |
0101110 | 46 | 2E | . |
0101111 | 47 | 2F | / |
0110000 | 48 | 30 | 0 |
0110001 | 49 | 31 | 1 |
0110010 | 50 | 32 | 2 |
0110011 | 51 | 33 | 3 |
0110100 | 52 | 34 | 4 |
0110101 | 53 | 35 | 5 |
0110110 | 54 | 36 | 6 |
0110111 | 55 | 37 | 7 |
0111000 | 56 | 38 | 8 |
0111001 | 57 | 39 | 9 |
0111010 | 58 | 3A | : |
0111011 | 59 | 3B | ; |
0111100 | 60 | 3C | < |
0111101 | 61 | 3D | = |
0111110 | 62 | 3E | > |
0111111 | 63 | 3F | ? |
1000000 | 64 | 40 | @ |
1000001 | 65 | 41 | A |
1000010 | 66 | 42 | B |
1000011 | 67 | 43 | C |
1000100 | 68 | 44 | D |
1000101 | 69 | 45 | E |
1000110 | 70 | 46 | F |
1000111 | 71 | 47 | G |
1001000 | 72 | 48 | H |
1001001 | 73 | 49 | I |
1001010 | 74 | 4A | J |
1001011 | 75 | 4B | K |
1001100 | 76 | 4C | L |
1001101 | 77 | 4D | M |
1001110 | 78 | 4E | N |
1001111 | 79 | 4F | O |
1010000 | 80 | 50 | P |
1010001 | 81 | 51 | Q |
1010010 | 82 | 52 | R |
1010011 | 83 | 53 | S |
1010100 | 84 | 54 | T |
1010101 | 85 | 55 | U |
1010110 | 86 | 56 | V |
1010111 | 87 | 57 | W |
1011000 | 88 | 58 | X |
1011001 | 89 | 59 | Y |
1011010 | 90 | 5A | Z |
1011011 | 91 | 5B | [ |
1011100 | 92 | 5C | \ |
1011101 | 93 | 5D | ] |
1011110 | 94 | 5E | ^ |
1011111 | 95 | 5F | _ |
1100000 | 96 | 60 | ` |
1100001 | 97 | 61 | a |
1100010 | 98 | 62 | b |
1100011 | 99 | 63 | c |
1100100 | 100 | 64 | d |
1100101 | 101 | 65 | e |
1100110 | 102 | 66 | f |
1100111 | 103 | 67 | g |
1101000 | 104 | 68 | h |
1101001 | 105 | 69 | i |
1101010 | 106 | 6A | j |
1101011 | 107 | 6B | k |
1101100 | 108 | 6C | l |
1101101 | 109 | 6D | m |
1101110 | 110 | 6E | n |
1101111 | 111 | 6F | o |
1110000 | 112 | 70 | p |
1110001 | 113 | 71 | q |
1110010 | 114 | 72 | r |
1110011 | 115 | 73 | s |
1110100 | 116 | 74 | t |
1110101 | 117 | 75 | u |
1110110 | 118 | 76 | v |
1110111 | 119 | 77 | w |
1111000 | 120 | 78 | x |
1111001 | 121 | 79 | y |
1111010 | 122 | 7A | z |
1111011 | 123 | 7B | { |
1111100 | 124 | 7C | | |
1111101 | 125 | 7D | } |
1111110 | 126 | 7E | ~ |
1111111 | 127 | 7F | Delete |
2-2. EUC-KR
위에 아스키 코드표를 보면 알 수 있다시피 아스키코드로 표현할 수 있는 언어는 영어뿐이라는 단점이 있다. 한글을 사용하는 한국에서는 아스키코드가 아닌 다른 인코딩 방식이 필요하다. 그 인코딩 방식이 바로 EUC-KR이다.
그러나 이 방식 역시 한글 전체를 표현하기에는 데이터의 양이 부족하다.
3. Unicode (UTF, UCS)
유니코드는 EUC-KR보다 다양한 한글을 포함하며 더 많은 문자를 표현할 수 있는 문자 집합으로 현대 문자를 표현할 때 가장 많이 사용되는 표준 문자이다.
유니코드는 두 가지 매칭 방식으로 구분된다. UTF(Unicode Transformation Format) 인코딩과 UCS(Universal Coded Character) 인코딩이 바로 그 방식들이다.
UTF 인코딩은 또 그 안에서 여러 방법으로 구분된다.
UTF-1, UTF-7, UTF-8, UTF-EBCDIC, UTF-16, UTF-32로 구분되는데 그 중에서 가장 대중적인 방벙이 UTF-8이다.
UTF-8은 유니코드 한 문자 당 1~4byte를 사용한다.