Java

Java 문법(8) - 이차원배열, 클래스배열

sangchu 2022. 2. 8. 12:31
int [] Arr = new int[10];
  • 배열에 대해 다시 짚어보면, 위와 같이 배열을 선언하고 메모리 할당까지 할 수 있었음
  • 위 배열은 선 형태로 연속되도록 정의하였기에 1차원 배열이며 가장 기본적인 배열임

 

2차원 배열

  • 여러 개의 1차원 배열로 구성될 수 있음
import java.io.*;

class Main {
	
	public static void main(String[] args) throws Exception {
		int [][] arr = new int[10][10];
		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. 6번째 줄에서 2차원 배열이 선언 및 정의 됨
  2. ”[ ]”를 연속하여 두 번 사용하여 해당 배열 변수가 2차원 배열임을 명시. 2차원 배열은 가장 왼쪽 위 순서 번호가 (0,0)인 행렬

  • 메모리 구조를 살펴보면 1차원 배열에서는 기본 자료형이 입력되어 있던 공간에 배열이 들어 있는 것을 알 수 있음 → 배열의 배열

 

클래스 배열

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);
	}
}
  1. 27~마지막 줄: ClassExample은 멤버변수 iIndex 와 Print_iIndex 메소드를 가지고 있고, main 메소드에서 이 ClassExample 클래스를 활용하여 클래스 배열을 만들고 사용하고 있음
  2. 8번째 줄: ArrayNum 는 배열의 길이를 지정하는 상수
    • 배열을 사용할 때 반복문과 함께 사용하는 경우가 많아 위 예시처럼 배열의 길이를 상수로 지정하는 것이 일반적 → 소스코드 유지보수 용이
  3. 12번째 줄: 클래스 배열 변수를 선언하고 배열 크기 지정(객체가 생성되는 것은 아님을 유의)
    • 클래스 배열 변수 선언하며 new 를 사용했지만, 이는 생성자를 콜하는 것이 아니기 때문에 객체를 생성하는 것 또한 아님
    • 12번째 줄은 오직 배열 크기를 지정해주는 역할만 수행, 객체는 17번째 줄에서 생성됨 반복
    • 반복문과 함께 각 배열칸에 new ClassExample(j) 을 사용하여 각 객체에 메모리 할당 → 둘 다 new 를 사용하는 소스코드지만 역할이 다르므로 사용에 유의
  4. 21~23번째 줄: 배열에 생성된 객체의 메소드를 사용하는 소스코드. 일반적인 배열에서 데이터를 불러왔던 것처럼 배열이름[인덱스] 형태로 사용되며, 이 때 불러와진 데이터는 클래스이므로 ‘ . ‘ 메소드를 붙여 사용할 수 있음

기본 자료형을 사용하는 배열과 비교하면, 클래스 배열은 생성자를 사용해주는 부분이 추가되므로 생성자 사용시에만 유의하면 괜찮음

 

 

 

 

 

 

 

 

'바로 실행해보면서 배우는 java'를 학습하며 정리한 문서