본문 바로가기

Java

자바 배열과 메모리

훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com

 

 

배열이 메모리에 생성되는 방식


1차원 배열

int [] intArr = {1,2,3,4}

2차원 배열

int [][]intArr = {{1, 2}, {3, 4}};

이 외 3차원... 으로 나아가는 배열도 마찬가지입니다.



배열과 for문


자바에서는 배열이 단순 연속된 메모리의 형태가 아니라 객체 형태로 저장이 되기 때문에,

length라는 메서드를 제공합니다. (배열에 원소가 몇 개 있는지 알 수 있음)

 

그래서 제공하는 메서드를 사용하여 (index out of bound 등을 예방할 수 있음)

for 반복문을 사용하는 경우가 많습니다.

        //일차원 배열
        int[] intArr = {1,2,3,4};
        
        for (int i = 0; i < intArr.length; i++) {
            System.out.println(intArr[i]);
        }

	//이차원 배열
	int[][] intArr = {{1,2},{3,4}};
    
        for (int i = 0; i < intArr.length; i++) {
            for (int j = 0; j < intArr[i].length; j++) {
                System.out.println(intArr[i][j] + " ");
            }
        }

위와 같이 사용하는 것이 일반적입니다.

 

또한 위와 같이 사용한다면 "ragged array"를 다루는 데도 효율적입니다.

ragged array

위 그림처럼 배열이지만 그 길이가 일정하지 않은 것을 ragged array라고 합니다.

위와 같은 배열을 index로 사용한다면 out of bound에러가 뜰 확률이 높아지겠죠?

하지만 위에서 소개드렸던 for문으로 사용하면, 그럴 일이 없습니다.

    public static void main(String[] args) {

        int num = 1;
        int[][] intArr;

        intArr = new int[2][];
        intArr[0] = new int[3];
        intArr[1] = new int[4];

        for (int i = 0; i < intArr.length; i++) {
            for (int j = 0; j < intArr[i].length; j++) {
                intArr[i][j] = num++;
                System.out.print(intArr[i][j] + " ");
            }
            System.out.println("");
        }
   }

위는 ragged array를 만들고, 다루는 방법입니다. intArr, intArr[0], intArr[1] 하나하나가 레퍼런스 변수이기 때문에

얼마나 길이를 할당할지는 프로그래머가 결정할 수 있기에,. length를 사용하는 습관을 들이는 것이 좋겠습니다.

 


for-each

        String[] strArr = {"안녕", "하세요", "반갑습니다"};
        for (String str : strArr) {
            System.out.println(str);
        }

자바에서 위와 같이 사용하는 문법을 for-each문이라고 합니다.

배열을 하나씩 돌면서 str에 값을 할당해줍니다. (값을 복사합니다)

그러므로 for문 안에서 값을 변경한다고 해도, 원래 배열에 영향을 주지 않습니다.


 

'Java' 카테고리의 다른 글

클래스와 객체(미완성)  (0) 2021.04.06
예외 처리  (0) 2021.04.06
레퍼런스 변수와 메모리, 에러  (0) 2021.03.30
Scanner로 키보드 입력 받기  (0) 2021.03.23
타입 변환  (0) 2021.03.23