------------------------------------------------------------------------------
뉴스제공시각 : 02/01 00:00 출처 : 마이크로
제목 : 자바프로그래밍[2]/자바의 데이터형과 변수 (3)
-----------------------------------------------------------------------------
null값
C/C++에서는 포인터가 아무런 메모리를 가리키지 않는다는 것을 나타내기 위해 특
별히 NULL이라는 상수를 정의하여 이를 그 표식으로 삼는다. 자바의 참조형 변수가
아무런 객체를 지칭하지 않을 경우에는 null이라는 특별히 정의된
리터럴(literal)을
사용한다. null을 값으로 가진 참조형 변수를 사용하여 메쏘드를 호출하려거나
필드
에 접근하려고 시도하는 경우는 NullPointerException라는 예외가 발생한다. 예외처
리에 대해서는 이후 연재가 진행되면서 차차 다루겠다.
배열
자바에서 배열(array)은 C/C++나 타 언어에 비해 조금 특이하다. 즉, 배열도
하나의
객체인 것이다. 그래서 배열도 몇가지 메쏘드와 필드를 가지고 있다. length라는
필
드를 읽으면 배열의 길이를 알 수 있도록 되어 있다. 단, 이 필드는 읽을 수만
있다.
자바에서 배열을 가리키는 참조형 변수는 다음과 같이 선언한다.
class Point {
public int x, y;
};
class Arrays {
static int[] intArray = new int[10];
static Point refArray[] = new Point[15];
public static void main(String args[]) {
System.out.println("length of intArray : " +
intArray.length);
System.out.println("length of refArray : " +
refArray.length);
}
}
위의 예제를 컴파일하여 실행시켜 보기 바란다. 결과는 다음과 같다.
monsky [ dynaxis{52} ~/tmp ] java Arrays
length of intArray : 10
length of refArray : 15
위에서 intArray와 refArray라는 변수를 선언했는데 자세히 보면 알겠지만,
'[]'의 위
치가 서로 다르다. C/C++ 취향으로 변수 이름 뒤에 '[]'를 쓰든지 자바 특유의
취향대
로 형 이름의 바로 다음에 쓰든지 개인의 자유에 맡긴다. 하지만 되도록 자바 고유
의 취향에 익숙해질 것을 권한다.
또 한 가지 자세히 봐야 할 것은 배열도 객체이기 때문에 참조형 변수만을 선언할
수 있고, 'new'를 사용해서 힙에서 할당받아야 한다는 점이다. 그래서 형 이름
다음
에 오는 '['과 ']' 사이에 배열의 크기를 표시하지 않는 것이다. 이와 같이
자바에서 배
열은 완전히 동적으로 생성된다.
다음으로 잠시 refArray에 대해 짚고 넘어갈 것이 있다. 다음에 C++에서의
배열과
자바에서의 배열의 구조를 <그림 2>에 보였다. C++에서도 Point라는 클래스가 있다
고 가정하자. <그림 2>를 통해 구조적 차이점을 확실히 인지하기 바란다.
<그림 2> 자바와 C++의 배열 구조 차이
Point refArray[15];
Point[] refArray = new Point[15];
refArray[1] = new Point();
refArray[8] = refArray[1];
refArray[9] = new Point();
refArray <C++의 경우 - 각각이 Point 객체들이다>
refArray
Point 객체 Point 객체
<자바의 경우>
배열의 배열
자바에서는 다차원 배열을 지원하지 않는다. 비슷하기는 하지만 실제로 다음과
같은
배열 선언은 배열의 배열로 구현된 것이다. <그림 3>을 보면 쉽게 알 수 있다.
<그림 3> 자바의 배열 선언
int[][] twoDim = new int[5][5];