제 4장. 배열
배열이란
▶ 동일 종류의 복수 데이터를 순서대로 저장하는 데이터 구조
배열을 사용하는 이유 : 변수를 사용해서 프로그램을 사용하다보니 많은 변수를 사용하는 경우가 있는데 변수를 편리하게 사용하기 위해 배열을 이용한다.
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}은 아무런 의미가 없는 값이 된다.
Author And Source
이 문제에 관하여(제 4장. 배열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dongyunhan/제-4장.-배열저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)