배열
학생 수에 따라 같은 타입 변수를 여러개 선언하고 사용하는 문제 발생.
반복문으로 해결 가능?
-> 반복문으로 변수 명을 선언할 수 없기 때문에 배열이 필요
배열의 선언과 생성
배열: 같은 타입의 변수를 사용하기 편하게 하나로 묶은 변수.
int[] 변수 명
변수 명 new int[num]
5칸 짜리 students 배열 변수 선언
new는 새로 생성한다는 의미
int 형 배열 변수 student에는 배열을 담을 수 있음
숫자는 자동으로 0 할당, 부울 값은 거짓으로, 스트링은 null 값 자동으로 삽입
생성된 메모리의 참조값을 배열변수에 저장한다
배열에 접근할 때에는 인덱스를 이용해 배열에 접근한다.
배열은 0부터 시작한다.
new int[5] 와같은 정수형 배열변수를 선언해주었을 경우에는 정수형 변수 5개를 선언해준 것과 같다.
위 변수의 인덱스 범위는 0에서부터 4까지이다.
일반적인 변수와 사용방법은 같지만 인덱스 번호를 이용해 접근한다는 차이가 있다.
students 변수에는 배열 주소의 참조값이 저장되어있다.
students 배열의 주소값이 x001이라면 x001[1]과 student[1]은 같은 의미이다.
자바의 데이터 타입은 크게 두가지로 구분 가능한데, 사용값을 직접 넣을 수 있는 기본형(int, long, double, bool... )과 배열변수와 같이 데이터에 접근하기 위한 메모리의 참조값을 넣을 수 있는 참조형(int [] ... )으로 분류 가능하다.
배열이 참조형을 사용하는 이유는?
기본형 변수의 경우 사이즈가 명확하게 정해져있다.
하지만 참조형 변수의 경우 동적으로 사이즈 변경이 가능하다.
예를들어 int size 변수를 선언한 뒤 사용자에게서 1000값을 할당받은 경우 new int [size] ; 문장이 실행될 때 배열의 크기가 정해진다.
따라서 기본형 변수보다 더욱 복잡하고 유연한 구조를 가지고 있고, 기본형 변수는 더 간단하고 효율적인 처리를 제공한다.
배열의 리펙토링
리펙토링: 기존 코드의 기능은 유지하면서 내부 구조를 개선하는 것을 리펙토링이라한다.
앞선 코드와 동일한 기능은 유지하면서 코드 내부 구조를 간결하게 개선한 것을 알 수 있음.
System.out.println("학생"+(i+1)+" 점수: "+students[i]); 문장에서 괄호를 빼고
System.out.println("학생"+i+1+" 점수: "+students[i]); 이런 형식으로 쓴다면 문자+ 숫자의 형태로 인식이되어 1이 그대로 출력됨에 유의해준다..
배열변수는 변수명.length 기능을 이용하여 배열변수의 크기를 반환하는 사용도 가능하다.
따라서 for문의 조건에서 바로 크기를 입력해주지 않아도 된다.
배열의 경우에는 초기화시 값을 부여할 수 있음.
student=new int[]{10,20,30,40,50} 은 위 코드의 선언과 초기화와 같은 기능을 수행한다.
더욱 최적화시킨다면 int[] student={10,20,30,40,50} 의 형식으로도 입력 가능하다.
하지만 int[] students; students= {10,20,30,40,50}; 처럼 여러줄로 나누어서 선언하는 사용은 불가능하다.
2차원 배열
행과 열로 구성되어 있다.
int [][] arr=new int [2][3];과 같이 선언하고 arr[1][0];과 같이 사용한다.
같은 행의 여러열을 출력할 경우 변수를 사용하여 출력이 가능하다.
for (int row = 0; row < 2; row++) {
System.out.print(arr[row][0] + " ");
System.out.print(arr[row][1] + " ");
System.out.print(arr[row][2] + " ");
System.out.println(); }
2차원 배열의 리펙토링
for (int row = 0; row < 2; row++) {
for(int column=0;column<3;column++){
System.out.print(arr[row][colmun] + " ");
}
}
2차원 배열의 초기화
int [][] arr={
{1,2,3}
{4,5,6}
}
2차원 배열의 길이
arr.length 는 행의 길이 출력
arr[row].length 는 열의 길이 출력
2차원 배열의 값 할당
int [][] arr=new int [2][3];
int i=0;
for (int row = 0; row < 2; row++) {
for(int column=0;column<3;column++){
arr[row][colmun] =i++;
}
}
향상된 for 문
기존의 for문보다 편리하게 이용 가능하다
int [] numbers ={1,2,3,4,5};
for(int number : numbers){ //모든 요소를 순회
sout(number);
}
iter + 엔터키 입력시 자동으로 향상된 for문 출력
! 증가하는 인덱스 번호를 사용할 경우 for each 문을 사용할 수 없다
'java 스터디' 카테고리의 다른 글
java 스터디 여름방학 3주차 (0) | 2024.07.21 |
---|---|
java여름방학 1주차 (0) | 2024.07.06 |
java스터디 6주차 (0) | 2024.05.24 |
java 5주차 (0) | 2024.05.17 |
java 스터디 4주차 (0) | 2024.05.15 |