본문 바로가기
Java

Java_배열 [ Array ]

by 유서담 2023. 10. 27.

배열

 

  • 배열은 같은 타입의 값을 여러 개 및 연속적으로 저장할 수 있다.
  • 배열을 이용하면 하나의 변수명으로 여러 개의 데이터를 관리할 수 있다.
  • 배열은 순서대로 번호(인덱스)가 붙은 요소들이 연속적인 형태로 저장된다.
  • 각 요소에 부여되는 번호(인덱스)는 0번부터 시작하며, 각 요소마다 순서대로 번호(인덱스)가 부여된다.
  • 인덱스의 범위는 다음과 같다
    • 0 <= 인덱스번호 < 배열의 크기
  • 배열에 저장된 데이터는 번호(인덱스)로 각 요소에 접근할 수 있다.
  • 자바의 배열은 한 번 정해진 크기를 변경할 수 없다.
    • 배열을 생성할 때 크기를 반드시 지정하거나, 배열에 저장할 값을 구체적으로 나열해야한다.
  • 배열객체의 각 칸은 해당 타입의 기본값으로 자동으로 초기화 된다

 

 

배열의 생성

 

 

배열 리터럴을 이용한 배열객체 생성

int[] arr1 = {10, 20, 30};
double[] arr2 = {10.1, 6.8, 4.2, 7.7};
String[] arr3 = {"김","이","박","최"};

 

 

new 키워드를 이용해서 빈 배열객체 생성

빈 배열객체의 각 저장소는 저장된 타입의 기본값으로 초기화 되어 있다.
int []	arr1 = new int[5];	// int타입은 0
double[] arr2 = new double[4];	// double타입은 0.0
String[] arr3 = new String[3];	// String은 null.	null은 객체를 참조하지 못하게 하는 값
//배열의 크기를 생략할 수 없다.

// 배열객체의 0번째 저장소에 값 저장하기
arr1[0] = 10;
arr2[0] = 3.14;
arr3[0] = "서울";

 

 

빈 배열의 정의

 

 

 

new 키워드를 이용해서 값을 가지는 배열객체 생성하기

int[] arr1 = new int[]{10, 20, 30}
double[] arr2 = new double[]{3.14, 1.59, 3.88};
String [] arr3 = new String[]{"서울", "수원", "대구"};

 

 

배열에 엑세스하기

 

- 배열의 각 저장소에 엑세스는 배열의 인덱스를 이용한다

 

형식

//배열에 값 저장하기
참조변수명[인덱스] = 값;

//배열에 저장된 값 사용하기
System.out.println(참조변수명[인덱스]);

 

 

배열의 길이 조회하기

참조변수명.length;

 

  • 배열객체에는 length라는 프로퍼티가 있다.
  • 프로퍼티는 객체의 구성요소고, 객체의 고유한 값을 저장하고 있다.
  • 배열의 길이는 변경할 수 없다.

 

 

배열 객체의 활용

 

 

배열객체의 생성 목적은 같은 데이터 타입의 값들을 하나의 이름으로 관리할 수 있다.

인덱스를 활용해서 배열의 각 저장소를 쉽게 엑세스할 수 있다

 

String name1 = "서울";
String name2 = "대전";
String name3 = "대구";
String name4 = "부산";

 

그동안 우리는 String 값을 저장할 때 이런식으로 String을 활용해서 하나씩 만들곤 했다

 

System.out.println(name1);
System.out.println(name2);
System.out.println(name3);
System.out.println(name4);

 

출력할 때도 이런식으로 반복해서 써야했지만 

배열을 사용하면 좀 더 편하게 저장하고 출력할 수 있음을 알 수 있다

 

String[] names = {"서울", "대전", "대구", "부산"};

for (int index=0; index<3; index++) {
	System.out.println(names[index]);
}

 

