티스토리 뷰

쉽게 쓴 Type Casting 이해하기 - 01 Type에 대해서


java나 c++ 등 프로그래밍 책을 보면 초반에 'Casting(캐스팅)'이라는 말이 나온다.

Type Casting이란 '형 변환'이라고 할 수 있다. 그런데 '형(형태) 변환'에서 또 막힌다. 도대체 '형'은 뭐고 '변환'은 뭐지? 하는 질문이 꼬리에 꼬리를 물고 나온다. 그러면 꼬리에 꼬리를 물고 나오는 질문들에 대해 하나씩 답을 구해보자.


모짜르트 같은 음악 천재들은 '청음'이란걸 배우지 않아도 소리만 듣고도 1초에 몇번 진동을 하는지 계산하는 절대 음감이 있어서 그음을 맞출 수 있지만 대부분의 사람들은 '청음'을 익혀야 한다.

이놈에 Type Casting도 마찬가지다. 프로그래밍 입문자들은 보통 책으로 시작을 하는데 뭐에 쓰는지도 모르는 변수, 배열, 클래스, 메소드, 상속, 인터페이스 등 생소한 개념들과 코드가 나오는데 프로그래밍 전문가들이 쓴 책에는 너무 추상적으로 설명이 되어 있어서 이해가 잘 가지 않는다.

나도 이놈에 캐스팅을 처음 본지 3년만에 이제야 조금 이해가 가게 되어서 이 글을 쓴다.


Type Casting 이라고 보통 부른다.

여기에서 Type이란 말 그대로 '형태'이다.


Type에 대해서 이해 하려면 컴퓨터가 어떻게 자료를 처리하는지 먼저 알아 보아야 한다.


출처:http://raonlife.com/navilera/blog/view/12/


컴퓨터는 계산 속도는 정말 빠르지만 아는건 0하고 1밖에 모른다. 전기가 통하면 1이고 전기가 안통하면 0인거다. 이 것을 구분하게 해주는 것이 우리가 잘 아는 '반도체'라는 것이다.

반도체가 왜 반도체냐면 '반'만 '도체'이기 때문이다.

'반'은 말 그대로 치킨반 양념반 할때 절반을 의미하는 '반'이고 '도체'는 '전기가 통하는 물체'를 말한다. 그러면 '반도체'는 '절반만 전기가 통하는 물체'가 되는데 이게 무슨 의미냐면 '전기가 통하게 할 수도 있고 안통하게 할 수 있도록 조절 할 수 있는 물체라는 뜻이다'.



image 출처 : http://techwiseuk.com/test-your-pcs-cpu-processor-is-working-correctly/


컴퓨터의 '두뇌'라고 할 수 있는 CPU(i7, i5, 펜티엄, 셀러론 등의 이름으로 불리우는 것들)가 이 '반도체'이다. 두뇌가 '반도체'이다 보니 컴퓨터는 자연스레 0과 1밖에 모른다.


0과 1밖에 모르지만 전기를 통했다 안통했다 하는 속도가 매우 빠르기 때문에 0과 1을 잘 조합 하면 여러가지 기능을 만들어 낼 수 있다.


여러분들이 중·고등학교 때 배운 2진수 기억 하는가? 기억이 안나시는가.. 그럼 10진수는 뭔지 아시리라 믿는다. 우리가 보통 쓰는게 10진수다. 1, 10, 100, 1000, 10000 하고 쓰는게 10진수다. 10진수는 숫자를 표현 할 때 0, 1, 2, 3, 4, 5, 6, 7, 8, 9를 가지고 표현을 한다.

그러면 2진수는 0과 1을 가지고 표현을 하는게 2진수이다.


컴퓨터는 0과 1밖에 모르기 때문에 2진수로 표현을 해주어야 한다.

2진수로 10을 표현하면 1010이다. 계속해서 11을 표현하면 1011이고 15를 표현하면 1111이 된다.


컴퓨터는 영어도 이런식으로 처리를 한다. 이를테면 A라는 알파벳은 238번 이라는 코드명을 갖는다고 치면

238을 의미하는 2진수인 11101110으로 기억을 할 것이다.


이렇게 컴퓨터는 숫자 123을 쓰던 영문 apple을 쓰던 뭐든지 0과 1로 변환해서 알려 주어야 알아 듣는다.

사람 : 123 - 본다 - 아하! '123이구나'

컴퓨터 : 123 - 2진수로 변환 - '123이구나 인식'

이런 식이다.


Type이란 0과 1밖에 모르는 컴퓨터에게 이게 문자(String)인지 숫자(Integer)인지 알려주는 것을 말한다.


사람이 1 이라고 써있으면 1인줄 알고 100이라고 써있으면 100인줄 알 수 있는 이유는 '자릿수'의 개념이 머리속에 있기 때문이다. '자릿수'의 개념은 인도에서 '0'이라는 개념이 발견 되고 나서 한참 후에 '피보나치 수열'로 유명한 '피보나치'라는 이탈리아 사람이 르네상스가 시작되기 얼마 전인 1200년경에 유럽에 소개한 이후 800년 넘게 인류가 아주 유용하게 사용하는 개념이다.



image출처: http://www.ugly7.co.kr/shop/shopdetail.html?branduid=489007


그러면 자리수가 없던 시절에는 어땠을까?

여러분들도 잘 아시다시피 I, II, III, IV, V, VI, VII, VIII, IX 처럼 쓰여있는 숫자를 본 적이 있을 것이다. 어디에서? 시계에서.

이렇게 써있는 숫자를 '로마 숫자'라고 한다. 로마숫자는 '자릿수'의 개념이 없다. 123을 표현하려면 지금은 그냥 123이라고 쓰면 되지만 로마숫자로 123을 쓰려면 CXXIII 이렇게 표현한다. 223을 쓰려면 100을 의미하는 C를 하나 더 써주면 된다. CCXXIII 이렇게.


아라비아 숫자

로마 숫자

387

CCCLXXXVII

487

DCLXXXVII

30

XXX

40

XL

2387

MMCCCLXXXVII

3387

MMMCCCLXXXVII

5000

5387

CCCLXXXVII

387+487

CCCLXXXVII + DCLXXXVII


이 숫자로 더하기를 해보자

50 + 50을 하면 100이란걸 쉽게 알 수 있지만 로마자로 하려면 XXXXX + XXXXX = C 이런 식으로 복잡하다. 자리수 개념이 없으니 길이도 들쭉날쭉이고 한번에 알아보기도 힘들다. 이 시대에는 더하기까지 할 수 있으면 지금의 학사 수준이고 곱하기 나누기까지 할 수 있으면 석사 수준이었다니 말 다했다.

-수 과학의 언어, 토마스 단치히


이런 식인데 컴퓨터도 0과 1밖에 모르므로 인간이 '정확히'알려주지 않는 한 '자릿수'라는 개념이 없다.

'100'이라고 써서 보내면 컴퓨터는 2진수인 '일공공'으로 알아듣고 '8'로 인식하거나 숫자가 아니고 문자 '100'으로 인식 할 수도 있다.


그렇기 때문에 Type을 이용해 '100'이 숫자 '백'인지, 문자 '100'인지, 이진수 '일공공'인지를 알려주는 것이 Type이라는 기능 되시겠다.

String variable = "hello";

이런식으로 보통 변수 앞에 'Type'이 뭔지 알려주는 것이다.



끗.













공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함