본문 바로가기
java 스터디

java 여름방학 2주차

by 기록을안하면바보 2024. 7. 14.

배열

 

학생 수에 따라 같은 타입 변수를 여러개 선언하고 사용하는 문제 발생.

 

반복문으로 해결 가능?

-> 반복문으로 변수 명을 선언할 수 없기 때문에 배열이 필요

 

 

배열의 선언과 생성

 

배열: 같은 타입의 변수를 사용하기 편하게 하나로 묶은 변수.

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