[그린컴퓨터] Server/JAVA(객체 지향 프로그래밍)

배열이란? { 배열의 필요성, 배열이란, 배열 선언과 초기화, 배열 사용하기, 문장 저장 배열 만들기, 객체 배열 사용하기, 배열 복사하기, 향상된 for문과 배열}

Ben의 프로그램 2023. 5. 25. 19:07
728x90

배열의 필요성

  • 이제까지 사용한 변수는 자료 한 개를 저장하기 위한 공간이었습니다. 
  • 그런데, 프로그래밍을 하다 보면 자료형이 같은 자료를 여러 개 처리해서 구현해야 하는 일이 종종 생깁니다.
  • 이런 경우에는 변수를 각각 선언하는 것보다 여러 자료를 한 번에 처리할 수 있는 기능이 필요합니다.
  • 이 장에서는 자료형이 같은 여러 자료를 효율적으로 다룰 수 있는 배열에 대해 알아보겠습니다. 

배열이란? (자료를 순차적으로 관리하는 구조, 배열)

  • 학교에 학새잉 100명 있습니다. 
  • 이 학생들 100명의 학번을 어떻게 관리할 수 있을까요?
  • int studentID1, studentID2 .... 이런식으로 여러 개의 변수들을 일일이 쓰는 것은 너무 귀찮고 번거롭습니다.
  • 이때 사용하는 자료형이 배열(array)입니다. 
  • 배열은 자료 구조의 가장 기초 내용이 됩니다. 

  • 배열은 위의 그림과 같이, 각기 다른 변수에 저장된 데이터들을 한 번에 관리할 수 있게 해줍니다.
  • 위 그림으로 알 수 있다싶이 배열은 자료가 연속으로 나열된 자료 구조입니다. 

배열 선언과 초기화

배열 선언하기

  • 배열을 사용하려면 먼저 배열을 선언해야 합니다.
  • 배열도 변수와 마찬가지로 자료형을 함께 선언합니다. 
  • 배열을 선언하는 문법은 아래와 같습니다. 
자료형[] 배열이름 = new 자료형[개수]; //혹은
자료형 배열이름[] = new 자료형[개수];
  • 배열을 이루는 각각의 자료를 배열 요소라고 합니다. 
  • 한 배열 안에 존재하는 모든 배열 요소는 자료형이 모두 같습니다.
  • 배열 선언을 배워보았으니 실제로 사용해보겠습니다.
package array;

public class Ex00 {
	public static void main(String[] args) {
		int[] studentIDs = new int[3];
	}

}
  • 위 문장은 int형 요소가 3개인 배열을 선언한 것입니다. 
  • 이렇게 선언했을 때 메모리 상태를 그림으로 나타내면 다음과 같습니다.

  • 배열을 선언하면 선언한 자료형과 배열 길이에 따라 메모리가 할당됩니다. 
  • 위 그림을 보면 자료형이 int형이므로 배열 요소를 저장할 수 있는 공간의 크기는 전부 4바이트로 동일합니다. 
  • 배열 요소를 저장할 수 있는 공간이 총 3개이므로 이 배열을 위해 총 4 * 3 = 12 바이트의 메모리가 할당되는 것입니다.

배열 초기화하기

  • 자바에서 배열을 선언하면 그와 동시에 배열의 자료형에 따라서 각 요소의 값이 초기화됩니다. 
  • 정수 int & long & short & byte 는 0 으로 초기화 됩니다.
  • 실수 double & float 은 0.0 으로 초기화 됩니다.
  • 객체 배열은 null 로 초기화 됩니다. 
  • 아래 코드 처럼, 배열 선언과 동시에 특정 값으로 초기화 할 수도 있습니다. 
	int[] studentIDs = new int[] {101, 102, 103}; // 개수는 생략함
	int[] studentIDs = new int[3] {101, 102, 103}; // 오류 발생
	int[] studentIDs = {101, 102, 103} // new int[] 생략 가능
  • 배열이 초기화 요소의 개수만큼 생성되므로 [ ] 안의 개수는 생략합니다. 
  • 선언과 동시에 초기화할 때는 new int[ ] 부분을 생략할 수 있습니다. 
  • 하지만 아래와 같이 배열의 자료형을 먼저 선언하고 초기화하는 경우에는 new int[ ] 를 생략할 수 없습니다. 
	int[] studentIDs;
	studentIDs = new int[] {101, 102, 103};      // new int[] 를 생략할 수 없음

