[Java] Chapter 13. 배열

codeer·2021년 8월 29일
0

윤성우의 열혈 Java

목록 보기
7/12
post-thumbnail

📌13-1. 1차원 배열의 이해와 활용

1차원 배열 : 타입이 같은 둘 이상의 데이터를 저장할 수 있는 1차원 구조의 메모리 공간

이 때, 배열에 저장되는 데이터들은 메모리 상에 연속적으로 놓이게 된다.

int[] ref = new int[5];

먼저, 좌변의 int[] ref의 결과로 int 형 변수로 이루어진 배열을 참조하는 참조 변수를 만들게 된다.

우변의 new int[5]를 통해서 5 개의 int 형 변수를 위한 공간을 가진 배열 인스턴스를 만든다. 즉, 배열도 인스턴스로 만들어지기 때문에 그 안에 메소드들이 존재한다.

따라서, ref는 배열 인스턴스를 가리키는 참조 변수이다.

참조 변수의 선언과 배열 인스턴스의 선언이 구분되기 때문에 굳이 한 줄로 적지 않아도 된다.

int[] arr1 = new int[5];

int[] arr2;
arr2 = new int [3];

배열에는 기본 자료형 뿐만 아니라 우리가 정의한 클래스의 인스턴스도 담을 수 있다. 정확히는 배열에 각 인스턴스의 참조값을 담게 된다.

class Box {...}

Box[] arr = new Box[5];

배열의 개별 요소에 접근할 때에는 인덱스를 기반으로 접근할 수 있다.

int[] arr = new int[3];

arr[0] = 7;
arr[1] = 8;
arr[2] = 9;

위의 코드를 생성과 동시에 초기화로 진행할 수 있다.

int[] arr = {7, 8, 9};

배열을 사용하는 큰 이유이자 배열의 장점은 반복문을 통해서 순차적으로 접근할 수 있다는 것이다.

배열의 참조 변수는 하나의 클래스 내에서만 쓰이는 것이 아니라 참조값을 메소드로 전달할 수도 있고 메소드로부터 받을 수도 있다.

// 매개변수로 배열 참조 변수 선언
static int sumOfAry(int[] arr) {...}

// 메소드의 배열 참조값 반환
static int[] makeNewIntAry(int len) {...}

기본 자료형 배열은 모든 요소가 0으로 초기화가 되고,
인스턴스 배열은 모든 요소가 null로 초기화가 된다.

우리가 배열의 초기화 메소드를 이용해서 원하는 값으로 초기화를 시켜줄 수 있다.

// java.util.Arrays 클래스에 정의

// arr 배열의 요소를 7로 초기화
Array.fill(arr, 7)

// arr 배열의 idx 3부터 4까지 7로 초기화
Array.fill(arr, 3, 5, 7)

하나의 배열에서 다른 배열로의 복사도 가능하다.

// java.lang.System 클래스에 정의

// arr1의 idx 0부터 4개의 값을 arr2의 idx 3에 복사
System.arraycopy(arr1, 0, arr2, 3, 4)

main 메소드의 선언 시에 매개변수로 String[]을 받았다.
이는 지금까지 공부했듯이, String 인스턴스로 이루어진 배열을 매개변수로 받는다는 뜻이다.

실제로 명령 프롬프트에서 자바 파일을 실행할 때 확인해 볼 수 있다.

class Simple {
    public static void main(String[] args) {
        for(int i=0; i<args.length; i++) 
            System.out.println(args[i]);
    }
}

📌13-2. enhanced for문 (for-each문)

배열을 사용하는 데에 반복문이 매우 빈번하게 사용된다. 그러나 지금까지 우리가 사용해온 for문을 사용하면 매번 사용하기 귀찮기 때문에 배열을 위한 새로운 반복문을 만들었다.

int[] arr = {1, 2, 3, 4, 5}

// 기존의 for문
for(int i=0; i<arr.length; i++) {
    System.out.println(arr[i]);
}

// for-each문
for(int e : arr) {
    System.out.println(e);
}

이렇게 작성하게 되면 코드의 양이 줄고 배열의 길이와 요소에 신경 쓸 필요 없다.

대신에 for-each문 안의 자료형은 배열 요소의 자료형과 일치시켜야 한다.


📌13-3. 다차원 배열의 이해와 활용

우리가 주로 다루는 배열은 1차원이고 가끔 2차원과 아주 가끔 3차원을 다루게 될 것이다.

2차원 배열은 독립된 1차원 배열의 모임이기 때문에 위와 같이 모든 배열의 길이가 같을 필요가 없다.

또한, 배열 역시 인스턴스임을 잊지 말자.


🔗강의 및 자료 출처

네이버 카페 || 윤성우의 프로그래밍 스터디그룹

profile
Hello World!

0개의 댓글

관련 채용 정보