배열 심화

Life is ninanino·2022년 9월 18일
0

JAVA

목록 보기
9/15

2차원배열

2차원은 면으로 구성되어 있다.
면은 여러 개의 선으로 구성된다.
즉, 2차원 배열 또한 여러 개의 1차원 배열로 구성될 수 있다.

import java.io.*;

class Main {
	
	public static void main(String[] args) throws Exception {
		int [][] arr = new int[10][10]; // 2차원 배열 명시
		for(int j = 0 ; j < 10 ; j++) {
			for(int k = 0 ; k < 10 ; k++) {
				arr[j][k] = j * k;
			}
		}
		
		for(int j = 0 ; j < 10 ; j++) {
			for(int k = 0 ; k < 10 ; k++) {
				System.out.print(arr[j][k] + "\t");
			} System.out.println();
		}
	}
}

메모리 구조를 살펴보면 1차원 배열에서는 기본 자료형이 입력되어 있던 공간에 배열에 들어가 있는 것을 알 수 있다. 즉, 2차원 배열이란, "배열의 배열"이 된다

클래스 배열

import java.io.*;

class Main {
	
	public static void main(String[] args) throws Exception {
		
		// 배열의 크기를 관리하는 변수 : ArrayNum
		final int ArrayNum = 5;
		
		// 클래스 배열 변수 : CE_Array
		// 배열 변수 사이즈 지정( ArrayNum크기 만큼 배열 사이즈 지정 )
		ClassExample[] CE_Array = new ClassExample[ArrayNum];
		
		// 각 배열칸의 객체 초기화( new 객체 )
		// 생성자를 통해 객체의 iIndex 변수 초기화
		for(int j = 0 ; j < ArrayNum ; j++) {
			CE_Array[j] = new ClassExample(j);
		}
		
		// 객체 사용( Print_iIndex 메소드 사용 )
		for(int j = 0 ; j < ArrayNum ; j++) {
			CE_Array[j].Print_iIndex();
		}
	}	
}

class ClassExample {
	int iIndex;
	
	public ClassExample(int i) {
		iIndex = i;
	}
	
	public void Print_iIndex() {
		System.out.println(iIndex);
	}
}

ClassExample은 멤버변수 iIndex와 Print_iIndex 메소드를 가지고 있다.
main 메소드에서 이 클래스를 활용하여 클래스 배열을 만들고 사용하고 있다
ArrayNum은 배열의 길이를 지정하는 상수이다.
배열을 사용할 때 반복문과 함께 사용하는 경우가 많아 위처럼 배열의 길이를 상수로 지정하는 것이 일반적이다.
변수의 사이즈를 변경해야 할 시, 상수의 숫자만 변경하여 배열 길이를 조정할 수 있기 때문에 소스코드의 유지보수에 또한 용이하다.

ClassExample[] CE_Array = new ClassExample[ArrayNum];

클래스 배열 변수를 선언하고 배열의 크기를 지정해줬지만 객체가 생성되는 것은 아니다!
클래스 배열 변수를 선언하며 new를 사용했지만, 이는 생성자는 콜하는 것이 아니기 때문에 객체를 생성하는 것 또한 아니다.
이 코드는 오직 배열의 크기를 지정해주는 역할만 수행하며

CE_Array[j] = new ClassExample(j);

객체는 이 코드에서 생성된다.
반복문과 함께 각 배열칸에 new ClassExample(j)를 사용하여 각 객체에 메모리를 할당한다.
둘 다 new를 사용하는 소스코드이지만 역할이 다르다.

for(int j = 0 ; j < ArrayNum ; j++) {
			CE_Array[j].Print_iIndex();
		}

위 코드는 배열에 생성된 객체의 메소드를 사용하는 소스코드이다. 일반적인 배열에서 데이터를 불러왔던 것 처럼
배열이름[인덱스] 형태로 사용되며 이 때 불러와진 데이터는 클래스이므로 .메소드를 붙여 사용할 수 있다.

profile
백엔드 프로그래밍을 공부하고 있습니다. AWS, 클라우드 환경에 대해 관심이 많습니다.

0개의 댓글