Java (3) - 배열

JeJune Lee·2021년 8월 9일
0

Java

목록 보기
3/18

오늘은 배열을 정리해보자!

1. 배열

배열이란?: 하나의 데이터만 가지고 있던 변수와 달리 여러 개의 데이터를 가지고 있는 주머니. 즉, 여러 개의 변수를 모아놓은 또 하나의 주머니라고 생각하면 쉽다.

배열의 선언 방식은 변수 선언과 비슷하다.

int i = 10; //변수 선언 방식
int[] iArr = {10, 20, 30, 40, 50}; // 배열 선언 방식1

int[] iArr = new int[5]; //배열 선언 방식 2
iArr[0] = 10;
iArr[1] = 20;
iArr[2] = 30;
iArr[3] = 40;
iArr[4] = 50;

변수를 하나 쓸때는 상관이 없는데 여러개의 똑같은 자료형이 필요할 때 여러변 변수를 선언하는 것은 번거롭다. 그렇기 때문에 같은 자료형을 연속으로 선언해주는 배열을사용하면 된다!!
일단 변수 선언 방식을 보면 변수 i에다 10을 넣는 방식이었다. 배열도 비슷하다. 원하는 자료형을 []을 사용해 배열을 선언해주고 {}로 값을 초기화 해주면 된다. 하지만 변수와 마찬가지로 처음부터 초기화 하지 않아도 된다. 2번째 선언 방식을 보면 5개의 배열을 선언해주고 그 뒤에 값을 넣을 수 있다.

배열에서 가장 중요한 것은 인덱스(index)이다. 배열의 시작은 0부터 시작하게 되어있다. 그렇기 때문에 배열 5개를 선언했어도 개수가 5개이지 인덱스 5까지 접근할 수 있는 것은 아니다. 한마디로 배열 5개는 0~4까지의 인덱스를 가진 변수이다. 그리고 메모리에 배열이 만들어지고 그 배열을 구성하고 있는 데이터의 주소값이 들어 있는 것이다. 즉, 배열은 기초자료형 변수와 달리 데이터가 들어 있지 않다.

또한 배열을 구성하고 있는 데이터들의 주소값을 '래퍼런스'라고 한다. 만약 동일한 주소값을 가지고 있다면, 같은 데이터를 가리키고(가지고) 있다고 보면 된다.

public class ReferEx {
	public static void main(String[] args) {
		
		int[] iArr1 = {10, 20, 30, 40, 50};
		int[] iArr2 = iArr1;
		
		for (int i = 0; i < iArr1.length; i++) {
			System.out.println("iArr1[" + i + "] = " + iArr1[i]);
			System.out.println("iArr2[" + i + "] = " + iArr2[i]);
		}
		
		iArr2[0] = 100;
		iArr2[1] = 200;
		iArr2[2] = 300;
		iArr2[3] = 400;
		iArr2[4] = 500;
		
		for (int i = 0; i < iArr1.length; i++) {
			System.out.println("iArr1[" + i + "] = " + iArr1[i]);
			System.out.println("iArr2[" + i + "] = " + iArr2[i]);
		}
		
		System.out.println("iArr1 : " + iArr1);
		System.out.println("iArr2 : " + iArr2);
		
	}

실행해보면 둘다 동일한 값이 나오는 것을 확인 할 수 있다. iArr1가 가리키는 주소값을 iArr2에 초기화 해준 것이다. 그렇기 때문에 실행하면 동일한 결과값이 나온다. 그리고 iArr2를 중간에 변경해줬다. 이때 iArr1의 값도 같이 바뀌게 된다. 왜냐? 둘다 같은 주소값을 가리키고 있기 때문이다!!!

예제로 배열을 이용해서 키를 입력하고, 평균치를 구하는 간단한 프로그램을 보자!

import java.util.Scanner;

public class HeightAve {
	public static void main(String[] args) {
		
		String[] iArrName = {"영희", "철수", "길동", "영수", "말자"};
		int[] iArr = new int[5];
		int totalHeight = 0;
		int maxH = 0;
		int maxHIndex = 0;
		int minH = 0;
		int minHIndex = 0;
		
		
		Scanner scanner = new Scanner(System.in);
		for (int i = 0; i < iArr.length; i++) {
			System.out.print(iArrName[i] + "키를 입력 하세요. : ");
			iArr[i] = scanner.nextInt();
			totalHeight = totalHeight + iArr[i];
		}
		
		System.out.println("학생들의 평균 신장은 " + (totalHeight/iArrName.length) + "입니다.");
		
		for(int i = 0; i<iArr.length; i++) {
			if(iArr[i] > maxH) {
				maxH = iArr[i];
				maxHIndex = i;
			}
		}
		System.out.println("가장 큰 학생은 " + iArrName[maxHIndex] + "입니다.");
		
		minH = maxH;
		for(int i = 0; i<iArr.length; i++) {
			if(iArr[i] < minH) {
				minH = iArr[i];
				minHIndex = i;
			}
		}
		System.out.println("가장 작은 학생은 " + iArrName[minHIndex] + "입니다.");
		
	}

scanner를 통해 배열의 길이만큼 반복하는 동안 입력을 해주는 것이다. 그리고 그 값을 totalHeight에 계속 더한다음 이또한 배열의 길이만큼 나눠주면 된다. 가장 큰 학생과 작은 학생을 구하는 방법은 iArr의 각각 요소들을 비교하면 된다. 비교하면서 가장 큰 값은 maxH로 가장 작은 값은 minh로 넣어주면 되는 것이다.!!

2. 다차원 배열

다차원 배열도 1차원 배열이랑 거의 유사하다. 배열이 가리키는 데이터에 또다른 배열이 들어 있는 구조이다. 예제로 확인해보자!

import java.util.Arrays;

public class MultiArrEx {
	public static void main(String[] args) {
		
		int[][] iArr = new int[3][];
		iArr[0] = new int[2];
		iArr[1] = new int[3];
		iArr[2] = new int[2];
		
		iArr[0][0] = 10;
		iArr[0][1] = 20;
		
		iArr[1][0] = 100;
		iArr[1][1] = 200;
		iArr[1][2] = 300;
		
		iArr[2][0] = 1000;
		iArr[2][1] = 2000;
		
		for (int i = 0; i < iArr.length; i++) {
			for(int j=0; j < iArr[i].length; j++) {
				System.out.println(iArr[i][j]);
			}
		}
		
		for (int i = 0; i<iArr.length; i++) {
			System.out.println(Arrays.toString(iArr[i]));
		}
		
	}

먼저 2차원 배열을 선언하는 방법은 []를 한번 더 입력해주면 된다. 마치 행과 열처럼 이루어진 구조이다. 각각 값을 넣어준다음 포문으로 찍어주는 것이다. 행과열 구조이기 때문에 이중포문을 사용한 것이다. toString은 배열 객체의 정보를 전부 찍어주는 메소드이다.

오늘은 여기까지..

오늘은 간단히 배열에대한 정리를 작성해보았다. 아직까지는 다른 언어들과 크게 다른점은 없지만 곧 나올 메소드와 객체 개념부터가 진짜 Java이다!! Java는 상당히 재미있다. 이렇게 다시 정리할 때도 넘넘 재밌는 것 같다.

profile
Being Server developer

0개의 댓글