프로그래밍

나도 공부하고 너도 공부하는 C/C++ (3)-1

주말에는 안 쓴다.. 피곤하고 게임해야 되니까..

일단 저번 댓글에서 수정사항 말씀해준 분은 감사감사 모르는게 나도 많음

그리고 때로는 정확하게 이런 의미가 아닐 수 있지만, 설명상 편의를 위해 개소리를 할 때도 있을테니....

그런 부분들은 대충 넘어가주었으면 좋겠읍니다..

 

이번에는 예고한 대로 자료형에 대해서 이야기할 건데, 좀 길어질거라 여러 편 나누어서 할 거임..

 

 

3. 자료형

(1) 자료형이란?

저번에도 언급했다시피, 컴퓨터는 그저 2진수의 연속을 저장하고 연산하기 때문에

그 2진수의 속성이 어떤 것인지를 구별할 수 있도록 무언가의 약속이 필요해.

그래서 저장된 내용이 어떤 속성을 가지느냐를 구별하는 것이 바로 자료형이야.

 

쉽게 말해, 사전으로 치자면 종이도 같고 잉크를 쓴다는 점은 모든 사전이 같을거야.

하지만 그 종이에 어떤 내용을 잉크로 쓰느냐에 따라 영어사전이 되기도 하고 국어사전이 되기도 하지.

그렇듯, 그 안에 내용이 무엇인지를 설명하는 무언가를 확실히 하는 것이라 생각하면 돼.

영어 사전이라고 써있는데 막상 안에 우리나라 국어 사전에 대한 내용만 잔뜩 있다면 그건 이상한 사전이잖아?

 

컴퓨터 메모리는 크게 2가지 정보를 가져

그 공간의 위치값, 그리고 그 공간에 실제로 저장되는 값.

000000000(9개임)이라는 공간이 있다고 하자.

그럼 그 공간의 3번째 위치의 값을 알고 싶다면 그 공간의 3번째 위치는 어디인가? 하는 문제가 생기게 돼.

우리가 생각할 때는 당연히 왼쪽에서 오른쪽으로 문장을 읽고 순서대로 수를 카운팅하니까

123456789순으로 0을 셀거야.

그래서 우리들 기준으로 3번째 위치값이라 하면

왼쪽에서부터 3번째 위치의 위치값인 0을 생각하겠지?

 

하지만 그것은 정확하진 않아.

때로는 오른쪽에서 왼쪽으로 세는 사람이 있을 수도 있고 하니까..

그래서 아예 저 공간의 위치값을 확정하고 가는거야.

마치 현실세계에서 어떤 건물에 위치를 알려고 주소를 찾는 것처럼.

(그 건물에 고유의 주소를 부여하잖아? 서울시청의 위치가 주소별 표기에 따라 전부 다르다면 서울시청을 어떻게 찾아가겠어)

 

그것이 우리가 일반적으로 이야기 하는 포인터 개념(나중에 계속 괴롭힐 것이지만.. 지금은 넘어가자)이라고 생각하면 돼

 

그럼 자료형은 어떻게 확정하느냐?

우선 자료형의 종류를 담는 내용이 필요할거야. 이 자료형이 어떤 값으로써 기능하는지.

대표적으로 4가지가 있는데, char(character : 문자), int(integer : 정수), float(floating number : 실수), bool(boolean : 부울 변수)가 있어.

이것들을 구분하는 이유는 가장 쉽게 말해

이 데이터를 표현하기 위해 사용하는 데이터 공간의 길이가 다르거나, 해석이 다르기 때문이야.

 

문자 데이터를 표현하기 위한 최대 길이가 예를 들어 128개면 된다고 생각해보자.

그런데 이 문자 데이터를 표현한답시고 1024개의 데이터 공간을 준다면 1024-128개만큼의 공간이 낭비되겠지?

그러니 모든 데이터를 하나의 길이로 통합하지 않고 구별을 해두는 거야.

 

int와 float은 같은 데이터 공간(4바이트)를 사용해.

하지만 둘은 완전히 다르게 해석할 수 있어.

왜냐면 int는 저장할 때 소수점 이하 숫자들을 저장할 필요가 없지만(정수기 때문에. 정수는 소수를 갖지 않는 수의 집합)

float은 저장할 때 소수점 이하 숫자들을 저장해야 하거든.