배열 사용하기

배열을 사용한다?

  • 배열을 사용한다는 것은 선언한 배열의 각 요소에 값을 넣을 때나 배열 요소에 있는 값을 가져올 때를 의미합니다.
  • 선언한 배열의 각 요소에 값을 넣을 때나 배열 요소에 있는 값을 가져올 때는 [ ](인덱스 연산자) 을 사용합니다. 
  • 만약 배열의 첫 번째 요소에 값 10을 저장한다면 다음처럼 코드를 작성합니다. 
int[] studentIDs = new int[10];

studentIDs[0] = 10;
  • 위 코드에 대해서 좀 더 자세하게 알아보겠습니다.

인덱스 연산자 [ ]

  • [ ] 는 배열을 처음 선언할 때 사용한 연산자입니다.
  • 배열 이름에 [ ] 를 사용하는 것을 인덱스 연산이라고 합니다. 
  • 인덱스 연산자의 기능은 배열 요소가 저장된 메모리 위치를 찾아 주는 역할입니다. 
  • 변수 이름으로 변수가 저장된 메모리 위치를 찾는 것처럼, 배열에서 [i] 인덱스 연산을 하면 i번째 요소의 위치를 찾아 해당 위치의 메모리에 값을 넣거나 이미 저장되어 있는 값을 가져와서 사용할 수 있습니다. 
  • 예를 들어 int형으로 선언한 num 배열의 네 번째 요소에 값 25를 저장하고, 그 값을 가져와 int 형 변수 age에 저장한다면 다음과 같습니다. 
int[] num = new int[10];
num[3] = 25;
int age = num[3];

배열의 물리적 위치와 논리적 위치는 같다.

  • 배열에서 10개의 요소를 갖는 배열을 만들고 10을 첫 번째 요소로 두고, 5를 두 번째 요소로 두었다고 생각해보세요.
  • 논리적으로 10 옆 자리에 5가 있다고 생각할 수 있습니다. 
  • 배열은 특이하게도 논리적으로 옆에 있을 것이라고 생각되는 데이터가 실제로 물리적으로도 옆 자리에 있습니다.
  • 보통 다른 자료의 구조를 살펴보면 논리적 위치는 바로 이웃하지만, 실제 메모리 상 물리적 위치는 완전히 동떨어진 경우도 있습니다. 

배열 순서는 0번부터

  • 배열 길이가 n이라고 하면, 배열 순서는 0번부터 n-1 번까지입니다. 
  • 0번 요소를 배열의 첫 번째 요소라고 합니다. 
  • 이해를 돕기 위해 정수 10개를 저장할 배열을 선언하고 각 요소를 값 1부터 10까지 초기화한 후 for 반복문을 사용하여 배열 요소 값을 하나씩 출력해 보겠습니다. 
int num[] = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

for (int i = 0; i < num.length; i++) {
	System.out.println(num[i]);
}
  • 자바의 배열은 배열 길이를 나타내는 length 속성을 가집니다. 
  • 자바에서 배열 길이는 처음에 선언한 배열의 전체 요소 개수를 의미합니다. 
  • 전체 길이를 알고 싶은 배열 이름 뒤에 도트(.) 연산자를 붙이고 length 속성을 쓰면 배열 길이를 반환합니다. 
  • 이렇게 배열 전체 길이만큼 수행문을 반복해야 할 때는 숫자를 직접 사용하는 것보다 length 속성을 사용하는 것이 좋습니다.

전체 배열 길이와 유효한 요소 값

  • 배열을 사용할 때 처음 선언한 배열 길이만큼 값을 저장해서 사용하는 경우는 많지 않습니다. 
  • 따라서 전체 배열 길이와 현재 배열에 유효한 값이 저장되어 있는 배열 요소 개수가 같다고 혼동하면 안됩니다. 
package array;

