Tuesday, November 28, 2006
Java/자바] 배열 사이즈 구하기; 배열 크기 얻는 함수는? Array Size; sizeof
자바에서 "배열 사이즈"를 얻는다는 것은, "배열 요소의 개수"를 구하는 것입니다. 여기에 배열 요소의 수를 구하는 법이 있습니다: ▶▶ 자바 Java] 배열 요소 개수 구하기; Number of Array Elements
그렇지만 굳이 배열의 진짜 크기를 구해야 한다면 다음과 같은 방법이 있을 것입니다.
컴파일 및 실행 결과:
글자 수는 (공백까지 포함하여) 총46개입니다. 자바에서 글자는 "16비트 유니코드 (UTF-16BE)"이기에, 한글이든 영문이든 공백이든 항상 2바이트입니다. 바이트 수로 따지면 곱하기 2 를 하여, 결국 songs 라는 문자열 배열의 크기는 92 바이트가 되는군요.
그렇지만 유니코드가 아닌 아스키 텍스트로 따진다면, 한글/한자 등은 2바이트, 영문/숫자/공백/기호 등은 1바이트로 계산해 주어야 합니다.
그리고 자바 자료형에서, int/float형 변수 1개는 4바이트, long/double형 변수 1개는 8바이트이기에
배열 요소 개수에, 4나 8 등의 바이트 수를 곱하면, 전체적인 배열 크기를 바이트 단위로 구할 수 있겠지요.
또한 책에 보면 자바의 불린(Boolean) 자료형은 "1비트" 크기라고 되어 있는데, 항상 1비트는 아니고 경우에 따라서 "1바이트"가 될 수도 있는 것 같습니다. 이것은 명확하게 규정이 되어 있지 않더군요.
sizeof 연산자로 구하는 법은?
C에는 sizeof 연산자가 있지만, 자바에는 없습니다. 자바에서는 배열의 진짜 크기를 알 필요가 없기 때문입니다. 자바 가상머신이 메모리 관리를 자동으로 알아서 해줍니다.그렇지만 굳이 배열의 진짜 크기를 구해야 한다면 다음과 같은 방법이 있을 것입니다.
문자열 배열 크기 (글자 개수) 구하기 예제
소스 파일명: Foo.javapublic class Foo {
public static void main(String[] args) {
String[] songs = { "사랑에 속고 돈에 울고", "백만송이 장미", "애정이 꽃피던 시절", "Saddle The Wind", "밤배" };
int size = 0;
for (int i = 0; i < songs.length; i++) {
size += songs[i].length(); // 각 배열 요소의 글자 수 합계 구하기
System.out.println(songs[i].length() + " : " + songs[i]);
}
System.out.println(); // 줄바꿈
System.out.println("Total Array Size: " + size);
}
}
public static void main(String[] args) {
String[] songs = { "사랑에 속고 돈에 울고", "백만송이 장미", "애정이 꽃피던 시절", "Saddle The Wind", "밤배" };
int size = 0;
for (int i = 0; i < songs.length; i++) {
size += songs[i].length(); // 각 배열 요소의 글자 수 합계 구하기
System.out.println(songs[i].length() + " : " + songs[i]);
}
System.out.println(); // 줄바꿈
System.out.println("Total Array Size: " + size);
}
}
컴파일 및 실행 결과:
D:\Z>javac Foo.java && java Foo
12 : 사랑에 속고 돈에 울고
7 : 백만송이 장미
10 : 애정이 꽃피던 시절
15 : Saddle The Wind
2 : 밤배
Total Array Size: 46
D:\Z>
12 : 사랑에 속고 돈에 울고
7 : 백만송이 장미
10 : 애정이 꽃피던 시절
15 : Saddle The Wind
2 : 밤배
Total Array Size: 46
D:\Z>
글자 수는 (공백까지 포함하여) 총46개입니다. 자바에서 글자는 "16비트 유니코드 (UTF-16BE)"이기에, 한글이든 영문이든 공백이든 항상 2바이트입니다. 바이트 수로 따지면 곱하기 2 를 하여, 결국 songs 라는 문자열 배열의 크기는 92 바이트가 되는군요.
그렇지만 유니코드가 아닌 아스키 텍스트로 따진다면, 한글/한자 등은 2바이트, 영문/숫자/공백/기호 등은 1바이트로 계산해 주어야 합니다.
그리고 자바 자료형에서, int/float형 변수 1개는 4바이트, long/double형 변수 1개는 8바이트이기에
배열 요소 개수에, 4나 8 등의 바이트 수를 곱하면, 전체적인 배열 크기를 바이트 단위로 구할 수 있겠지요.
또한 책에 보면 자바의 불린(Boolean) 자료형은 "1비트" 크기라고 되어 있는데, 항상 1비트는 아니고 경우에 따라서 "1바이트"가 될 수도 있는 것 같습니다. 이것은 명확하게 규정이 되어 있지 않더군요.
tag: java
자바 | Java 프로그래밍
<< Home