String 배열을 이용해서 같은 타입의 데이터들을 저장하고 반복문인 for문을 통하여 배열의 0번째 인덱스부터 인덱스의 끝인 3번째 인덱스까지 자동으로 출력하게 할 수 있다.

 

 


배열을 활용한 국어점수의 평균, 영어점수의 평균, 수학점수의 평균을 계산하여 출력하기

 

 

int[] korScores = {80, 80, 90, 70, 30, 50};
int[] engScores = {100, 70, 60, 50, 40, 80};
int[] mathScores = {90, 70, 40, 80, 100, 70};

// 합계를 계산하기 위한 int타입의 변수
int korTotal = 0;
int engTotal = 0;
int mathTotal = 0;

// 반복문을 활용해서 배열 안에 있는 값들을 Total변수에 저장하기
for (int index=0; index<korScores.length; index++) {
	korTotal += korScores[index];
}

for (int index=0; index<engScores.length; index++) {
	engTotal += engScores[index];
}

for (int index=0; index<mathScores.length; index++) {
	mathTotal += mathScores[index];
}

// 평균을 계산하기 위한 int 타입의 변수
int korAvg = korTotal/korScores.length;
int engAvg = engTotal/engScores.length;
int mathAvg = mathTotal/mathScores.length;

// 평균값 출력
System.out.println("국어점수 평균 : "+ korAvg); 
System.out.println("영어점수 평균 : "+ engAvg); 
System.out.println("수학점수 평균 : "+ mathAvg);

 

향상된 for문을 사용하면 배열의 0번째부터 배열의 끝까지 쉽게 값을 구할 수 있다.

 

 

// 향상된 for문을 사용해서 출력해보기
for (int value : korScores) {
	korTotal += value;
}
		
for (int value : engScores) {
	engTotal += value;
}
		
for (int value : mathScores) {
	mathTotal += value;
}

 

 

배열과 관련된 오류내용 확인하기

 

 

// 배열의 인덱스 범위를 벗어났을 때

int[] arr1 = {10, 20, 30};
System.out.println(arr[3]);

ArrayIndexOutOfBoundsException 예외발생

 

배열의 인덱스 범위를 벗어났을 때 나오는 오류 해석

 

 

 


 

임의의 정수 값을 입력받아서 그 중에서 가장 큰 값을 찾기

 

 

정수의 값을 받아서 저장하고 저장한 정수들 중 비교해서 가장 큰 값을 찾는 코드

 

출력결과

 

 


 

지정된 배열에 입력한 숫자가 저장된 위치를 알아내기

 

 

 

결과는

저장된 위치 : 4번째로 나온다

 

22번째 줄에 (position+1) 로 한 이유는 그냥 position으로 출력할 경우

인덱스 번호인 3으로 출력이 된다. ( 인덱스는 0으로 시작되기 때문)

그러나 보통 '번째'라는 말을 사용할 때 '0번째' 라고 시작하는 것이 아닌 '1번째'라고 사용하기 때문에

(position+1) 로 출력을 하게끔 했다

 

 


 

 

다차원 배열

 

 

다차원 배열은 2차원 배열의 형식

배열 리터럴을 이용한 2차원 배열객체 생성하기

// 자료형[][] 참조변수 = { {값, 값, 값}, {값, 값, 값} };
int[][] arr1 = { {11,22,33}, {44,55,66}};


new 키워드를 이용한 2차원 빈 배열객체 생성하기

// 자료형[][] 참조변수 = new 자료형[rows][cols];
int[][] arr2 = new int[2][3];

 

다차원배열 예시

 

출력결과

 

 

'Java' 카테고리의 다른 글

Java_클래스와 메소드, 오버로딩(oop)  (0) 2023.11.01
Java_객체지향프로그래밍 (oop)  (0) 2023.11.01
Java_반복문(for문, while문)  (0) 2023.10.27
Java_조건문( if문과 switch문 )  (0) 2023.10.26
Java_타입의 형변환  (0) 2023.10.24