검수요청.png검수요청.png

"문자 (프로그래밍)"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글
 
(사용자 2명의 중간 판 4개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''문자'''(文字, character)는 [[프로그래밍]] 분야에서 [[컴퓨터]]와 기계 기반 [[전기통신]] 용어로서, [[자연어]] 기록 형태의 알파벳이나 음절 문자와 같은 상징 따위와 일치하는 정보의 단위이다.<ref>〈[https://ko.wikipedia.org/wiki/%EB%AC%B8%EC%9E%90_(%EC%BB%B4%ED%93%A8%ED%8C%85) 문자 (컴퓨팅)]〉, 《위키백과》 </ref> 흔히 '''[[char]]'''이라고 쓴다.
+
'''문자'''(文字, character)는 [[프로그래밍]] 분야에서 [[컴퓨터]]와 기계 기반 [[전기통신]] 용어로서, [[자연어]] 기록 형태의 알파벳이나 음절 문자와 같은 상징 따위와 일치하는 정보의 단위이다.<ref>〈[https://ko.wikipedia.org/wiki/%EB%AC%B8%EC%9E%90_(%EC%BB%B4%ED%93%A8%ED%8C%85) 문자 (컴퓨팅)]〉, 《위키백과》 </ref> 흔히 '''[[char]]'''이라고 쓴다. 문자는 프로그래밍 분야에서 컴퓨터에게 명령을 내릴 수 있도록 도와준다.<ref>〈[https://terms.naver.com/entry.naver?docId=3607517&cid=58598&categoryId=59316 프로그래밍 언어]〉, 《네이버 지식백과》</ref>
 
 
==개요==
 
프로그래밍 분야에서 '문자'는 [[컴퓨터]]에게 명령을 내릴 수 있도록 도와주는 도구를 말한다.<ref>〈[https://terms.naver.com/entry.naver?docId=3607517&cid=58598&categoryId=59316 프로그래밍 언어]〉, 《네이버 지식백과》</ref>
 
  
 
==등장배경==
 
==등장배경==
문자는 [[수학]]에서 등장하였으며 [[쿠르트 괴델]]은 불완전성 정리를 증명하는 과정 중에 [[알고리즘]]을 추상화시킨 [[원시재귀함수]](primitive recursive function) 개념을 만들고, 이를 이용하여 증명에 성공하였는데, 수학적으로 본다면 이것이 최초의 프로그래밍 언어라 볼 수 있다. (굳이 따지자면 함수형 언어라 할 수 있다) 그리고, 그 후에 컴퓨터의 아버지라 불리는 [[튜링]]은 불완전성 정리를 보고 자신의 방식도 될 것 같다고 생각하며 연구를 하는데, 여기서 이 원시 재귀 함수와 동치인 [[튜링머신]]을 발표하고 이 튜링머신을 이용하여 불완전성 정리를 다시 한번 증명해 보인다. 이는 어떤 체계를 통해서 이 체계의 모순성을 증명할 방법은 없다는 것과 동치이다.
+
문자는 [[수학]]에서 등장하였으며 [[쿠르트 괴델]](Kurt Gödel)은 불완전성 정리를 증명하는 과정 중에 [[알고리즘]]을 추상화시킨 [[원시재귀함수]](primitive recursive function) 개념을 만들고, 이를 이용하여 증명에 성공했다. 수학적으로 본다면 이것이 최초의 프로그래밍 언어라고 볼 수 있다. 굳이 따지자면 함수형 언어라고 할 수 있다. 그리고 그 후에 컴퓨터의 아버지라 불리는 [[앨런 튜링]](Alan Turing)은 불완전성 정리를 보고 자신의 방식도 될 것 같다고 생각하며 연구를 하는데, 여기서 이 원시 재귀 함수와 동치인 [[튜링머신]]을 발표하고 이 튜링머신을 이용하여 불완전성 정리를 다시 한번 증명해 보인다. 이는 어떤 체계를 통해서 이 체계의 모순성을 증명할 방법은 없다는 것과 동치이다. 계산 가능성 이론(Computability Theory)이라는 수학의 분야가 생기면서 기존의 원시재귀함수를 확장한 람다 미적분(Lambda calculus)과 무제한 등록기(Unlimited register machine : URM), 프로그래밍(While-programming), SKI 등등 알고리즘을 표현하기 위한 여러 가지 체계들이 등장한다.<ref> 〈[https://namu.wiki/w/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%96%B8%EC%96%B4 프로그래밍 언어]〉, 《나무위키》 </ref>
 
 
*계산 가능성 이론(Computability Theory)이라는 수학의 분야가 생기면서 기존의 원시재귀함수를 확장한 람다 미적분(Lambda calculus)과 무제한 등록기(Unlimited register machine : URM), 프로그래밍(While-programming), SKI 등등 알고리즘을 표현하기 위한 여러 가지 체계들이 등장한다.<ref> 〈[https://namu.wiki/w/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%96%B8%EC%96%B4 프로그래밍 언어]〉, 《나무위키》 </ref>
 
  
 
==종류==
 
==종류==
다음은 프로그래밍 문자 종류이다.
 
 
 
===변환===
 
===변환===
 
*%d : 10진수로 출력하는 정수형이다.
 
*%d : 10진수로 출력하는 정수형이다.
25번째 줄: 18번째 줄:
  
 
===널===
 
===널===
아무것도 없음을 값으로 표현한 문자(빈 값)를 표현한 것이다.<ref name="널"> 〈[http://www.ktword.co.kr/test/view/view.php?m_temp1=5946 null, NULL, Null  널 문자]〉, 《정보통신기술용어해설》 </ref>
+
[[널]](null)은 아무것도 없음을 값으로 표현한 문자(빈 값)를 표현한 것이다. 프로그램(함수 등)이 자료 검색 후 해당 값을 못 찾았을 때, 메모리 할당 실패 때 등의 경우에 넘겨주는 반환 값을 말한다. 널 문자는, 공백 문자 ""(empty) 또는 " "(space, 아스키 32)와는 다르게 취급한다. '=='와 같은 비교 연산 때, 널을 공백 ""(empty)과 같은 것으로 간주하기도 한다.<ref name="널"> 〈[http://www.ktword.co.kr/test/view/view.php?m_temp1=5946 null, NULL, Null  널 문자]〉, 《정보통신기술용어해설》 </ref>
  
====프로그래밍====
+
===특수===
프로그램(함수 등)이 자료 검색 후 해당 값을 못 찾았을 때, 메모리 할당 실패 때 등의 경우에, 넘겨주는(반환) 값을 말한다.
+
다음은 프로그래밍에서 쓰이는 특수문자이다.  
*유의점 : 널 문자(null)는, 공백 문자 ""(empty) 또는 " "(space, 아스키(ASCII) 32)와는 다르게 취급한다.
 
*`==`과 같은 비교 연산 때, 널(null)을 공백 ""(empty)과 같은 것으로 간주하기도 한다.<ref name="널"></ref>
 
  
===특수===
+
*' : 그레이브
다음은 특수기호 : 한글(영어단어)을 보여주는 거다. (한글 뜻이 없는 것은 발음을 붙였다.)
+
*~ : 물결표시
*' : 그레이브(Grave)
+
*! : 느낌표 표시
*~ : 물결표시(Tilde)
+
*@ : 골뱅이
*! : 느낌표(Exclamation)표시(Mark)
+
* # : , 우물정
*@ : 골뱅이(At)
+
*$ : 달러
* # : , 우물정(Number , Sharp)
+
*% : 퍼센트
*$ : 달러(Dollar)
+
*^ : 캐럿
*% : 퍼센트(Percnet)
+
*& : 엠퍼센드
*^ : 캐럿(Caret)
+
* * : 별표
*& : 엠퍼센드(Ampersand)
+
*- : 마이너스
* * : 별표(Asterisk)
+
*_ : 밑줄
*- : 마이너스(Hyphen, Dash)
+
*= : 이꼬르
*_ : 밑줄(Underscore, Low dash)
+
*" : 큰 따옴표
*= : 이꼬르(Equals)
+
*' : 작은 따옴표
*" : 큰 따옴표(Quotation)
+
* : : 콜론
*' : 작은 따옴표(Apostrophe)
+
* ; : 세미콜론
* : : 콜론(Colon)
+
*. : 점, 마침표
* ; : 세미콜론(Semicolon)
+
*? : 물음표
*. : 점, 마침표(Period, Dot)
+
*/ : 슬래쉬
*? : 물음표(Question)
+
*\ : 백슬래쉬
*/ : 슬래쉬(Slash)
+
*() : 소괄호
*수직바(Vertical bar)
+
*{} : 중괄호
*\ : 백슬래쉬(Backslash)
+
*[] : 대괄호
*() : 소괄호(Parenthesis)
+
*<> : 꺽쇠 괄호<ref> inyong_pang, 〈[https://velog.io/@inyong_pang/Programming-%ED%8A%B9%EC%88%98-%EB%AC%B8%EC%9E%90-%EC%9A%A9%EC%96%B4-%EC%A0%95%EB%A6%AC (Programming) 특수 문자 용어 정리]〉, 《벨로그》, 2020-08-03 </ref>
*{} : 중괄호(Brace)
 
*[] : 대괄호(Bracket)
 
*<> : 꺽쇠 괄호(Angle Bracket)등이 특수 문자다.<ref> inyong_pang, 〈[https://velog.io/@inyong_pang/Programming-%ED%8A%B9%EC%88%98-%EB%AC%B8%EC%9E%90-%EC%9A%A9%EC%96%B4-%EC%A0%95%EB%A6%AC (Programming) 특수 문자 용어 정리]〉, 《벨로그》, 2020-08-03 </ref>
 
  
 
===집합===
 
===집합===
비주얼 스튜디오(Visual Studio)에서는 프로젝트 속성 메뉴에 문자 집합이란 항목이 있다. 옵션은 크게 세 가지 설정 안 함(Not Set), [[멀티바이트]] 문자 집합 사용(Use Multi-Byte Character Set), [[유니코드]] 문자 집합 사용(Use Unicode Character Set)가 있다. 컴퓨터에서는 데이터를 처리하기 위해 2진법을 쓴다. 즉 컴퓨터에서는 숫자를 처리할 수는 있지만, 문자는 기본적으로 처리가 불가능해서 문자를 처리하기 위해 문자 집합(Character Set)이라는 것을 사용한다. 이 중에서 대표 코드는 [[아스키 코드]]이고 아스키코드는 이름 그대로 미국 표준 문자 집합이기 때문에 해당 문자 집합에는 전 세계 언어를 표현하기 위한 약속이 되어 있지 않다. 그리하여 만들어진 문자 집합이 바로 유니코드(UNICODE)이다. 유니코드는 전 세계 모든 문자를 컴퓨터에서 일관되게 표현하고 처리하기 위한 국제 표준이다.
+
[[비주얼 스튜디오]](Visual Studio)에서는 프로젝트 속성 메뉴에 문자 집합이란 항목이 있다. 옵션은 크게 세 가지 설정 안 함(Not Set), [[멀티바이트]] 문자 집합 사용(Use Multi-Byte Character Set), [[유니코드]] 문자 집합 사용(Use Unicode Character Set)가 있다. 컴퓨터에서는 데이터를 처리하기 위해 2진법을 쓴다. 즉 컴퓨터에서는 숫자를 처리할 수는 있지만, 문자는 기본적으로 처리가 불가능해서 문자를 처리하기 위해 문자 집합(Character Set)이라는 것을 사용한다. 이 중에서 대표 코드는 [[아스키 코드]]이고 아스키코드는 이름 그대로 미국 표준 문자 집합이기 때문에 해당 문자 집합에는 전 세계 언어를 표현하기 위한 약속이 되어 있지 않다. 그리하여 만들어진 문자 집합이 바로 유니코드(UNICODE)이다. 유니코드는 전 세계 모든 문자를 컴퓨터에서 일관되게 표현하고 처리하기 위한 국제 표준이다.
*아스키코드 : 문자 하나를 표현하기 위해 메모리 1byte를 필요하다.
 
*유니코드 : 문자 하나를 표현하기 위해 최소 2byte를 필요하다.
 
이러한 문자 집합들은 크게 3가지로 나눈다.<ref name="집합"> jrich, 〈[https://jrich.tistory.com/1 Visual Studio 문자 집합 정리]〉, 《티스토리》, 2015-03-04 </ref>
 
  
====SBCS====
+
*'''아스키코드''' : 문자 하나를 표현하기 위해 메모리 1byte를 필요로 한다.
싱글 바이트 케릭터 집합(SBCS : Single Byte Character Set) : 문자 하나를 표현 하는 데 있어 1바이트를 사용하는 방식이고 대표적인 문자 집합은 아스키코드다.<ref name="집합"></ref>
+
*'''유니코드''' : 문자 하나를 표현하기 위해 최소 2byte를 필요로 한다. 이러한 문자 집합들은 크게 3가지로 나눈다.<ref name="집합"> jrich, 〈[https://jrich.tistory.com/1 Visual Studio 문자 집합 정리]〉, 《티스토리》, 2015-03-04 </ref>
 
+
*'''싱글바이트 캐릭터 집합'''(SBCS : Single Byte Character Set) : 문자 하나를 표현하는 데 있어 1바이트를 사용하는 방식이고, 대표적인 문자 집합은 아스키코드다.<ref name="집합"></ref>
====MBCS====
+
*'''멀티바이트 캐릭터 집합'''(MBCS : Multi Byte Character Set) : 문자 하나를 표현하는 데 있어 다양한 바이트 수를 사용하는 방식이고, 대표적인 문자 집합은 유니코드이다.<ref name="집합"></ref>
멀티 바이트 케릭터 집합(MBCS : Multi Byte Character Set) : 문자 하나를 표현 하는 데 있어 다양한 바이트 수를 사용하는 방식이고 대표적인 문자 집합은 유니코드이다.<ref name="집합"></ref>
+
*'''측면 바이트 캐릭터 집합'''(WBCS : Wide Byte Character Set) : 문자 하나를 표현하는 데 있어 2바이트를 사용하는 방식이고, 아스키코드와 유니코드를 혼용하여 사용할 수 있는 방식이다.<ref name="집합"></ref>
 
 
====WBCS====
 
측면 바이트 케릭터 집합(WBCS : Wide Byte Character Set) : 문자 하나를 표현 하는 데 있어 2바이트를 사용하는 방식이고 아스키코드와 유니코드를 혼용하여 사용할 수 있는 방식인 거다.<ref name="집합"></ref>
 
  
 
==코드==
 
==코드==
문자코드는 아스키와 유니코드가 있지만여기서는 퓨니코드와 정보 교환용 ISO 표준 부호를 다룬다.
 
 
 
===퓨니코드===
 
===퓨니코드===
애플리케이션 다국어 도메인 이름(IDNA: Internationalized Domain Names in Application)의 기반하에 다국어 도메인이 아스키(ASCII)로 변환(encoding)된 구문. 국제 인터넷 표준 [[RFC 3492]]에 정의되어 있다. 다국어 문자셋으로부터 온 코드들을 기본적인 문자열(영숫자, 하이픈)들로 유일하게 표현한 것이다. IDNA는 다국어 도메인을 처리하기 위한 작동 원리에 의해 인터넷 사용자가 입력한 다국어 도메인 질의를 클라이언트단에서 아스키 기반의 퓨니코드 형태로 변환(xn--로 시작하는 문자열로 변환)하여 네임서버에 전송하며, 네임서버는 퓨니코드 형태의 영역 데이터를 운영한다.<ref>〈[https://terms.naver.com/entry.naver?docId=864907&categoryId=42346&cid=42346&tkFrom=tlist&tkListId=741&tkTocId=6223&tkSort= 퓨니코드]〉, 《네이버 지식백과》 </ref>
+
[[퓨니코드]]는 애플리케이션 다국어 도메인 이름(IDNA: Internationalized Domain Names in Application)의 기반하에 다국어 도메인이 아스키로 변환(encoding)된 구문이다. 국제 인터넷 표준 [[RFC 3492]]에 정의되어 있다. 다국어 문자셋으로부터 온 코드들을 기본적인 문자열(영숫자, 하이픈)들로 유일하게 표현한 것이다. 애플리케이션 다국어 도메인 이름은 다국어 도메인을 처리하기 위한 작동 원리에 의해 인터넷 사용자가 입력한 다국어 도메인 질의를 클라이언트단에서 아스키 기반의 퓨니코드 형태로 변환(xn--로 시작하는 문자열로 변환)하여 네임서버에 전송하며, 네임서버는 퓨니코드 형태의 영역 데이터를 운영한다.<ref>〈[https://terms.naver.com/entry.naver?docId=864907&categoryId=42346&cid=42346&tkFrom=tlist&tkListId=741&tkTocId=6223&tkSort= 퓨니코드]〉, 《네이버 지식백과》 </ref>
  
 
===정보 교환용 ISO 표준 부호===
 
===정보 교환용 ISO 표준 부호===
정보 교환용 ISO 표준 부호(ISO standard code for information interchange, ISO code , 情報交換用-標準符號) : 국제표준화기구(ISO)가 ISO 646에 의해 국제 표준으로 규정한 ‘정보 교환을 위한 7비트 문자 집합(Seven-Bit Character Set for Information Interchange)’으로, 정보 처리 시스템이나 데이터 통신 관련 기기 상호 간의 정보 교환에 사용되는 부호. 보통 ISO 부호라고 한다. ISO 부호는 7비트의 부호화된 문자(패리티 비트를 포함하면 8비트)로 구성되는 표준 문자 집합으로 하위 4비트 b4, b3, b2, b1을 행 방향으로, 상위 3비트 b7, b6, b5를 열 방향으로 배열하고, 128개의 문자나 기호에 대응하도록 배치되어 있다.<ref>〈[https://terms.naver.com/entry.naver?docId=853993&categoryId=42346&cid=42346&tkFrom=tlist&tkListId=741&tkTocId=6218&tkSort= 정보 교환용 ISO 표준 부호]〉, 《네이버 지식백과》 </ref>
+
[[정보 교환용 ISO 표준 부호]](ISO standard code for information interchange)는 [[국제표준화기구]](ISO)가 ISO 646에 의해 국제 표준으로 규정한 '정보 교환을 위한 7비트 문자 집합(Seven-Bit Character Set for Information Interchange)'으로, 정보 처리 시스템이나 데이터 통신 관련 기기 상호 간의 정보 교환에 사용되는 부호이다. 보통 ISO 부호라고 한다. ISO 부호는 7비트의 부호화된 문자(패리티 비트를 포함하면 8비트)로 구성되는 표준 문자 집합으로 하위 4비트 b4, b3, b2, b1을 행 방향으로, 상위 3비트 b7, b6, b5를 열 방향으로 배열하고, 128개의 문자나 기호에 대응하도록 배치되어 있다.<ref>〈[https://terms.naver.com/entry.naver?docId=853993&categoryId=42346&cid=42346&tkFrom=tlist&tkListId=741&tkTocId=6218&tkSort= 정보 교환용 ISO 표준 부호]〉, 《네이버 지식백과》 </ref>
 
 
==구분==
 
어떤 문자 인지 구분하는 함수가 많이 쓰이고 있다.
 
*int isalpha(int c) : 주어진 문자가 알파벳 인지 검사한다.(A-Z, a-z)
 
*int isalnum(int c) : 주어진 문자가 알파벳 또는 숫자인지 검사한다.(A-Z, a-z. 0-9)
 
*int isdigit(int c) : 주어진 문자가 숫자인지 검사한다.(0-9)
 
*int isxdigit(int c) : 주어진 문자가 16 진수인지를 검사한다.(0-9, a-f, A-F)
 
*int iscntrl(int c) : 제어(control)문자인지를 검사한다.
 
*int isspace(int c) : FF('\f'), NL('\n'), CR('\r'), HT('\t'), VT('\v'), 공백문자(' ')등을 검사한다.
 
*int ispunct(int c) : 알파벳문자 혹은 공백문자가 아닌 출력가능한 문자인지 확인한다.
 
*int isgraph(int c) : 공백문자를 제외한 출력가능 문자인지 검사한다.
 
*int isprint(int c) : 공백문자를 포함한 출력가능한 문자인지 검사한다.
 
*int islower(int c) : 소문자인지 검사한다. a-z
 
*int isupper(int c) : 대문자인지 검사한다. A-Z
 
*int tolower(int c) : 입력된 문자를 대문자로 변경한다.
 
*int toupper(int c) : 입력된 문자를 소문자로 변경한다.
 
단. 같은 종류일 경우 0이 아닌 값을 같은 종류의 문자가 아닐 경우 0을 반환한다.<ref> 공간사랑, 〈[https://uple.net/222 문자의 종류를 알아내는 C 언어 함수들]〉, 《업넷》, 2011-03-09 </ref>
 
  
==교육==
+
==문자 구분 함수==
다음은 교육과 관련된 기사이다. 경상남도교육청 경남수학문화관 양산수학체험센터(관장 강영호)는 부산대학교 빅데이터 기반 금융·제조·수산·혁신 산업 수학센터와 함께 양산지역 중학생 11명을 대상으로 2021년 8월 11일부터 13일까지 3일간 「미래교육을 위한 중학생 인공지능 캠프」를 운영하였다.미래교육을 위한 중학생 인공지능 캠프는 파이썬을 이용하는 것이며 일정은 다음과 같다.
+
어떤 문자인지 구분하는 함수가 많이 쓰이고 있다. , 같은 종류일 경우 0이 아닌 값을 같은 종류의 문자가 아닐 경우 0을 반환한다.<ref> 공간사랑, 〈[https://uple.net/222 문자의 종류를 알아내는 C 언어 함수들]〉, 《업넷》, 2011-03-09 </ref>
*첫날 : 생활을 코딩하기다.
 
*둘째 날 : 문자 데이터를 활용하는 이 집 맛집 프로그램이다
 
*마지막 날 : 그림 데이터를 수학적으로 처리하는 내가 쓴 숫자를 알아보는 머신러닝이다.
 
캠프 기간 학생들은 파이썬을 이용하여 직접 프로그래밍 실습을 해 보고 자신만의 구구단 만들기, 경남 PC방 조사, 커피 자판기 원리 탐구, 맛집 탐구, 머신러닝 구현하기 등 생활 속의 빅데이터를 분석하여 수학적으로 처리하여 코팅해 보는 탐구 기회를 가졌다.
 
*이 프로그램에 참여한 학생들 : 파이썬을 배우면서 컴퓨터와 소통을 하려면 프로그래밍을 해야 한다는 것을 알게 되었다. 파이썬으로 데이터를 분석하여 맛집을 찾아보는 활동이 재미있었다며 긍정적인 반응을 보였다.
 
*강영호 경남수학문화관장 : 미래교육을 위한 인공지능 캠프를 통해 4차 산업혁명 시대를 살아갈 우리 학생들이 데이터를 활용한 프로그래밍을 통해 인공지능과 코딩에 대한 이해를 높이는 데 주목적이 있으며, 앞으로도 다양한 수학 기반의 미래 교육 관련 프로그램을 학생들에게 제공할 수 있도록 앞장서겠다고 밝힌 내용은 프로그래밍 문자 프로그램으로 다양한 활동을 하면서 앞으로 많은 교육으로 자리 잡을 거라는 기사 내용이다.<ref> 경남도민일보, 〈[https://www.idomin.com/news/articleView.html?idxno=770147 양산수학체험센터, 미래교육의 문 열다]〉, 《도메인》, 2021-08-18 </ref>
 
  
==중요성==
+
*'''int isalpha'''(int c) : 주어진 문자가 알파벳인지 검사한다.(A-Z, a-z)
문자 폰트의 중요성을 알려주는 내용이다. 프로그래밍할 때 화면 코드가 [[렌더링]] 되는 글자 폰트(글꼴)가 중요한가는 코딩할 때 글꼴은 최우선으로 신경 쓰는 요소는 아닐 수 있지만, 글꼴은 코딩에서 매우 중요하다.
+
*'''int isalnum'''(int c) : 주어진 문자가 알파벳 또는 숫자인지 검사한다.(A-Z, a-z. 0-9)
*[[불틴]](Bultin) : 좋은 글꼴은 가독성이 높고, 신경을 곤두세우고 읽지 않아도 되기 때문에 작업을 더 수월하고 편하게 만들어줄 수 있지만 나쁜 글꼴은 눈에 힘을 주게 만들고 작업을 느리게 만들 수 있다.
+
*'''int isdigit'''(int c) : 주어진 문자가 숫자인지 검사한다.(0-9)
[[아키텍쳐]]와 같이 형태는 기능을 따른다. 즉, 우리가 보는 글꼴은 특정한 목적을 위해 설계되었다. 예를 들어 마케팅과 광고에서 사용되는 글꼴은 주의를 끌고 흥미를 일으키도록 디자인되었다.
+
*'''int isxdigit'''(int c) : 주어진 문자가 16 진수인지를 검사한다.(0-9, a-f, A-F)
*애로우 타입(Arrow Type) 디자인 스튜디오를 운영하는 폰트 디자이너이자 개발자인 스티븐 닉슨(Stephen Nixon) : 디스플레이나 디지털 플레어에 최적화된 폰트가 있다고 했으며 코딩 글꼴은 눈길을 끌기 위해 고안된 마케팅·광고용 글꼴과 달리 쉽게 읽을 수 있도록 최적화된 작업용 글꼴이며 각 문자를 서로 구별하기 쉽고, 코드를 온종일 읽고 써야 하는 개발자들을 위해 눈의 피로를 줄이도록 디자인되었다. (닉슨)는 코딩에 사용되는 글꼴은 대개 폭이 고정되는 특징이 있다고 설명했다. 이는 [[타이포그래피]](편집 디자인에서 활자의 서체나 글자 배치 따위를 구성하고 표현하는 일)에서 [[글리프]](glyphs)라고 알려진 개별 문자, 숫자, 기호가 정확히 같은 양의 공간을 차지한다는 것을 의미한다. 이는 인쇄 및 디지털 텍스트에 대한 기본적인 텍스트 설정과 차이점을 보인다. 일반적으로 각 글리프는 '자연적' 너비가 있다. 'i''l'은 좁은 영역을 차지하는 반면, 'w''m'은 더 넓은 영역을 차지한다. 이는 역사, 관습, 문화에 의해 알려져 왔지만, 코딩에 사용되는 글꼴은 대체로 고정 폭 또는 [[단일 공간]](monospace) 을 사용한다. 닉슨은 부분적으로 초기 사용자 인터페이스 기술에서 파생된 것으로 보인다고 설명했다. 고정된 너비의 글꼴만 표시할 수 있었던 옛날 컴퓨터 모니터에서 자연적 너비를 가진 글꼴을 표현하는 모니터로 바뀐 지는 오래됐지만, 고정 너비가 코드를 더 질서 있게 보이게 하므로 여전히 관습적으로 내려오는 거다.
+
*'''int iscntrl'''(int c) : 제어(control) 문자인지를 검사한다.
*닉슨 : 코드에 관한 많은 것들은 그것을 읽을 수 있게 하고, 코드의 구조와 계층을 이해하기 위해 발명하는 것이라고 설명했고 만약 모든 글자가 화면에서 같은 양의 공간을 차지한다면, 만약 어떤 것이 네 글자라면, 그것은 항상 네 글자와 같은 너비를 가진다. 이는 (글자가) 더 자주 줄을 맞추게 만든다고 설명했다.
+
*'''int isspace'''(int c) : FF('\f'), NL('\n'), CR('\r'), HT('\t'), VT('\v'), 공백문자(' ')등을 검사한다.
글꼴 폭을 통일시키는 것은 하나의 디자인 결정이지만, 다른 곳에도 수많은 영향을 미친다고 덧붙였다. 문자 'm'과 같이 자연적으로 폭이 넓은 글리프를 표준 폭에 맞추면서 어떤 글꼴 크기에서도 읽을 수 있도록 세심하게 설계해야 하기 때문이다. 글꼴 폭을 고정하는 것은 각 글리프 설계에 영향을 미치며 [[구두점]]에도 영향을 미친다. 고정 너비 코딩 글꼴에서 구두점은 일반적인 너비보다 더 넓은 공간을 차지한다. 프로그래밍 언어에서 세미콜론이나 마침표와 같은 글리프는 중요한 논리적인 의미가 있다. 고정 폭 코딩 글꼴에서 이러한 문장 부호의 크기는 일반 글꼴에서보다 커지기 때문에 더 쉽게 볼 수 있다.
+
*'''int ispunct'''(int c) : 알파벳 문자 혹은 공백 문자가 아닌 출력 가능한 문자인지 확인한다.
*개발자, 수학자, 과학자 등 특정 계층에 많이 쓰이는 고정 폭 코딩 글꼴로는 [[프라그마타프로]](PragmataPro)가 있으며 프라그마타프로는 웹디자이너 [[파브리치오 시아비]](Farizio Schiavi)가 2010년 코드화를 위해 개발한 글꼴이다. 당시 개발자들이 사용할 수 있었던 고정 폭 글꼴은 모나코(Monaco), 쿠리어(Courier), 레터 고딕(Letter Gothic)으로 한정됐다.
+
*'''int isgraph'''(int c) : 공백 문자를 제외한 출력 가능 문자인지 검사한다.
*[[쿠리어]]와 [[모나코]]는 글자 폭이 너무 넓어서 개발자들이 과도한 수평 [[스크롤]]을 막기 위해선 작은 텍스트 크기를 사용해야 한다. 쿠리어는 대부분의 문자 끝에 발이 거의 없는 세리프(Serif) 글꼴이다. 코딩하는 동안 중복으로 보이게 하며, 시아비는 모든 종류의 글리프에 잘 맞는 디자인을 가지고, 문자 외에도 숫자, 아스키 코드(ASCII symbols)를 포함하며 각 기호가 다른 글리프의 모양과 일치하고 읽기 쉽도록 새로운 폰트를 설계했고 시아비에 따르면 프라그마타 프로는 처음엔 단일 공간 글꼴로 시작됐지만, 지금은 모듈식 공간 글꼴이다.
+
*'''int isprint'''(int c) : 공백 문자를 포함한 출력 가능한 문자인지 검사한다.
대부분은 고정 폭을 가지며 일부 글리프는 둘 이상의 표준 공간을 차지한다. '오른쪽 물결 화살표'와 같은 일부 기호는 표준 너비로 축약할 수 없기 때문이다. 프라그마타 프로는 현재 4만 개의 글리프를 가지고 있는 다른 언어들과 특수 문자를 포함해 수년간 글리프를 추가해왔다. 프라그마타 프로는 숫자 '1'과 소문자 'l', 대문자 'I'와 같은 글리프를 구별하기 쉽고, 9pt와 60pt 사이의 모든 글꼴 크기를 검토하고 각 글리프의 스타일과 같이 글꼴을 조정했다. 한편 [[판독성]](legibility)와 [[가독성]](readability)은 약간 차이점을 보인다. 코딩 글꼴은 판독성을 더 중요시하는 반면 일반적인 읽기에 사용되는 글꼴은 가독성을 중요시 한다.가독성은 단어 모양을 식별하고 인지하는 것에 가깝다. 글꼴이 거기에 있다는 것을 읽기 쉽고, 단지 그것을 읽을 뿐이지만, 반면 코딩 글꼴은 판독성을 우선시해야 한다고 했다. 이유는 어떤 문자든 해당 문자로 인지해야 하기 때문이다. 코딩에서 개발자들은 일반적인 읽기에서 흔히 볼 수 없는 단어를 많이 보기 때문에 예상되는 모양에 맞는 것보다는 코드를 쉽고 정확하게 읽을 수 있는 것이 중요하다고 하는 것은 프로그래밍 코딩 시 문자 폰트 크기 조정이 왜 중요하고 그것을 조정하는 방식에 대해서 설명하는 것이다.<ref> 이진영, 〈[https://www.mhns.co.kr/news/articleView.html?idxno=423756 코딩에서 "글자 폰트"가 왜 중요할까?]〉, 《코딩월드뉴스》, 2021-03-19 </ref>
+
*'''int islower'''(int c) : 소문자인지 검사한다. a-z
 +
*'''int isupper'''(int c) : 대문자인지 검사한다. A-Z
 +
*'''int tolower'''(int c) : 입력된 문자를 대문자로 변경한다.
 +
*'''int toupper'''(int c) : 입력된 문자를 소문자로 변경한다.
  
 
{{각주}}
 
{{각주}}
132번째 줄: 92번째 줄:
 
* jrich, 〈[https://jrich.tistory.com/1 Visual Studio 문자 집합 정리]〉, 《티스토리》, 2015-03-04
 
* jrich, 〈[https://jrich.tistory.com/1 Visual Studio 문자 집합 정리]〉, 《티스토리》, 2015-03-04
 
*  블로그(8109), 〈[https://clanguage.tistory.com/1 C 언어 변환문자 의미 자료형 (%d,%f,%e,%o,%x,%u,%g,%p,%c,%s)]〉, 《티스토리》, 2008-05-21
 
*  블로그(8109), 〈[https://clanguage.tistory.com/1 C 언어 변환문자 의미 자료형 (%d,%f,%e,%o,%x,%u,%g,%p,%c,%s)]〉, 《티스토리》, 2008-05-21
* 경남도민일보, 〈[https://www.idomin.com/news/articleView.html?idxno=770147 양산수학체험센터, 미래교육의 문 열다]〉, 《도메인》, 2021-08-18
 
* 이진영, 〈[https://www.mhns.co.kr/news/articleView.html?idxno=423756 코딩에서 "글자 폰트"가 왜 중요할까?]〉, 《코딩월드뉴스》, 2021-03-19
 
 
* 〈[https://terms.naver.com/entry.naver?docId=864907&categoryId=42346&cid=42346&tkFrom=tlist&tkListId=741&tkTocId=6223&tkSort= 퓨니코드]〉, 《네이버 지식백과》
 
* 〈[https://terms.naver.com/entry.naver?docId=864907&categoryId=42346&cid=42346&tkFrom=tlist&tkListId=741&tkTocId=6223&tkSort= 퓨니코드]〉, 《네이버 지식백과》
 
* 〈[https://terms.naver.com/entry.naver?docId=853993&categoryId=42346&cid=42346&tkFrom=tlist&tkListId=741&tkTocId=6218&tkSort= 정보 교환용 ISO 표준 부호]〉, 《네이버 지식백과》
 
* 〈[https://terms.naver.com/entry.naver?docId=853993&categoryId=42346&cid=42346&tkFrom=tlist&tkListId=741&tkTocId=6218&tkSort= 정보 교환용 ISO 표준 부호]〉, 《네이버 지식백과》

2021년 9월 13일 (월) 15:42 기준 최신판

문자(文字, character)는 프로그래밍 분야에서 컴퓨터와 기계 기반 전기통신 용어로서, 자연어 기록 형태의 알파벳이나 음절 문자와 같은 상징 따위와 일치하는 정보의 단위이다.[1] 흔히 char이라고 쓴다. 문자는 프로그래밍 분야에서 컴퓨터에게 명령을 내릴 수 있도록 도와준다.[2]

등장배경[편집]

문자는 수학에서 등장하였으며 쿠르트 괴델(Kurt Gödel)은 불완전성 정리를 증명하는 과정 중에 알고리즘을 추상화시킨 원시재귀함수(primitive recursive function) 개념을 만들고, 이를 이용하여 증명에 성공했다. 수학적으로 본다면 이것이 최초의 프로그래밍 언어라고 볼 수 있다. 굳이 따지자면 함수형 언어라고 할 수 있다. 그리고 그 후에 컴퓨터의 아버지라 불리는 앨런 튜링(Alan Turing)은 불완전성 정리를 보고 자신의 방식도 될 것 같다고 생각하며 연구를 하는데, 여기서 이 원시 재귀 함수와 동치인 튜링머신을 발표하고 이 튜링머신을 이용하여 불완전성 정리를 다시 한번 증명해 보인다. 이는 어떤 체계를 통해서 이 체계의 모순성을 증명할 방법은 없다는 것과 동치이다. 계산 가능성 이론(Computability Theory)이라는 수학의 분야가 생기면서 기존의 원시재귀함수를 확장한 람다 미적분(Lambda calculus)과 무제한 등록기(Unlimited register machine : URM), 프로그래밍(While-programming), SKI 등등 알고리즘을 표현하기 위한 여러 가지 체계들이 등장한다.[3]

종류[편집]

변환[편집]

  • %d : 10진수로 출력하는 정수형이다.
  • %f : 실수형이다.
  • %e : 지수형이다.
  • %o : 8진수로 출력한다.
  • %x : 16진수로 출력한다.
  • %u : 부호없는 10진수로 출력한다.
  • %g : 실수형으로 자동 출력한다.
  • %p : 포인터의 주소를 출력한다.
  • %c : 하나의 문자로 출력 문자형이다.
  • %s : 문자열을 출력한다.[4]

[편집]

(null)은 아무것도 없음을 값으로 표현한 문자(빈 값)를 표현한 것이다. 프로그램(함수 등)이 자료 검색 후 해당 값을 못 찾았을 때, 메모리 할당 실패 때 등의 경우에 넘겨주는 반환 값을 말한다. 널 문자는, 공백 문자 ""(empty) 또는 " "(space, 아스키 32)와는 다르게 취급한다. '=='와 같은 비교 연산 때, 널을 공백 ""(empty)과 같은 것으로 간주하기도 한다.[5]

특수[편집]

다음은 프로그래밍에서 쓰이는 특수문자이다.

  • ' : 그레이브
  • ~ : 물결표시
  • ! : 느낌표 표시
  • @ : 골뱅이
  • # : 샵, 우물정
  • $ : 달러
  • % : 퍼센트
  • ^ : 캐럿
  • & : 엠퍼센드
  • * : 별표
  • - : 마이너스
  • _ : 밑줄
  • = : 이꼬르
  • " : 큰 따옴표
  • ' : 작은 따옴표
  •  : : 콜론
  •  ; : 세미콜론
  • . : 점, 마침표
  • ? : 물음표
  • / : 슬래쉬
  • \ : 백슬래쉬
  • () : 소괄호
  • {} : 중괄호
  • [] : 대괄호
  • <> : 꺽쇠 괄호[6]

집합[편집]

비주얼 스튜디오(Visual Studio)에서는 프로젝트 속성 메뉴에 문자 집합이란 항목이 있다. 옵션은 크게 세 가지 설정 안 함(Not Set), 멀티바이트 문자 집합 사용(Use Multi-Byte Character Set), 유니코드 문자 집합 사용(Use Unicode Character Set)가 있다. 컴퓨터에서는 데이터를 처리하기 위해 2진법을 쓴다. 즉 컴퓨터에서는 숫자를 처리할 수는 있지만, 문자는 기본적으로 처리가 불가능해서 문자를 처리하기 위해 문자 집합(Character Set)이라는 것을 사용한다. 이 중에서 대표 코드는 아스키 코드이고 아스키코드는 이름 그대로 미국 표준 문자 집합이기 때문에 해당 문자 집합에는 전 세계 언어를 표현하기 위한 약속이 되어 있지 않다. 그리하여 만들어진 문자 집합이 바로 유니코드(UNICODE)이다. 유니코드는 전 세계 모든 문자를 컴퓨터에서 일관되게 표현하고 처리하기 위한 국제 표준이다.

  • 아스키코드 : 문자 하나를 표현하기 위해 메모리 1byte를 필요로 한다.
  • 유니코드 : 문자 하나를 표현하기 위해 최소 2byte를 필요로 한다. 이러한 문자 집합들은 크게 3가지로 나눈다.[7]
  • 싱글바이트 캐릭터 집합(SBCS : Single Byte Character Set) : 문자 하나를 표현하는 데 있어 1바이트를 사용하는 방식이고, 대표적인 문자 집합은 아스키코드다.[7]
  • 멀티바이트 캐릭터 집합(MBCS : Multi Byte Character Set) : 문자 하나를 표현하는 데 있어 다양한 바이트 수를 사용하는 방식이고, 대표적인 문자 집합은 유니코드이다.[7]
  • 측면 바이트 캐릭터 집합(WBCS : Wide Byte Character Set) : 문자 하나를 표현하는 데 있어 2바이트를 사용하는 방식이고, 아스키코드와 유니코드를 혼용하여 사용할 수 있는 방식이다.[7]

코드[편집]

퓨니코드[편집]

퓨니코드는 애플리케이션 다국어 도메인 이름(IDNA: Internationalized Domain Names in Application)의 기반하에 다국어 도메인이 아스키로 변환(encoding)된 구문이다. 국제 인터넷 표준 RFC 3492에 정의되어 있다. 다국어 문자셋으로부터 온 코드들을 기본적인 문자열(영숫자, 하이픈)들로 유일하게 표현한 것이다. 애플리케이션 다국어 도메인 이름은 다국어 도메인을 처리하기 위한 작동 원리에 의해 인터넷 사용자가 입력한 다국어 도메인 질의를 클라이언트단에서 아스키 기반의 퓨니코드 형태로 변환(xn--로 시작하는 문자열로 변환)하여 네임서버에 전송하며, 네임서버는 퓨니코드 형태의 영역 데이터를 운영한다.[8]

정보 교환용 ISO 표준 부호[편집]

정보 교환용 ISO 표준 부호(ISO standard code for information interchange)는 국제표준화기구(ISO)가 ISO 646에 의해 국제 표준으로 규정한 '정보 교환을 위한 7비트 문자 집합(Seven-Bit Character Set for Information Interchange)'으로, 정보 처리 시스템이나 데이터 통신 관련 기기 상호 간의 정보 교환에 사용되는 부호이다. 보통 ISO 부호라고 한다. ISO 부호는 7비트의 부호화된 문자(패리티 비트를 포함하면 8비트)로 구성되는 표준 문자 집합으로 하위 4비트 b4, b3, b2, b1을 행 방향으로, 상위 3비트 b7, b6, b5를 열 방향으로 배열하고, 128개의 문자나 기호에 대응하도록 배치되어 있다.[9]

문자 구분 함수[편집]

어떤 문자인지 구분하는 함수가 많이 쓰이고 있다. 단, 같은 종류일 경우 0이 아닌 값을 같은 종류의 문자가 아닐 경우 0을 반환한다.[10]

  • int isalpha(int c) : 주어진 문자가 알파벳인지 검사한다.(A-Z, a-z)
  • int isalnum(int c) : 주어진 문자가 알파벳 또는 숫자인지 검사한다.(A-Z, a-z. 0-9)
  • int isdigit(int c) : 주어진 문자가 숫자인지 검사한다.(0-9)
  • int isxdigit(int c) : 주어진 문자가 16 진수인지를 검사한다.(0-9, a-f, A-F)
  • int iscntrl(int c) : 제어(control) 문자인지를 검사한다.
  • int isspace(int c) : FF('\f'), NL('\n'), CR('\r'), HT('\t'), VT('\v'), 공백문자(' ')등을 검사한다.
  • int ispunct(int c) : 알파벳 문자 혹은 공백 문자가 아닌 출력 가능한 문자인지 확인한다.
  • int isgraph(int c) : 공백 문자를 제외한 출력 가능 문자인지 검사한다.
  • int isprint(int c) : 공백 문자를 포함한 출력 가능한 문자인지 검사한다.
  • int islower(int c) : 소문자인지 검사한다. a-z
  • int isupper(int c) : 대문자인지 검사한다. A-Z
  • int tolower(int c) : 입력된 문자를 대문자로 변경한다.
  • int toupper(int c) : 입력된 문자를 소문자로 변경한다.

각주[편집]

  1. 문자 (컴퓨팅)〉, 《위키백과》
  2. 프로그래밍 언어〉, 《네이버 지식백과》
  3. 프로그래밍 언어〉, 《나무위키》
  4. 블로그(8109), 〈C 언어 변환문자 의미 자료형 (%d,%f,%e,%o,%x,%u,%g,%p,%c,%s)〉, 《티스토리》, 2008-05-21
  5. null, NULL, Null 널 문자〉, 《정보통신기술용어해설》
  6. inyong_pang, 〈(Programming) 특수 문자 용어 정리〉, 《벨로그》, 2020-08-03
  7. 7.0 7.1 7.2 7.3 jrich, 〈Visual Studio 문자 집합 정리〉, 《티스토리》, 2015-03-04
  8. 퓨니코드〉, 《네이버 지식백과》
  9. 정보 교환용 ISO 표준 부호〉, 《네이버 지식백과》
  10. 공간사랑, 〈문자의 종류를 알아내는 C 언어 함수들〉, 《업넷》, 2011-03-09

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 문자 (프로그래밍) 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.