not bad 한 개발

Java - 객체배열 본문

Java/Java class

Java - 객체배열

leebean 2022. 3. 29. 09:48

(이 글의 내용은 YouTube의 남궁성의 정석코딩 채널의 강의를 듣고 배운 내용을 포스트 하겠습니다.)

https://youtube.com/playlist?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp 

 

자바의 정석 기초편(2020최신)

최고의 자바강좌를 무료로 들을 수 있습니다. 어떤 유료강좌보다도 낫습니다.

www.youtube.com

 

 객체배열 

  • 객체배열은 말 그대로 객체를 배열처럼 사용한다는 의미입니다.
  • 객체배열을 사용하는데 반드시 인스턴스 주소를 객체배열에 저장해줘야 합니다.
  • 배열과 마찬가지로 객체배열도 2차원 배열을 만들 수 있습니다.

 

(1차원 객체배열 예시 1)

class Array { // 클래스 Array 선언
    int num1;
}
public class test {
    public static void main(String[] args) {
        Array array1 = new Array();
        // array1이름의 참조변수 선언과 동시에 Array인스턴스의 주소를 array1에 저장
        Array array2 = new Array();
        Array array3 = new Array();

        array1.num1 = 10;
        // array1의 멤버변수 num1에 10을 저장
        array2.num1 = 20;
        // array2의 멤버변수 num1에 20을 저장
        array3.num1 = 30;
        // array3의 멤버변수 num1에 30을 저장
        System.out.printf("%d ",array1.num1); // 10
        System.out.printf("%d ",array2.num1); // 20
        System.out.printf("%d%n",array3.num1);  // 30

        Array[] arraytest = new Array[3];
        // 길이가 3인 arraytest객체배열 선언
        arraytest[0] = new Array();
        // arraytest[0]에 Array 인스턴스 주소 저장
        arraytest[1] = new Array();
        arraytest[2] = new Array();

        arraytest[0].num1 = 10;
        arraytest[1].num1 = 20;
        arraytest[2].num1 = 30;
        System.out.printf("%d ",arraytest[0].num1); // 10
        System.out.printf("%d ",arraytest[1].num1); // 20
        System.out.printf("%d%n",arraytest[2].num1);  // 30
        
        Array[] arraysecond = { new Array(), new Array(), new Array()};
        // 객체배열을 생성하는 두 번째 방법
        arraysecond[0] = new Array();
        arraysecond[1] = new Array();
        arraysecond[2] = new Array();

        arraysecond[0].num1 = 10;
        arraysecond[1].num1 = 20;
        arraysecond[2].num1 = 30;
        System.out.printf("%d ",arraysecond[0].num1); // 10
        System.out.printf("%d ",arraysecond[1].num1); // 20
        System.out.printf("%d%n",arraysecond[2].num1);  // 30
    }
}

 

(1차원 객체배열 예시 2)

import java.util.Scanner;

class Array { // 클래스 Array 선언
    int num1; // 멤버변수 num1
    int num2; // 멤버변수 num2
    public void getter(int num1, int num2){
        this.num1 = num1; // 랜덤 값 num1를 멤버변수 num1에 저장
        this.num2 = num2; // 랜덤 값 num2를 멤버변수 num2에 저장
    }
    public int setter(){
        int num = 0; // num 선언
        num = this.num1 + this.num2;
        // num에 num1, num2를 더한 값을 저장
        return num;
        // num을 리턴
    }
    public void view(int cnt){
        System.out.printf("==================%n");
        System.out.printf("array[%d]%n",cnt); // 배열의 현재 번호 출력
        System.out.printf("num1 : %d%n",this.num1);
        System.out.printf("num2 : %d%n",this.num2);
        System.out.printf("num1 + num2 = %d%n",setter());
        // setter함수로 num1, num2를 더해준다.
    }
}
public class test {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.printf("만들 배열의 수를 정수로 입력하십시오 : ");
        int count = scan.nextInt(); // 정수형으로 임의의 수를 입력받아 count에 저장
        Array[] array = new Array[count]; // count만큼 객체배열 생성
        for(int i = 0; i < count; i++){ // count에서 1뺀 만큼 반복
            array[i] = new Array(); 
            // 인스턴스의 주소를 array[i]에 저장
            array[i].getter((int)(Math.random() * 10),(int)(Math.random() * 10));
            // array의 getter함수를 통해 첫 번째, 두 번째 매개변수에 1 ~ 10 랜덤 값을 넣어준다.
        }
        for(int j = 0; j < count; j++){ // count에서 1뺀 만큼 반복
            array[j].view(j);
            // array의 view함수를 통해 객체배열의 내용을 출력
        }
    }
}

