프로그래밍/JAVA

[JAVA] 배열 사용법

노력의천재 2020. 9. 3. 00:37
/* 20200903 - 자바 배열의 개념, 사용법 스터디 */

import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.IntStream;

public class MainClass {
    public static void main(String[] args) {
        // 배열 선언 후 초기화
        int[] arr1 = new int[5];
        IntStream.range(0, arr1.length).forEach(i -> {
            arr1[i] = 100 * (i + 1);
            System.out.println("arr1[" + i + "] : " + arr1[i]);
        });

        // 배열 선언과 동시에 초기화
        int[] arr2 = {10, 20, 30, 40, 50};
        IntStream.range(0, arr2.length).forEach(i -> {
            arr2[i] = 10 * (i + 1);
            System.out.println("arr2[" + i + "] : " + arr2[i]);
        });

        // ArrayIndexOutOfBoundsException
        // System.out.println(arr2[6]);

        // 배열을 이용한 학사관리
        String[] name = {"박찬호", "이승엽", "박병호", "이병규", "류현진"};
        int[] score = new int[5];
        Scanner scanner = new Scanner(System.in);
        IntStream.range(0, name.length).forEach(i -> {
            System.out.println(name[i] + "의 점수를 입력하세요 : ");
            score[i] = scanner.nextInt();
        });
        IntStream.range(0, score.length).forEach(i -> {
            System.out.println(name[i] + "의 점수 : " + score[i]);
        });


        int[] arrAtt1 = {10, 20, 30, 40, 50};
        int[] arrAtt2 = null;
        int[] arrAtt3 = null;

        // 배열 길이
        System.out.println("arrAtt1.length : " + arrAtt1.length);

        // 배열 요소 출력
        System.out.println("arrAtt1 : " + Arrays.toString(arrAtt1));

        // 배열 요소 복사 (arrAtt1과 arrAtt3의 주소는 같지 않음, 즉 둘은 다른 객체)
        arrAtt3 = Arrays.copyOf(arrAtt1, arrAtt1.length);
        System.out.println("arrAtt3 : " + Arrays.toString(arrAtt3));

        // 배열 레퍼런스
        arrAtt2=arrAtt1;
        System.out.println("arrAtt1 = " + arrAtt1);
        System.out.println("arrAtt2 = " + arrAtt2); // arrAtt1 == arrAtt2
        System.out.println("arrAtt3 = " + arrAtt3); // arrAtt1 != arrAtt3

        // 다차원 배열
        int[][] arrMul = new int[3][2]; // 3행 2열의 2차원 배열
        System.out.println("행 길이 : " + arrMul.length);
        System.out.println("열 길이 : " + arrMul[0].length);
        
        scanner.close();
    }
}

추가로 알게된 점

배열의 이름은 첫번째 인덱스의 주소값을 담고있다.

배열 객체를 생성하고 난 후 배열의 길이는 불변이다.

배열의 메모리 크기는 배열을 구성하는 데이터 자료형에 의해 결정된다.

ex) int[] arr = new int[3]; 일 때 배열의 크기는 3이고, int형은 4byte이므로 총 12byte의 메모리 크기가 필요

 

궁금한 점

배열은 왜 객체로 선언될까?