본문 바로가기
[JAVA]

[처음부터 다시 하는 JAVA] 배열 시작

by 북방바다코끼리표범 2024. 1. 15.

처음부터 다시 하는 자바 공부는 인프런의 김영한 강사님의 강의를 참고해서 공부했다.

 

배열 시작

배열이 필요한 이유

학생의 점수를 출력하는 간단한 프로그램을 작성해보자.

package array; 

public class Array1 {
	public static void main(String[] args) {
        int student1 = 90;
        int student2 = 80;
        int student3 = 70;
        int student4 = 60;
        int student5 = 50;
        
        System.out.println("학생1 점수: " + student1);
        System.out.println("학생2 점수: " + student2);
        System.out.println("학생3 점수: " + student3);
        System.out.println("학생4 점수: " + student4);
        System.out.println("학생5 점수: " + student5);
	} 
}
실행 결과
학생1 점수: 90 
학생2 점수: 80 
학생3 점수: 70 
학생4 점수: 50 
학생5 점수: 90
  • 학생을 몇 명 더 추가해야 한다면 변수를 선언하는 부분과 점수를 출력하는 부분의 코드도 추가해야한다.
    학생을 몇 명 더 추가하는 것은 개발자가 코딩으로 해결할 수 있겠지만, 학생을 수백 명 이상 추가해야 한다면 코드가 상당히 많이 늘어날 것이다. 결국 학생 수가 증가함에 따라 코딩 양이 비례해서 증가하는 문제가 발생한다. 
  • 변수를 선언하는 부분을 보면 학생 수가 증가함에 따라 int 형 변수를 계속해서 추가해야 한다. 학생 수가 5명 이 면 int 형 변수를 5개 선언해야 하고, 학생 수가 100명이라면 int 형 변수를 100개 선언해야 한다. 결국 비슷한 변수를 반복해서 선언하는 문제가 발생한다.
  • 반복문으로 해결할 수 있을 것 같지만, 점수를 출력하는 부분을 보면 변수의 이름이 다르기 때문에 반복문도 적용 
    할 수 없다.

이렇게 같은 타입의 변수를 반복해서 선언하고 반복해서 사용하는 문제를 해결하는 것이 바로 배열이다.

 

배열의 선언과 생성

배열은 같은 타입의 변수를 사용하기 편하게 하나로 묶어둔 것이다. 이전 예제를 배열을 사용하도록 변경해보자. 
참고로 단계적으로 구조를 변경해 나갈 것이다.

package array;

public class Array1Ref1 {
	public static void main(String[] args) { 
		int[] students; //배열 변수 선언
        students = new int[5]; //배열 생성

		//변수 값 대입
        students[0] = 90;
         students[1] = 80;
        students[2] = 70;
        students[3] = 60;
        students[4] = 50;

        //변수 값 사용
        System.out.println("학생1 점수: " + students[0]);
        System.out.println("학생2 점수: " + students[1]);
        System.out.println("학생3 점수: " + students[2]);
        System.out.println("학생4 점수: " + students[3]);
        System.out.println("학생5 점수: " + students[4]);
    } 
}

 

지금부터 아주 간단해보이는 다음 두 줄을 아주 자세히 설명하겠다. 집중해서 따라오자.

int[] students; //1. 배열 변수 선언 
students = new int[5]; //2. 배열 생성

 

1. 배열 변수 선언

  • 배열을 사용하려면 int[] students; 와 같이 배열 변수를 선언해야 한다. 
  • 일반적인 변수와 차이점은 int[] 처럼 타입 다음에 대괄호( [] )가 들어간다는 점이다. 
  • 배열 변수를 선언한다고해서 아직 사용할 수 있는 배열이 만들어진 것은 아니다!
    • int a 에는 정수를, double b 에는 실수를 담을 수 있다.
    • int[] students 와 같은 배열 변수에는 배열을 담을 수 있다. (배열 변수에는 10, 20 같은 값이 아니라 배열이라는 것을 담을 수 있다)

2. 배열 생성

 

  • 배열을 사용하려면 배열을 생성해야 한다.
  • new int[5] 라고 입력하면 오른쪽 그림과 같이 총 5개의 int 형 변수가 만들어진다.
  • new 는 새로 생성한다는 뜻이고, int[5] 는 int 형 변수 5개라는 뜻이다. 따라서 int 형 변수 5개를 다룰 수 
    있는 배열을 새로 만든다는 뜻이다.
  • 앞서 int student1 , int student2  ... int student5 까지 총 5개의 변수를 직접 선언했다. 배열을 사 
    용하면 이런 과정을 한번에 깔끔하게 처리할 수 있다.

배열과 초기화

  • new int[5] 라고 하면 총 5개의 int 형 변수가 만들어진다. 자바는 배열을 생성할 때 그 내부값을 자동으로 초기화한다.
  • 숫자는 0 , boolean 은 false , String 은 null (없다는 뜻이다.)로 초기화 된다.

3. 배열 참조값 보관

  • new int[5] 로 배열을 생성하면 배열의 크기만큼 메모리를 확보한다. 
    • int 형을 5개 사용하면 4byte * 5  20byte 를 확보한다.
  • 배열을 생성하고 나면 자바는 메모리 어딘가에 있는 이 배열에 접근할 수 있는 참조값(주소)( x001 )을 반환한다.
    • 여기서 x001 이라고 표현한 것이 참조값이다. (실제로 x001 처럼 표현되는 것은 아니고 이해를 돕기 위한 예시이다.)
  • 앞서 선언한 배열 변수인 int[] students 에 생성된 배열의 참조값( x001 )을 보관한다. 
  • int[] students 변수는 new int[5] 로 생성한 배열의 참조값을 가지고 있다.
    • 이 변수는 참조값을 가지고 있다. 이 참조값을 통해 배열을 참조할 수 있다. 쉽게 이야기해서 참조값을 통해 
      메모리에 있는 실제 배열에 접근하고 사용할 수 있다.
    • 참고로 배열을 생성하는 new int[5] 자체에는 아무런 이름이 없다! 그냥 int 형 변수를 5개 연속으로 만드는 것이다. 따라서 생성한 배열에 접근하는 방법이 필요하다. 따라서 배열을 생성할 때 반환되는 참조값 을 어딘가에 보관해두어야 한다. 앞서 int[] students 변수에 참조값( x001 )을 보관해두었다. 이 변수 를 통해서 이 배열에 접근할 수 있다.

이 부분을 풀어서 설명하면 다음과 같다.

int[] students = new int[5]; //1. 배열 생성
int[] students = x001; //2. new int[5]의 결과로 x001 참조값 반환 
students = x001 //3. 최종 결과

 

참조값을 확인하고 싶다면 다음과 같이 배열의 변수를 출력해보면 된다.

System.out.println(students); //[I@4617c264 @앞의 [I는 int형 배열을 뜻한다. @뒤에 16진수 
는 참조값을 뜻한다.
  • 참조값에 대한 더 자세한 내용은 뒤에서 다룬다. 지금은 생성한 배열을 참조할 수 있는, 메모리의 주소를 나타내는 특별한 값이 있다는 정도만 이해하자.