[ java ] in KIDS 글 쓴 이(By): hell (나누구야) 날 짜 (Date): 1997년10월09일(목) 21시48분56초 ROK 제 목(Title): 자바의 데이터형과 변수 (1) ------------------------------------------------------------------------------ 뉴스제공시각 : 02/01 00:00 출처 : 마이크로 제목 : 자바프로그래밍[2]/자바의 데이터형과 변수 (1) ----------------------------------------------------------------------------- 자바 프로그래밍[2] 자바의 데이터형과 변수 자바 따라잡기 2탄에 도전한다. 자바 전문가로 크는 것은 쉽지 않다. 하지만 어렵지도 않다. 특히나 C나 C++를 알고 있는 사람이라면 자바와 친구하는 것은 식은 죽먹기만큼이나 쉽다. 자, 그러면 아마도 마소독자가 가장 사랑할 C/C++ 언어와 자바를 비교해 가면서 객체지향 프로그래밍 언어로서의 면모를 속속들이 지니고 있는 자바를 확 꼬셔 보도록 하자. □ 김도형/IBANK 지난호에는 간단한 자바 프로그램을 입력해서 컴파일하고 실행해 보았다. 그리고 예 제를 통해 대충 자바 프로그램이 어떤 구조를 갖고 있는지에 대해 알아 보았다. 아 마 지난호에 내준 '이달의 숙제'까지 한 독자라면, 이제 JDK든 MS 자바 SDK든 상관 없이 자신이 선택한 도구를 능숙하게 이용할 수 있게 되었을 것이다. 이번호에는 자바에서 제공하는 데이터형과 데이터를 저장하기 위한 변수에 대해 알 아 보겠다. 별 연관성은 없어 보이겠지만, 우선은 지난호 숙제풀이부터 하도록 하자. 이번호에는 객체지향 프로그래밍에 대한 기본적인 개념을 별도로 간략히 정리해 보 았으니 숙제에 대한 설명을 읽고 읽어봐 두기 바란다. 숙제풀이 지난달 숙제를 입력하느라 무척 힘이 들었을 것이다. 다들 해 보았겠지만 컴파일하 면 T.class라는 파일이 생긴다. 그저 주석문 하나만 달랑 있는 것으로 보이겠지만, 사 실 모르긴 해도 'T'라는 이름의 클래스가 정의되어 있는 것은 분명하다. 자, 그럼 이 클래스 이름을 가지고 혹 main() 메쏘드가 정의되어 있을지도 모르니까 배운대로 실 행해 보도록 하자. 그 결과는 다음과 같다. monsky [ dynaxis{59} ~/tmp ] java T Wow,Look! 지난호의 예제에서와 달리 유닉스에서 썬 JDK를 사용해 실행했다. 세상에! main() 메쏘드도 있고 뭔가 표시도 한다. 어떻게 된 것일까? 이에 대한 비밀은 지난호에 실 마리를 주었듯이 '\uxxxx' 형태의 유니코드 이스케이프가 쥐고 있다. 아울러 앞으로 설명할 변수나 메쏘드의 이름을 정하는 규칙에 대한 내용과 연관을 가지고 있다. 사 실인즉 황당하게 보이던 원시코드가 바로 다음의 프로그램을 좀 어렵게 써놓은 것에 불과하다(정확히 같은 것은 아니고, 읽기 쉽게 조금 바꾸었다). /**/ class T { public static void main(String argv[]) { System.out.println("Wow,Look!"); } } /***/ 자바 원시코드와 유니코드 혹 PC에서 사용하는 터보 파스칼에 대한 교재 외에 원래 파스칼 언어로 쓰여진 프 로그램의 원시코드를 접한 적이 있는지 모르겠다. 원래 파스칼에는 포인터(pointer) 의 참조를 위한 연산자로 '↑'가 있다. 물론 이 글자는 ASCII 코드엔 포함되어 있지 않다. 이런 이유로 ISO 표준에서는 '↑' 대신 '@'나 '^'를 사용할 수 있도록 정하고 있 다①. 따라서 컴퓨터 시스템에서 사용하는 문자코드 체계에 따라 원시코드도 조금씩 틀려지거나 하는 웃지 못할 일이 생긴다. 특수 기호가 이 모양이니 당연히 변수 이 름 등의 이름을 정할 때도 영어 대소문자와 숫자만을 사용하도록 하는 것이 C/C++ 를 포함한 지금까지의 컴퓨터 언어에서는 일반적이었다. 그러나 자바는 조금 다르다. '모든 자바 프로그램은 유니코드로 쓰여지거나 최소한 컴파일 이전에 유니코드로 변환되는 것을 전제로 한다.' 따라서 모든 기호는 유니코 드중의 어떤 글자라는 식으로 정의된다. 변수 등의 이름을 정할 때도 영어만 특별 대우하는 다른 프로그래밍 언어와 달리 한글을 포함한 다른 나라의 글자도 사용할 수 있도록 정하고 있다. 하지만 우리가 윈도우나 유닉스 하에서 자바 프로그램을 작성한다면, 당연히 우리는 한 글자에 1바이트가 할당되는 ASCII 코드를 사용하게 된다. 물론 2바이트를 한 글 자(영어도 2바이트다)로 취급하는 유니코드는 보다 많은 글자를 표현할 수 있고, 곧 바로 입력해 넣을 수 없는 글자도 생길 수 있다. 그래서 나오는 것이 바로 "유니코드 이스케이프"이다. 어떤 글자가 유니코드로 몇 번(16진수로 적어야 한다)인가만 알면 어떤 글자든지 입력해 넣을 수 있다. 관찰력이 좋은 사람은 이미 눈치챘겠지만 지난 달 숙제로 내준 코드는 위의 코드를 적절히 정리해서 그 ASCII 코드를 적어놓은 것 이다. 정확히 말하면 ASCII 코드가 아니라 위에 풀어 놓은 프로그램의 유니코드이다. 참고로 우리가 말하는 ASCII 코드를 유니코드로 변환하려면 ASCII 코드의 앞에 값이 0인 1바이트를 추가하기만 하면 된다. 현재로는 거의 모든 자바 컴파일러가 한글 등 표준 ASCII가 아닌 문자를 적절히 유 니코드의 해당하는 글자로 변환하지 못하거나, 한글을 변수 이름 등에서 사용할 때 문제를 일으키므로 주석 이외의 부분에서 한글을 사용하는 것은 당분간 삼가도록 하 자. 자세한 것은 참고자료②의 마소 기사를 참고하기 바란다. 자바에서 제공되는 데이터형 자바는 객체지향 언어이다. 하지만 '순수 100%'라고 하기는 어려운데, 이유인즉 간단 한 숫자부터 심지어는 명령의 집합까지도 모두 객체인 스몰토크(Smalltalk)와 같은 언어와 달리, 아직도 일반적인 절차 언어(procedural language)적 특성을 그대로 가 지고 있기 때문이다. 이는 C++도 마찬가지인데 객체지향 언어이면서도 이러한 특성 을 가지는 이유는 프로그램 작성의 용이함과 실행 시의 효율 때문이다. 지금부터 설 명할 내용은 자바에서 비교적 객체지향적 요소가 덜한 부분이다. 하지만, 이 부분을 끝내고 나면 그래도 뭔가 움직이는 프로그램을 작성할 수 있을 것이다. 자바의 데이터형은 다음과 같이 나눌 수 있다. 굵은 이탤릭체로 표시된 것은 기본 데이터형으로서, 실제 변수를 선언하는 경우 사 용되는 이름으로 명시하였다. 얼핏보면 C/C++의 데이터형과 큰 차이가 없다. C/C++ 를 처음 배울 때 조금 복잡한 데이터형을 선언해 보면서 무척이나 고생했던 사람에 게는 다시금 살아나는 악몽(?)에 치가 떨리겠지만, 자바의 형 선언은 거기에 비하면 무척이나 간단한 편이다. 차차 설명하기로 하고 우선 기본형에 대해 알아 보도록 하 자. C/C++의 경우 예를 들어, int형이 몇 비트로 표현되는가, 음수는 2의 보수 표기법을 쓰는가 등에 대한 구체적인 것은 컴퓨터마다 다를 수 있었다. 하지만 자바에서는 어 디서나 동일하다. 따라서 정확히 기본 데이터형이 어떤 성질을 갖는지를 아는 것은 자바에서는 특히 중요하다는 것을 명심하기 바란다. 정수형(integral type) 간단히 자바에서 제공되는 정수형의 특징을 정리해 보면 다음과 같다. ·char형을 제외하고는 부호없는 정수형은 존재하지 않는다(C/C++의 unsigned는 없 다). ·char형을 제외한 정수형은 음수를 나타내기 위해 2의 보수 표기법을 사용한다. ·char형은 16 비트이고, 유니코드를 사용한다. 실수형(floating point type) 자바의 실수형은 내부적으로 IEEE 754 형식으로 표현됨이 명시되어 있다. IEEE 754 에 규정된 실수 형식과 연산 등에 대한 자세한 내용은 설명하지 않기로 하겠다. 혹 관심이 있으면 참고자료④의 pp.33∼36을 참고하기 바란다. boolean형 boolean형은 '참'과 '거짓'의 두 가지 값을 가질 수 있는 데이터형이다. 조건을 판단하 는 경우에 사용되는데, boolean형은 자바가 C/C++와 다른 가장 중요한 것중 하나이 다. boolean형이 별도로 존재함으로써 C/C++ 프로그래밍을 하는 경우 흔히 있어 왔 던 다음과 같은 실수가 사라지게 된 것이다. if (value = 10) /* '='이 아니라 '==' */ printf("value is 10.\n"); 참조형(reference type) 참조형은 간단히 말하면 C/C++의 포인터나 참조형과 유사한 개념이라고 생각하면 된다. 참조형은 클래스로부터 생성된 객체를 가리키기 위해 사용되는데, 가리킬 수 있는 대상에 따라 클래스형, 인터페이스형, 배열형으로 구분할 수 있다. 참조형에 대 해서는 이어지는 변수에 대한 설명에서 좀더 자세히 다루도록 하겠다. |