public class ArrayTest2 {
	public static void main(String[] args) {
		double[] data = new double[5];
		
		data[0] = 10.0;
		data[1] = 20.0;
		data[2] = 30.0;
		
		for (int i = 0; i < data.length; i++) {
			System.out.println(data[i]);
		}
	}
}
  • double 형으로 길이가 5인 배열을 선언했습니다. 
  • 자바에서 정수 배열과 실수 배열을 별도로 초기화하지 않고 선언하면 배열의 요소 값은 0으로 초기화됩니다. 
  • data 배열은 3번째 요소까지 값을 지정해서 넣어주었습니다.
  • 따라서 해당 배열을 출력하게 되면, 4번째와 5번째 요소에는 0.0이 출력되는 것을 알 수 있습니다. 
  • 만약, 배열의 크기 만큼이 아니라 배열 요소들만 정확히 출력하려면 배열 요소를 저장할 때마다 새로운 변수의 값을 증가시켜 주면 됩니다. 그리고 반복문 종료 조건으로 배열의 length 속성이 아닌 해당 변수를 사용하면 됩니다.
package array;

public class ArrayTest3 {

	public static void main(String[] args) {
		double[] data = new double[5];
		int size = 0;
		
		data[0] = 10.0; size++;
		data[1] = 20.0; size++;
		data[2] = 30.0; size++;
		
		for (int i = 0; i < size; i++) {
			System.out.println(data[i]);
		}
	}

}
  • 위의 코드에서 배열 요소에 순서대로 값을 저장할 때마다 size 변수의 값을 하나씩 증가시킵니다. 
  • 즉, 유효한 값을 저장하고 있는 배열 요소 개수를 알 수 있습니다. 

문장 저장 배열 만들기

  • 이번에는 문자를 저장하는 배열도 한번 생각해 봅시다. 
  • 문자 자료형 배열을 만들고 알파벳 대문자를 A 부터 Z 까지 저장한 후 각 요소 값을 알파벳 문자와 정수 값(아스키 코드)으로 출력해 보겠습니다. 
  • 문자 자료형 배열은 char[ ] 로 선언해야 합니다.
package array;

public class CharArray {
	public static void main(String[] args) {
		char[] alphabets = new char[26];
		char ch = 'A';
		
		for (int i = 0; i < alphabets.length; i++, ch++) {
			alphabets[i] = ch;   
		}
		
		for (int i = 0; i < alphabets.length; i++) {
			System.out.println(alphabets[i] + "," + (int)alphabets[i]);
		}
	}

}

출력값

  • 위의 코드를 보면 문자형 배열을 선언하고, for 문을 사용해 각 배열 요소에 앞파벳 문자를 저장하였습니다.
  • 각 알파벳 문자는 실제 메모리에 아스키 코드 값으로 저장되기 때문에 ch 값에 1을 더하면 1만큼 증가한 값이 배열에 저장됩니다. 

객체 배열 사용하기

  • 이번에는 참조 자료형으로 선언하는 객체 배열에 대해 알아보겠습니다.
  • 동일한 기본 자료형 변수 여러 개를 배열로 사용할 수 있듯이 참조 자료형 변수도 여러 개를 배열로 사용할 수 있습니다.
  • 객체 배열은 int 나 char 등 기본 자료형 배열과 사용 방법이 조금 다릅니다. 예제와 함께 알아보겠습니다.
package array;

public class Book {
	private String bookName;
	private String author;
	
	public Book() {};
	public Book(String bookName, String author) {
		this.bookName = bookName;
		this.author = author;
	}
	
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	
	public void showBookInfo() {
		System.out.println(bookName + "," + author);
	}
	
}
  • 도서관에 책이 5권 있다고 가정합니다.
  • Book 클래스를 사용항 책 5권을 객체 배열로 만들어 보겠습니다. 
package array;

public class BookArray {

	public static void main(String[] args) {
		Book[] library = new Book[5];
		
		for (int i = 0; i < library.length; i++) {
			System.out.println(library[i]);
		}
	}
}

출력값

  • 이 코드에서 우리가 이해해야 할 부분은 5행 Book[ ] library = new Book[5]; 문장입니다. 
  • 코드의 내용만 보면 Book 인스턴스 5개가 생성된 것처럼 보입니다. 
  • 하지만 Book 인스턴스 5개가 바로 생성되는 것은 아닙니다. 
  • 그러면 이때 만들어지는 것은 무엇일까요? 
  • 인스턴스를 생성하면 그 인스턴스를 가리키는 주소 값이 있습니다. 
  • Book[ ] library = new Book[5] 는 각각의 Book 인스턴스 주소 값을 담을 공간 5개를 생성하는 문장입니다. 
  • 즉, 이 문장을 실행하면 다음 그림처럼 Book 주소 값을 담을 공간이 만들어지고 자동으로 각 공간은 '비어 있다'는 의미의 null 값으로 초기화됩니다. 

  • 이제 각 배열 요소에 인스턴스를 생성해 넣어 보겠습니다. 