위의 예제는 입력받으면 입력받은 수만큼 객체배열을 만들고 for문을 통해 인스턴스 주소를 저장하고 객체배열에 랜덤 값을 넣은 후 다음 for문에서 객체배열의 전체 내용을 출력하는 코드입니다. 

 

(2차원 객체배열 예시 1)

class DoubleArray{ // DoubleArray 클래스선언
    int num1; // 멤버변수 num1
    int num2; // 멤버변수 num2

    public DoubleArray(int num1, int num2){
        // 생성자를 선언하여 배열에 값을 저장
        this.num1 = num1; // 매개변수 num1을 멤버변수 num1에 저장
        this.num2 = num2; // 매개변수 num2을 멤버변수 num2에 저장
    }
    public int getDoubleArray_one(){
        // 멤버변수 num1을 리턴하는 멤버 메소드
        return this.num1; // 멤버변수 num1을 리턴
    }
    public int getDoubleArray_two(){
        // 멤버변수 num2을 리턴하는 멤버 메소드
        return this.num2; // 멤버변수 num2를 리턴
    }
    public void showcases(int cnt1, int cnt2){
        // 배열의 내용을 출력하는 멤버 메소드
        System.out.printf("=====[%d][%d]=====%n",cnt1,cnt2);
        System.out.printf("num1 = %d%n",getDoubleArray_one()); // num1의 내용을 출력
        System.out.printf("num2 = %d%n",getDoubleArray_two()); // num2의 내용을 출력
        System.out.printf("================%n");
    }
}
public class test {
    public static void main(String[] args) {
        DoubleArray[][] doubleArray = new DoubleArray[3][];
        // 2차원 객체배열을 3만큼 생성

        for(int i = 0; i < doubleArray.length; i++){ // 1차원 배열의 길이만큼 반복
            doubleArray[i] = new DoubleArray[(int)(Math.random() * 5) + 1];
            // 2차원 배열을 초기화하는데 난수로 2차 배열 공간을 정해준다.
        }

        for(int i = 0; i < doubleArray.length; i++){ // 1차원 배열의 길이만큼 반복
            for(int j = 0; j <doubleArray[i].length; j++){ // 2차원 배열의 길이만큼 반복
                doubleArray[i][j] = new DoubleArray((int)(Math.random() * 5) + 1,(int)(Math.random() * 5) + 1);
                // 생성자를 통해 난수로 배열에 내용을 넣어준다.
            }
        }

        for(int i = 0; i < doubleArray.length; i++){ // 1차원 배열의 길이만큼 반복
            for(int j = 0; j <doubleArray[i].length; j++){ // 2차원 배열의 길이만큼 반복
                doubleArray[i][j].showcases(i,j);
                // 배열에 저장되어있는 내용을 출력
                System.out.println(); // 다음줄 이동
            }
        }
    }
}

2차원 객체배열을 3만큼 생성하고 2차원 배열의 크기를 선언한 후, 객체배열의 내용을 난수로 채운 후 출력하는 예제입니다.

'Java > Java class' 카테고리의 다른 글

Java - 객체 생성과 사용  (0) 2022.03.29
Java - 한 파일에 여러 클래스 작성  (0) 2022.03.29
Java - 클래스와 객체  (0) 2022.03.29
Java - 객체지향 프로그래밍  (0) 2022.03.20
Java - JDK 설치 및 Java파일 실행  (0) 2022.03.10
Comments