제 4장. 배열

11034 단어 JavaJava

배열이란

▶ 동일 종류의 복수 데이터를 순서대로 저장하는 데이터 구조

배열을 사용하는 이유 : 변수를 사용해서 프로그램을 사용하다보니 많은 변수를 사용하는 경우가 있는데 변수를 편리하게 사용하기 위해 배열을 이용한다.

package com.company;

public class note {
    public static void main(String[] args) {
        int math = 20;
        int korean = 30;
        int science = 40;
        int english = 50;
        int society = 80;
        //총점
        int sum = math + korean + science + society + english;
        //평균
        int average = sum / 5;

        System.out.println("합계 : " + sum);
        System.out.println("평균 : " + average);
    }
}

일반적으로 이렇게 변수 하나하나 지정해서 코드를 작성했었는데 위와 같은 경우에서 과목을 계속해서 추가하게 되었을때 코드를 변경해줘야하는 불편함이 있다.

이를 배열로 바꾸면

public class note {
    public static void main(String[] args) {

        int[] scores = {20, 30, 40, 50, 80}; //과목 순서를 알고 있다는 가정하에
//        int sum = scores[0] + scores[1] + scores[2] + scores[3] + scores[4];

        int sum = 0;
        for (int i = 0; i < scores; i++) {
            sum = sum + scores[i];
        } 
          // 이런식으로 코드를 짜게 되면 언제든지 과목추가를 편하게 할 수 있다. 
          //--> 수정하기에 편하다(유지보수, 생산성이 upgrade)
          // 이래서 배열을 사용하면 편하다.
        int avg = sum / scores.length;
        // 이때 scores의 변수가 5개 이므로 scores.length대신해서 5를 사용해주어도 
        // 되지만 그러면 변수를 늘이거나 줄어들 때 마다 변수의 개수에 대한 값을 그때마다
        // 변경 해주어야 하기 때문에 scores.length로 코드를 작성해주는것이 편리하다.

        System.out.println("합계 : " + sum);
        System.out.println("평균 : " + avg);

    }
}

위의 코드에서

 int sum = scores[0] + scores[1] + scores[2] + scores[3] + scores[4];

이렇게 사용하는데에는 문제는 없지만 배열을 사용하는 의미가 없다.
--> why? 나중에 수정할 때 불편함이 있다.

▶ 배열이란 연관된 정보를 하나의 그룹으로 관리하기 위해서 사용하는데 그 정보를 처리 할 때는 반복문을 주로 이용한다. 여기서 반복문과 배열은 매우 밀접한 관계에 있다고 볼 수 있다.

예외란?

int[] names = new int[3]에서 names[3] =10; 처럼 값을 넣어줬을때 예외가 발생한다. (0~2사이에 값에서 벗어났기때문에)

위의 사진에서 보이는것처럼 파일을 실행시켜보면 NullPointerException이라는 예외처리가 된 것을 확인 할 수있다.

QUIZ) a[0]를 출력하면 어떤 값이 나올까?

int[] a = {1, 2, 3};
        int[] b;
        b = a;
        b[0] = 100;
        System.out.println(a[0]);

Answer) 100

변수 b는 변수 a와 같은 주소를 참조한다.

a라는 저장 공간에 1(주소1),2(주소2),3(주소3)이 따로 들어있고 b라는 저장 공간에 a를 넣어주었는데 a라는 시작점은 주소가 1번지이고 b는 a의 주소 1번지를 보고 있기에(포인터 역할)
b[0]을 100으로 지정해줫을때 a[0]도 100으로 바뀌게 되는것이다. (같은 주소를 보고 있기때문에)

c언어에서의 포인터의 개념이 java에서 일반적으로 쓰이는 것을 확인 할 수 있다.

변수에 대한 주소는 변하지 않지만 변수가 가리키는 주소는 바꿀 수 있다.

Garbage Collection 이란

int[] score1 = {20,30,40,50,60};
int[] score2 = {50,60,70,80,90};

score1 = score2;

score1 = null; // 바라보고 있던 주소가 날라가게 된다.

여기서 score1이랑 score2는 다른 주소를 바라보고 있는데 score1 = score2를 만들어주므로
score2가 기존에 바라보던 주소의 값 {50,60,70,80,90}은 아무런 의미가 없는 값이 된다.

좋은 웹페이지 즐겨찾기