package array;

public class BookArray2 {

	public static void main(String[] args) {
		Book[] library = new Book[5];
		library[0] = new Book("태백산맥", "조정래");
		library[1] = new Book("데미안", "헤르만 헤세");
		library[2] = new Book("어떻게 살 것인가", "유시민");
		library[3] = new Book("토지", "박경리");
		library[4] = new Book("어린왕자", "생텍쥐페리");
		
		for (int i = 0; i < library.length; i++) {
			library[i].showBookInfo();
		}
		
		for (int i = 0; i < library.length; i++) {
			System.out.println(library[i]);
		}
	}
}

출력값

  • 배열의 각 요소에 Book 인스턴스를 만들어 직접 저장했습니다. 
  • 위 출력 화면을 살펴보면 Book 인스턴스 멤버들의 showBookInfo 메서드가 잘 실행되는 것을 볼 수 있고, Book 인스턴스를 저장한 메모리 공간 주소들도 잘 출력되는 것을 볼 수 있습니다. 

연습문제 풀어보기

  • 학생 클래스 Student 를 만들고, StudentArray 클래스를 만들어 Student 의 인스턴스 3개가 들어간 배열을 만들고 출력해보세요.
package array;

public class Student {
	int studentID;
	String name;
	
	public Student(int studentID, String name) {
		super();
		this.studentID = studentID;
		this.name = name;
	}

	public void showStudentInfo() {
		System.out.println(this.studentID + "," + this.name);
	}
}

 

package array;

public class StudentArray {

	public static void main(String[] args) {
		Student[] studentArray = new Student[3];
		studentArray[0] = new Student(1001, "James");
		studentArray[1] = new Student(1002, "Tomas");
		studentArray[2] = new Student(1003, "Edward");
		
		for (int i=0; i<studentArray.length; i++) {
			studentArray[i].showStudentInfo();
		}
	}

}

 

출력값

배열 복사하기 (왜 복사하는가, 배열 복사 2가지 방법, 객체 배열 복사, 얕은 복사, 깊은 복사)

배열을 왜 복사하는가?

  • 배열을 하나 만들었는데, 해당 배열의 크기와 똑같은 배열을 새로 만들고 싶을 때 복사합니다. 
  • 배열을 하나 만들었는데, 해당 배열보다 더 큰 배열을 만들어 기존 배열에 저장된 자료를 가져오려 할 때 복사합니다. 

배열을 복사하는 방법 2가지

  • 첫 번째, 기존 배열과 배열 길이가 같거나 더 긴 배열을 만들고 for 문을 사용하여 각 요소 값을 반복해서 복사하는 방법입니다.
package array;


public class StudentArray {

	public static void main(String[] args) {
		Student[] studentArray = new Student[3];
		studentArray[0] = new Student(1001, "James");
		studentArray[1] = new Student(1002, "Tomas");
		studentArray[2] = new Student(1003, "Edward");
		
		for (int i=0; i<studentArray.length; i++) {
			studentArray[i].showStudentInfo();
		}
		
		Student[] studentArrayCopy = new Student[3];
		for (int i =0; i < studentArrayCopy.length; i++) {
			studentArrayCopy[i] = studentArray[i];   // studentArray 를 studentArrayCopy 에 복사하였다!
			studentArrayCopy[i].showStudentInfo();
		}
	}

}

 

  • 두 번째System.arraycopy( ) 메서드를 사용하는 방법입니다. 
  • System.arraycopy(src, srcPos, dest, destPos, length) 메서드에서 각 매개변수 의미는 다음과 같습니다. 
매개변수 설명
src source, 복사할 배열 이름
srcPos source Position, 복사할 배열의 첫 번째 위치
dest destination, 복사해서 붙여 넣을 대상 배열 이름
destPos destination Position, 복사해서 붙여 넣기를 시작할 첫 번째 위치
length src 에서 dest 로 자료를 복사할 요소 개수
  • 예제를 살펴보겠습니다. 
package array;

import java.util.Arrays;

public class ArrayCopy {

	public static void main(String[] args) {
		int[] array1 = {10, 20, 30, 40, 50};
		int [] array2 = {1, 2, 3, 4, 5};
		
		System.arraycopy(array1, 0, array2, 1, 4);
		System.out.println(Arrays.toString(array2));
	}
}

