이중 for문과 배열
1. 이중반복문(이중 for문)
for문 안에 for문이 있는 것을 의미
for(초기식;조건식;증감식){
for(초기식;조건식;증감식){
}
}
2. 배열(Array)
저장공간의 나열
(1) 배열을 사용하는 이유
- 변수를 여러개 선언하면 이름도 여러개 생긴다 -> 각 저장공간을 관리하기가 불편하다
- 규칙성이 없는 값에 규칙성을 부여하기 위해서(index)
변수 : [] 하나의 타입으로 된 하나의 값만을 저장할 수 있는 저장공간
배열 : [][][][] 하나의 타입으로 된 여러개의 값을 저장할 수 있는 저장공간의 나열
배열명[index]
(2) 배열의 선언
- 배열 변수를 선언 후 배열 생성(어떤 값을 넣을지는 모르지만 몇 칸 만들지는 알 때 사용)
자료형[] 배열명 = new 자료형[칸 수];
- 배열 변수 선언과 함께 초기값을 할당(어떤 값을 넣을지 알 때 사용)
자료형[] 배열명 = {값1, 값2, 값3};
- 배열 변수 선언 후 배열 생성과 초기화
자료형[] 배열명; // 배열 변수 = 참조변수
배열명 = new 자료형[]{값1,값2,값3, ...}
- 배열을 생성하지 않고, 배열 변수를 초기화 하는 방법
배열 변수를 선언하면 배열의 크기나 요소의 값을 정하지 않은 상태로 현재는 사용하지
않지만 이후에 값을 할당할 때 사용하는 방법
(어떤 값을 넣을 지도 모르고, 몇 칸 만들지도 모를 때 사용)
자료형[] 배열명 = null;
1) new 연산자
Heap 메모리에 할당
저장공간의 시작주소를 가져온다
자료형[] 참조변수 = new 자료형[칸수];
참조값
2) null
주소의 초기값(어떤 주소가 들어갈 지 모를 때 사용)
3) Runtime Data Area : JVM이 프로그램을 실행하는 동안 사용하는 메모리 영역
JVM은 운영체제로 부터 할당받은 메모리 공간 내에서 독자적으로 메모리를 관리하고
이를 여러 영역으로 나누어서 사용한다
따라서 JVM의 메모리 영역은 운영체제의 메모리 영역과는 분리되어 동작한다
4) Heap area
배열, 객체가 생성되는 영역,
new 키워드로 생성된 것
프로그램이 실행중인 상태에서도 할당량이 변할 수 있어서 동적 메모리
5) Stack area
메소드 호출 시에 사용하는 영역
지역변수, 파라미터 변수 등의 데이터가 저장된다
참조자료형(Reference Type) 변수에는 참조값이 저장된다(해당 변수가 해당 객체를 참조하는 주소값을 가지고 있기 때문)
정적 메모리
6) Method area
클래스 정보, static 변수, 상수 등이 저장된다
JVM이 시작할 대 생성되며 모든 쓰레드가 공유한다
(3) 배열의 구조
int[] ar = {7, 9, 1, 2, 5};
ar이라는 이름의 저장공간은 1개만들어지고 여러개의 값을 담을 수 있다
5개의 값을 담기 위해서는 5칸이 필요하며, Heap에 할당된다
ar이라는 변수는 배열 객체의 주소값을 가리키는 참조 변수이다
1) index
배열을 생성할 때 각각의 저장공간에 자동으로 붙여지는 번호이다
0부터 순차적으로 증가하면서 부여된다
배열의 이름이 한개이기 때문에 이름만으로는 배열의 여러공간에 접근할 수 없다
그렇기 때문에 index를 이용하여 각각의 저장공간에 접근한다
배열명[index]로 사용하고 배열명[index]는 하나의 저장공간이므로 변수처럼 사용한다
2) length
배열을 생성할 때 자동으로 생성되는 저장공간의 수(배열의 길이)
배열의 길이는 한 번 만들어지면 변동될 수 없으므로 length는 상수라고 볼 수 있다
배열명.length로 사용한다
3) 배열의 사용
int[] ar = {20, 23, 11, 16};
ar.length => 길이기 때문에 4로 출력
ar[0] = 10; // 저장공간
ar[2] + 9; // 값
ar[3] = ar[0] + ar[2] //ar[3] 저장공간, ar[0] 값 ar[2] 값
ar[5] = 10; // 오류