4장 배열

배열 (array)

배열이란 동일 종류의 복수 데이터를 순서대로 저장하는 데이터 구조
배열의 최초의 요소는 0 번이다.
ex) a[0], a[1], a[2], a[3]

  1. 배열의 작성 순서 1
public class Main {
	public static void main(String[] args) {
    	int[] score;          // 배열변수의 선언
        score = new int[5];   // 요소의 작성과 대입
    }
}
  1. 배열의 작성 순서 2
public class Main {
	public static void main(String[] args) {
    	int[] score = new int[5];
    }
}
  1. 배열의 초기화
public class Main {
	public static void main(String[] args) {
    	// 배열의 요소는 자동으로 초기화된다.
        // 5개의 요소가 전부 0으로 초기화된다.
        int[] score = new int[5];
        System.out.println(score[0]);   // 에러가 아닙니다.
    }
}

배열과 예외

범위를 벗어난 요소를 이용할 때 예외(exception) 이 발생한다.
예외 : 에러가 난다.

public class Main {
 	public static void main(String[] args) {
        int[] score = {20, 30, 40, 50, 80};
        int sum = score[1] + score[2]
        		+ score[3] + score[4] + score[5];
        int avg = sum / score.length;
        System.out.println("총점 " + sum);
        System.out.println("평균 " + avg);    
    }
}

int [] score = {20, 30, 40, 50, 80} 에 5개의 값을 가지고 있다.

위에서도 말했지만 배열은 0부터 시작한다.

int sum = score[1] + score[2] + score[3] + score[4] + score[5]

이 아니라

int sum = score[0] + score[1] + score[2]+ score[3] + score[4]

이 되어야한다.

배열과 for 문

일반적인 for 문을 사용하기.

public class Main {

    public static void main(String[] args) {
        int [] score = { 20, 30, 40, 50, 80 };
        for (int i = 0; i < score.length; i++) {
            System.out.println(score[i]);
            
        }
    }
}

향상된 for 문을 사용하기

public class Main {

    public static void main(String[] args) {
        int [] score = { 20, 30, 40, 50, 80 };
        for (int value : score) {
            System.out.println(value);
            // 향상된 for 문
            

for each 문이라고도 한다. for each 문이라고 해서 each를 쓰지는 않는다.

참조 (reference)

배열처럼 변수명을 지정 했을 때, 그 값이 아니라 주소를 가리키는 것을 참조라고 한다.
그 변수를 참조형 (reference type) 변수라고한다.

public class Main {

    public static void main(String[] args) {
        int [] a ={ 1, 2, 3 };
        int [] b;
        b = a;
        b[0] = 100;
        System.out.println(a[0]);
    }
}

이런 코드가 있다면 a의 값은 무엇일까?

가비지 컬렉션(garbage collection)

new 로 확보된 요소들은 보통의 변수와 다르기 때문에, 블록이 끝나도 수명이 다하지 않는다.

public class Main {

    public static void main(String[] args) {
        boolean b = true;
        if (b == true) {
            int [] i = { 1, 2, 3 };
        }
    }
}

블록 내에서 생성된 배열은 이 후 어떤 방법으로도 읽거나 쓸 수 없고 메모리만 차지한다.
이것은 메모리 내의 쓰레기가 된다.

원래라면 사용하지 않게 된 메모리는 프로그래머가 정리를 해야하지만
Java 는 '가비지 컬렉션'이라는 장치가 스스로 정리해준다.

null

int [] 같은 참조형 변수에 대입하면, 이 변수는 아무것도 참조하지 않게 된다.

int 형 같은 기본형 변수에는 대입할 수 없다.

public class Main {
    public static void main(String[] args) {
        int [] a = { 1, 2, 3 };
        a = null;
        a[0] = 10;
    }
}

int [] a = { 1, 2, 3 } 라는 값을 주었지만
a 의 값에 null 을 대입하였다.
아무것도 참조하지 않겠다는 의미이므로
a[0] = 10; 은 범위를 벗어난다.

length

문자열과 배열의 length 는 조금 차이가 있다.

String의 length 는 한글, 영문, 공백에 상관없이 1문자로 카운트를 한다.
배열의 length 와 비슷하지만 ()를 붙여야한다.

public class Main {
    public static void main(String[] args) {
        String s = "Java로 개발";
        System.out.println(s.length());
    }
}

"Java로 개발" 은 공백을 포함하여 총 8개의 문자이다.
출력하면 8 이라는 답이 나온다.

2차원 배열

public class Main {
    public static void main(String[] args) {
        int [][] scores = new int[2][3];       
                              // 2행 3열
        scores[0][0] = 40;
        scores[0][1] = 50;
        scores[0][2] = 60;
        scores[1][0] = 80;
        scores[1][1] = 60;
        scores[1][2] = 70;
        System.out.println(scores[1][1]);
    }
}

행과 열을 쉽게 그림으로 표현해보자

저렇게 생긴 배열에 값이 들어가있다고 생각하면 이해가 쉽다.

배열의 요소 수 표시

public class Main {
    public static void main(String[] args) {
       int [][] scores = { { 10, 20, 30 }, { 30, 40, 50 } };
        System.out.println(scores.length);
        System.out.println(scores[0].length);
    }
}

위의 코드에서 각각 값이 어떻게 출력이 되는가?

첫 번째 값은 { 10, 20, 30 }, { 30, 40, 50 } 로 묶여 있기 때문에 2가 나온다.
두 번째 값은 [0]에 해당하는 값은 { 10, 20, 30 } 이다. 3개의 값이 있으므로 정답은 3

좋은 웹페이지 즐겨찾기