출력값

  • 예제를 보면 array1 요소 0번부터 4개를 복사하여 대상 배열 array2 요소 1번부터 붙여 넣습니다.
  • 출력 결과를 보면 array2 배열의 첫 번째 요소 값인 1을 제외하고 나머지 요소 값만 변경된 것을 알 수 있습니다. 
  • 이때 주의할 점은, 복사할 대상 배열의 시작 요소부터 마지막 요소까지의 개수가 복사할 요소 개수보다 작다면 오류가 납니다. 

객체 배열 복사하기

  • 객체 배열도 마찬가지로 복사해서 사용할 수 있습니다. 
  • 이전에 만들었던 Book 패키지를 활용하는 ObjectCopy1 클래스를 만들어보겠습니다. 
package array;

public class ObjectCopy1 {

	public static void main(String[] args) {
		Book[] bookArray1 = new Book[3];
		Book[] bookArray2 = new Book[3];
		
		bookArray1[0] = new Book("태백산맥", "조정래");
		bookArray1[1] = new Book("데미안", "헤르만 헤세");
		bookArray1[2] = new Book("어떻게 살 것인가", "유시민");
		System.arraycopy(bookArray1, 0, bookArray2, 0, 3);
		
		for (int i = 0; i < bookArray2.length; i++) {
			bookArray2[i].showBookInfo();
		}
	}
}

출력값

  • 위 예제 코드의 출력 결과를 보면 bookArray1 배열에서 bookArray2 배열로 배열의 요소들이 잘 복사된 것을 알 수 있습니다. 
  • 그런데, 이런 궁금증이 생길 수도 있다.
  • "객체 배열을 사용하려면 인스턴스를 생성해서 넣어야 한다고 했는데, 인스턴스를 생성해서 넣어주지 않았던 bookArray2 배열에 어떻게 복사가 가능했던 걸까?"
  • 이어지는 내용에서 알아보겠습니다.

얕은 복사

  • 앞 예제에서 bookArray1 의 배열 요소들을 bookArray2 가 복사해서 가져갔었습니다. 
  • 아래의 예제 코드를 보면서 인스턴스를 생성해서 넣어주지 않았던 bookArray2 배열에 어떻게 복사가 가능했던 것인지 알아보겠습니다. 
package array;

public class ObjectCopy2 {

	public static void main(String[] args) {
		Book[] bookArray1 = new Book[3];
		Book[] bookArray2 = new Book[3];
		
		bookArray1[0] = new Book("태백산맥", "조정래");
		bookArray1[1] = new Book("데미안", "헤르만 헤세");
		bookArray1[2] = new Book("어떻게 살 것인가", "유시민");
		System.arraycopy(bookArray1, 0, bookArray2, 0, 3);
		
		for (int i = 0; i < bookArray2.length; i++) {
			bookArray2[i].showBookInfo();
		}
		
		bookArray1[0].setBookName("나목");
		bookArray1[0].setAuthor("박완서");
		
		System.out.println("=== bookArray1 ===");
		for (int i = 0; i < bookArray1.length; i++) {
			bookArray1[i].showBookInfo();
		}
		
		System.out.println("=== bookArray2 ===");
		for (int i = 0; i < bookArray2.length; i++) {
			bookArray2[i].showBookInfo();
		}
	}

}

출력값

  • bookArray1 의 첫 번째 요소만 책 이름은 "나목" 으로, 저자는 "박완서"로 바꾸어 주었습니다. 
  • 그런데, 출력값을 보면 아주 놀라운 점이 하나 있습니다. 
  • bookArray2 배열 요소 값도 함께 변경된 것을 알 수 있습니다. 
  • 어떻게 이런 일이 가능했을까요?
  • 그 이유는 객체 배열의 요소에 저장된 값은 인스턴스 자체의 값 데이터가 아니라 인스턴스의 주소 값이기 때문입니다.
  • 즉, 객체 배열을 복사할 때 인스턴스를 따로 생성해서 대입해주는 것이 아니라, 기존 인스턴스의 주소 값만 복사한다는 것을 의미합니다. 
  • 결국 두 배열의 요소들은 다른 것 같지만 사실은 같은 인스턴스의 주소값을 가지고 있으므로 같은 인스턴스를 바라보고 있었던 겁니다. 
  • 그렇기 때문에 bookArray1 에서 요소를 수정하면, bookArray2 의 요소가 가리키는 인스턴스가 같은 것이었기 때문에 bookArray2 의 요소도 같이 바뀐 것 처럼 보이게 됩니다. 
  • 이와 같이 주소 값만 복사하고 실제 값을 복사하는 것이 아닌 복사를 '얕은 복사 shallow copy' 라고 합니다.
  • 그렇다면 주소 값이 아닌, 인스턴스 값만 복사해온 다음 bookArray2 배열의 각 요소에 붙여 넣었을 때 bookArray1 배열과 bookArray2 배열의 각 요소가 서로 다른 인스턴스를 가리키게 하려면 어떻게 해야 할까요?
  • 바로 깊은 복사 deep copy 를 하면 됩니다.

