본문 바로가기
프로그래밍 일반

대소문자와 프로그래밍

by 이도현 2021. 7. 8.

한글에는 대소문자라는 구분이 없지만, 알파벳과 같은 서구권의 문자에는 대문자(큰글자)와 소문자(작은글자)라는 구분이 있다.

예를 들어, 영어의 경우 다음과 같이 큰 글자와 작은 글자의 구분이 있다.

대문자: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
소문자: a b c d e f g h i j k l m n o p q r s t u v w x y z

대문자를 표현하는 영어 표현이 여러가지 있지만, Capital letter라는 표현이 일생 생활에서 자주 사용된다면, 프로그래밍에서는 주로 uppercase라는 표현을 주로 사용한다.

소문자 역시 Small letter라는 표현이 있지만, 프로그래밍에서는 lowercase라는 표현을 주로 사용한다.

대문자를 뜻하는 uppercase와 소문자를 뜻하는 lowercase가 모두 case라는 접미어를 가지고 있기 때문에, 프로그래밍에서는 case라는 말의 의미가 '대소문자'와 관련된 것이라는 의미가 있다. 

 

우리가 일상생활에서는 A는 a와 같은 글자이므로 프로그래밍 과정에서도 무의식 중에 같은 것이라고 착각하게 되는 경우가 있다.

하지만 다음의 ASCII 표를 보자.

0000000 NUL 0100000 Space 1000000 @ 1100000 `
0000001 SOH (Start of Heading) 0100001 ! 1000001 A 1100001 a
0000010 STX (Start of Text) 0100010 1000010 B 1100010 b
0000011 ETX (End of Text) 0100011 # 1000011 C 1100011 c
0000100 EOT (End of Transmission) 0100100 $ 1000100 D 1100100 d
0000101 ENQ (Enquiry) 0100101 % 1000101 E 1100101 e
0000110 ACK (Acknowledge) 0100110 & 1000110 F 1100110 f
0000111 BEL (Bell) 0100111 1000111 G 1100111 g
0001000 BS (Backspace) 0101000 ( 1001000 H 1101000 h
0001001 HT (Horizontal Tabulation) 0101001 ) 1001001 I 1101001 i
0001010 LF (Line Feed) 0101010 * 1001010 J 1101010 j
0001011 VT (Vertical Tabulation) 0101011 + 1001011 K 1101011 k
0001100 FF (Form Feed) 0101100 , 1001100 L 1101100 l
0001101 CR (Carriage Return) 0101101 - 1001101 M 1101101 m
0001110 SO (Shift Out) 0101110 . 1001110 N 1101110 n
0001111 SI (Shift In) 0101111 / 1001111 O 1101111 o
0010000 DLE (Data Link Escape) 0110000 0 1010000 P 1110000 p
0010001 DC1 (Device Control 1) 0110001 1 1010001 Q 1110001 q
0010010 DC2 (Device Control 2) 0110010 2 1010010 R 1110010 r
0010011 DC3 (Device Control 3) 0110011 3 1010011 S 1110011 s
0010100 DC4 (Device Control 4) 0110100 4 1010100 T 1110100 t
0010101 NAK (Negative Acknowledge) 0110101 5 1010101 U 1110101 u
0010110 SYN (Synchronous Idle) 0110110 6 1010110 V 1110110 v
0010111 ETB (End of Transmission Block) 0110111 7 1010111 W 1110111 w
0011000 CAN (Cancel) 0111000 8 1011000 X 1111000 x
0011001 EM (End of Medium) 0111001 9 1011001 Y 1111001 y
0011010 SUB (Substitute) 0111010 : 1011010 Z 1111010 z
0011011 ESC (Escape) 0111011 ; 1011011 [ 1111011 {
0011100 FS (File Separator) 0111100 < 1011100 \ 1111100 |
0011101 GS (Group Separator) 0111101 = 1011101 ] 1111101 }
0011110 RS (Record Separator) 0111110 > 1011110 ^ 1111110 ~
0011111 US (Unit Separator) 0111111 ? 1011111 _ 1111111 DEL

A는 1000001, a는 1100001에 할당되어 있다.

그러면 당연히 프로그래밍 중에는 A와 a는 다른 문자라고 보아야 할것이다. 

 

이렇게 A와 a를 다른 문자로 보는 경우를 case-sensitive(대소문자에 민감한; 대소문자에 구분이 있는) 라고 한다.

 

하지만 사람들이 A와 a를 같은 문자로 판단해 발생하는 오류를 줄이기 위해 A와 a를 같은 값으로 인식시키도록 처리되어 있는 경우를 case-insensitive(대소문자에 민감하지 않은; 대소문자에 구분이 없는) 라고 한다. 

 

 

프로그래밍에서 이 부분은 상당히 민감한 문제이다. 

프로그래밍 언어의 차이에 따라 단지 대소문자의 차이인데 같은 변수나 함수로 인식하는 경우가 다른 경우가 있다. 

 

카멜케이스

케밥케이스

스네이크케이스