그래서 구글링해보면 같은 4바이트를 사용하지만, 실제로 표현가능한 수의 범위가 달라.

소수점 이하 숫자를 저장하려다 보니 공간이 부족해서..

 

그렇듯 다양한 이유에 의해, 필요에 의해 자료형은 구분되어 사용되고

때에 따라서는 자료형을 변환하거나 하는 등으로 사용하는 경우가 생겨.

아마 이 변환도 초보자에게 대단히 빡치게 하는 것이지만,

천천히 배워가보자.

 

요약하자면, 010101과 같은 무의미한 2진수 데이터에 의미를 부여하기 위한 속성이 바로 자료형이야.

 

(2) char

프로그래밍을 하면 때로는 사람이 읽을 수 있는 문자들로 정보를 변환하거나, 혹은 시각적으로 보여줘야할 때가 있어.

"1+1의 결과는 2입니다."

"자룡님의 나이는 21살입니다."

처럼 검색을 하거나, 연산을 하거나 하면 필연적으로 문자를 출력할 수 밖에 없지.

또한 어떤 정보를 저장할 때에도 구분을 위해서 문자를 사용하는 경우도 있고.

이런 경우에 사용되는 자료형이 char 자료형이야.

character의 줄임말인데... 부르는 사람 꼴리는 대로 부르는 경우가 많아.

차, 카, 캐릭터... 등등 알아서 맘대로 불러 그냥..

 

char는 기본적으로 1바이트로 구성되어 있어.

char에 저장되는 수는 ASCII 코드라고 부르는 수로 저장되는데,

ASCII 코드는 America Standard Code for Information Interchange의 줄인 표현으로 통상 아스키 코드라고 불러.

컴퓨터를 처음 개발하고 연구할 때, 미국에서 미리 정한 문자의 수변환 약속인데.. 구글링하면 차고 넘치니까... 찾아봐.

ASCII 코드는 단점이, 영어에 대한 것들만 정의되어 있어.

그래서 국제적으로 사용하기에는 제약이 있다보니까 유니코드(Universal Code)를 따로 만들어서 각 나라의 문자를 표현하곤 해.

근데 유니코드 문자는 Char 2개를 합쳐서 2바이트로 표현해.

한국어도 유니코드로 저장되기 때문에 char 2개를 하나의 글자로 저장되니까 참조해..

(ex : 가 = char 2개)

 

아참.. 그걸 설명을 안했네.

자료형을 가진 하나의 데이터 공간을 만들기 위해서는 "선언"이라는 과정이 필요해.

자료형(띄어쓰기)변수명;

또는

자료형(띄어쓰기)변수명(띄어쓰기)=(띄어쓰기)저장(초기화)할 내용;

이렇게 쓰면 돼.

ex)

char a;

char b = 'a';

질문 : 위, 아래 뭐가 좋아요?

답 : 이것은 아래가 더 좋아. 변수를 선언할 때는 무조건 초기에 값을 주고 시작하는 습관을 들이는게 좋아. 초기에 값을 주는 행위를 "초기화"라고 부르는데, 이 초기화를 하지 않아서 생기는 문제들이 꽤 많거든.

 

char a = 'a'; 라고 선언을 하면, a라는 이름의 캐릭터 자료형 속성을 가진 데이터 공간을 하나 가진 셈이야.

그럼 a는 이제 니꺼야. 니가 이 안에 문자라면 뭘 저장하든 상관이 없어.

 

단, 이 a가 어느 위치에 저장될 지는 너가 정확하게 "예측"할 방법은 없어.

저장공간과 저장위치를 부여 받는 건(이를 할당받았다고 표현한다) 컴퓨터가 알아서 해줘.

(정확히는 OS가 알아서 해주는 거지만 그냥 넘어가자)

그걸 알아낼 수는 있지만, 매 할당마다 변하거나 할 수 있으니까 맹신하진 마.

 

아이고 오늘은 여기까지만...

또 추가로 이어서 할게;;

잡설만 길어서.. 미안

 

댓글 피드백으로 요건 아니다라고 쓰는 분들의 댓글이 있다면 그것도 새겨들으세요.

8개의 댓글

2019.11.18

기다리고 있었다구! 부울 변수 하니까 뭔가 안 익숙하다 '논리형' 변수라고 하면 어떨까?