깊은 복사

  • 반복문을 사용하건 System.arraycopy( ) 메서드를 사용하건 객체 배열을 복사하면 항상 인스턴스 주소가 복사됩니다.
  • 대부분의 경우에 이렇게 해도 문제가 없지만, 인스턴스를 따로 관리하고 싶다면 직접 인스턴스를 만들고 해당 인스턴스에 값을 복사해서 넣어주어야 합니다. 
  • 이런 방법을 '깊은 복사 deep copy' 라고 합니다.
  • 예제를 통해서 알아보겠습니다. 
package array;


public class ObjectCopy3 {

	public static void main(String[] args) {
		Book[] bookArray1 = new Book[3];
		Book[] bookArray2 = new Book[3];
		
		bookArray1[0] = new Book("태백산맥", "조정래");
		bookArray1[1] = new Book("데미안", "헤르만 헤세");
		bookArray1[2] = new Book("어떻게 살 것인가", "유시민");
		
		bookArray2[0] = new Book();    // 디폴트 생성자로 bookArray2 배열 인스턴스 생성
		bookArray2[1] = new Book();
		bookArray2[2] = new Book();
		
		for (int i = 0; i < bookArray1.length; i++) {    // bookArray1 배열 요소를 새로 생성한 bookArray2 배열 인스턴스에 복사
			bookArray2[i].setBookName(bookArray1[i].getBookName());
			bookArray2[i].setAuthor(bookArray1[i].getAuthor());
		}
		
		for (int i = 0; i <  bookArray2.length; i++) {
			bookArray2[i].showBookInfo();			// bookArray2 배열 요소 값 출력
		}
		
		bookArray1[0].setBookName("나목");    // bookArray1 첫 번째 배열 요소 값 수정
		bookArray1[0].setAuthor("박완서");
		
		System.out.println("=== bookArray1 ===");
		for (int i = 0; i < bookArray1.length; i++) {
			bookArray1[i].showBookInfo();   // bookArray1 배열 요소 값 출력
		}
		
		System.out.println("=== bookArray2 ===");
		for (int i = 0; i < bookArray2.length; i++) {
			bookArray2[i].showBookInfo();   // bookArray2 배열 요소 값 출력
		}
	}

}
  • 위의 예제에서는 복사할 배열에 인스턴스를 따로 생성한 후 요소 값을 복사해 주었습니다.
  • 이렇게 해주면 복사한 배열 요소는 기존 배열 요소와 서로 다른 인스턴스를 가리키므로 기존 배열의 요소 값이 변경되어도 영향을 받지 않는다는 것을 알 수 있습니다.

향상된 for문과 배열 

  • 자바 5부터 제공되는 향상된 for문(enhanced for loop)은 배열의 처음부터 끝까지 모든 요소를 참조할 때 사용하면 편리한 반복문입니다.
  • 향상된 for 문은 배열 요소 값을 순서대로 하나씩 가져와서 변수에 대입합니다. 
  • 따로 초기화와 종료 조건이 없기 때문에 모든  배열의 시작 요소부터 끝 요소까지 실행합니다. 
  • 예제를 보면서 향상된 for문을 연습해 봅시다. 
package array;

public class EnhancedForLoop {

	public static void main(String[] args) {
		String[] strArray = {"Java", "Android", "C", "JavaScript", "Python"};
		
		for(String lang : strArray) {
			System.out.println(lang);
		}
	}

}
  • String 형으로 선언된 strArray 배열에 문자열 5개를 저장했습니다. 
  • 향상된 for 문을 사용해서 String 형 lang 변수에 strArray 배열 요소 값을 순서대로 가져와 대입합니다. 
  • lang 변수를 출력하면 strArray 배열에 저장된 값이 순서대로 출력됩니다.