JAVA :: 자바 문법 정리(2)
조건문과 반복문
JDK 1.5 부터 배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 있도록 for 문의 새로운 문법이 추가되었다.
for (타입 변수명 : 배열 또는 컬렉션) {
// 반복할 문장
}
위의 문장에서 타입은 배열 또는 컬렉션의 요소의 타입이어야 한다. 배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩
순서대로 읽혀서 변수에 저장된다. 그러나 향상된 for 문은 일반적인 for 문과 달리 배열이나 컬렉션에 저장된 요소들을
읽어오는 용도로만 사용 수 있다는 제약이 있다.
반복문은 그저 같은 문장을 반복해서 수행하는 것이지만, 메서드를 호출하는 것은 반복문 보다 몇 가지 과정, 예를 들면 매개변수 복사와 종료 후 복귀할 주소저장 등, 이 추가로 필요하기 때문에 반복문보다 재귀호출의 수행시간이 더 오래 걸린다.
배열
배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것이다. 배열을 선언하는 것은 단지 생성된 배열을 다루기 위한
참조변수를 위한 공간이 만들어질 뿐이고, 배열을 생성해야만 비로소 값을 저장할 수 있는 공간이 만들어지는 것이다.
Java 에서는 배열의 길이가 0 일 수도 있다.
배열이름.length - 자바에서는 JVM 이 모든 배열의 길이를 별도로 관리하며, ‘배열이름.length’를 통해서 배열의 길이에 대한 정보를 얻을 수 있다. ‘배열이름.length’는 상수이다.
자바에서는 다음과 같이 배열을 간단히 초기화 할 수 있는 방법을 제공한다.
int[] score1 = new int[]{50, 60, 70, 80, 90}; // 배열의 생성과 초기화를 동시에
int[] score2 = {50, 60, 70, 80, 90} // new int[]를 생략할 수 있음
그러나 배열의 선언과 생성을 따로 하는 경우에는 생략할 수 없다.
int [] score;
score = new int[]{50, 60, 70, 80, 90}; // OK
score = {50, 60, 70, 80, 90}; // 에러. new int[]를 생략할 수 없음
만약 score 의 값을 바로 출력하면 어떻게 될까? 타입@주소의 형식으로 출력된다. ‘[I’는 1 차원 int 배열이라는 의미이고, ‘@’뒤에 나오는 16 진수는 배열의 주소인데 실제 주소가 아닌 내부 주소이다.
// 배열을 가리키는 참조변수 score 의 값을 출력
System.out.println(score); // [I@14318bb 와 같은 형식의 문자열이 출력된다.
예외적으로 char 배열은 println 메서드로 출력하면 각 요소가 구분자없이 그대로 출력되는데, 이것은 println 메서드가
char 배열일 때만 이렇게 동작하도록 작성되었기 때문이다.
for 문 대신 System 클래스의 arraycopy()를 사용하면 보다 간단하고 빠르게 배열을 복사할 수 있다.
자바에서 char 배열이 아닌 String 클래스를 이용해서 문자열을 처리하는 이유는 String 클래스가 char 배열에 여러 가지 기능을 추가하여 확장한 것이기 때문이다.
char 배열과 String 클래스의 한 가지 중요한 차이는, String 객체(문자열)는 읽을 수만 있을 뿐 내용을 변경할 수 없다.
(변경 가능한 문자열을 다루려면, StringBuffer 클래스를 사용하면 된다.)
'Language > JAVA' 카테고리의 다른 글
JAVA :: 자바 문법 정리(4) (0) | 2023.04.23 |
---|---|
JAVA :: 자바 문법 정리(3) (0) | 2023.04.22 |
JAVA :: 자바 문법 정리(1) (0) | 2023.04.20 |
JAVA :: 자바 용어 정리(5) (0) | 2023.04.19 |
JAVA :: 자바 용어 정리(4) (0) | 2023.04.18 |
댓글