0
2019.11.18
@햄스터믹싱볼

엄근진으로... 불변수는 C에 없읍니다...

맘대로 불러도 되요 그냥 학교에서 하도 교수님들이 불불불불변변변변수수수수 해서 머리에 익어버림

0
2019.11.18
@숨은음은

그그...그렇구우우..운... 다음편은 언제나와?

0
2019.11.18
@햄스터믹싱볼

마음 내킬때.... 그렇게 해야 중간에 때려치는 것도 덜할거 같아서... 이번주에 한편은 더 쓸거니 걱정 ㄴㄴ

 

0
2019.11.19

흠 나도 이번에 휴일때 자료구조 공부할껀데 자료구조나 정리해서 올릴까

0
2019.11.19

잘 읽었음

 

유니코드는 반드시 2바이트가 아니고 변환형식에 따라 1~4바이트를 사용함

ascii는 영어만 정의가 되서 단점이라고 하기에는 애매하고, 1바이트만 사용하기 때문에 사용할 수 있는 문자수가 256개밖에 안 되서 표현할 수 있는 문자수에 제약이 크다고 하는게 나아보임.

 

그리고 c99 표준에서 bool이 추가되었음.

단 사용하기 위해서 stdbool.h 헤더를 include해야함.

0
2019.11.19
@하테나

헐 유니코드 내가 얘기하려그랫는데! 먼저 얘기해버렸어. 그대여 나쁜 사람...

0
2019.11.19
@GoodGromit

46분 늦었구나 애송이. ㅎㅎ

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180422 [잡담] 지금 HDD 특가 뜬곳 있나? 5 내일까지 0 2 시간 전 95
180421 [컴퓨터] 라데온으로 헬다2 돌리시는분 14 에더리 0 3 시간 전 87
180420 [컴퓨터] 모니터 한대 더 사려는데 오버려나? 4 or5469 0 3 시간 전 75
180419 [컴퓨터] PC 유튜브 쇼츠 좋아요 버튼 안 눌러지는 문제 3 프로숨쉼이 0 4 시간 전 57
180418 [컴퓨터] 요즘도 수냉쿨러 DIY로 하면 ㅈ됨? 9 개밥뺏어먹기대회일등 0 4 시간 전 152
180417 [컴퓨터] CPU 쿨러에서 갑자기 덜덜덜 하고 소음이 존나 크게 나는데 8 로스앤젤리스요정 1 6 시간 전 109
180416 [잡담] 이어폰 추천좀 1 dlatnaks 0 7 시간 전 76
180415 [잡담] 쿨엔 사이트 망해버렸나보다 14 익명36 0 7 시간 전 316
180414 [잡담] obs 사용시 gtx 시리즈랑 rx 시리즈랑 성능 차이 있음?? 21 해물잠봉 0 14 시간 전 180
180413 [컴퓨터] 컴퓨터 첫 on 흙수저 0 15 시간 전 119
180412 [컴퓨터] 이거 나사 드라이버 뭐 사용해야 되나요 4 흙수저 0 16 시간 전 120
180411 [프로그래밍] 반응형 웹페이지가 내가상상한거랑 좀 다르네 3 평택국 0 16 시간 전 257
180410 [컴퓨터] 윈도우 11 정품 구매해버렸다 4 69746974 1 17 시간 전 259
180409 [컴퓨터] 가난뱅이 컴퓨터 자랑 7 69746974 2 18 시간 전 353
180408 [컴퓨터] 고사양 게임 돌리면 컴퓨터가 멈춥니다 ㅠㅠ 21 탱이탱이뭉탱이 1 20 시간 전 191
180407 [컴퓨터] 5600x >5700x3d 하려는데 체크 좀 2 오뜨 0 20 시간 전 179
180406 [잡담] 윈도우 클린설치하다가 메인보드 뻑가나..? 6 꺄꺄룽 0 21 시간 전 134
180405 [컴퓨터] 사촌이 컴터산다고하는디 9 허풍이 0 21 시간 전 238
180404 [컴퓨터] 콤퓨타 글카 보조전원 다껴야대는거야? 8 초아랑모텔감 0 21 시간 전 143
180403 [잡담] 긱바 650m-k랑 애자락 라이트닝중에 어느거사지 15 전기모기채는신이야 0 22 시간 전 49