자바의 배열 Array

hams·2023년 12월 15일
1

자바

목록 보기
10/11
post-thumbnail

Array

배열이 필요한 이유? 같은 타입의 변수를 하나로 묶어서 사용이 가능하기 때문
배열은 하나의 변수에 여러 데이터를 정리정돈해서 담아두기 위한 자료 구조로, 이를 통해 여러 정보를 효율적으로 다룰 수 있기 때문에 필요하다.

  • 중복해서 변수를 선언하지 않아도 되고, 메모리 절약이 가능하다.
  • 코딩 코드를 줄일 수 있다.

배열은 같은 타입의 변수를 사용하기 편하게 하나로 묶어둔 것이다.

1. 배열 변수의 선언

int[] foods;

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

2. 배열 생성

foods = new int[5]

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

배열의 초기화

자바는 지역변수와는 다르게 생성하면 자동으로 초기화를 해준다.

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

3. 배열 참조값 보관

foods = x001; //배열 참조값 보관
배열의 크기만큼 메모리를 확보한다.
-new int[5] 로 배열을 생성하면 배열의 크기만큼 메모리를 확보한다. => int형은 4byte니까 4byte * 5 -> 20byte 확보

  • 배열을 생성하고 나면 자바는 메모리 어딘가에 있는 이 배열에 접근할 수 있는 참조값(주소값)( x001 )을 반환한다.
  • 앞서 선언한 배열 변수인 int[] foods 에 생성된 배열의 참조값( x001 )을 보관한다.
  • int[] foods 변수는 new int[5] 로 생성한 배열의 참조값을 가지고 있다.

4. 배열 사용

(1) 인덱스

배열은 변수와 사용법이 비슷한데, 차이점이 있다면 [] 사이에 숫자 번호를 넣어주면 된다. 배열의 위치를 나타내는 숫자를 인덱스(index)라 한다.

//변수 값 대입 
foods[0] = 90; 
foods[1] = 80;

//변수 값 사용
System.out.println("음식1 점수: " + foods[0]);
System.out.println("음식2 점수: " + foods[1]);
⚠️ 중요 배열은 0부터 시작한다

new int[5] 와 같이 5개의 요소를 가지는 int 형 배열을 만들었다면 인덱스는 0,1,2,3,4 가 존재한다.

(2) 배열에 값 대입

배열에 값을 대입하든 배열의 값을 사용하든 간에 일반적인 변수와 사용법은 같다. 추가로 [] 를 통해 인덱스만 넣으면 된다.

foods[1] = 80; //1. 배열에 값을 대입
x001[1] = 80; //2. 변수에 있는 참조값을 통해 실제 배열에 접근. 인덱스를 사용해서 해당 위치의 요소에 접근, 값 대입

(3) 배열 값 읽기

배열을 사용하면 이렇게 참조값을 통해서 실제 배열에 접근하고 인덱스를 통해서 원하는 요소를 찾는다.

//1. 변수 값 읽기
System.out.println("음식1 점수: " + foods[0]);
//2. 변수에 있는 참조값을 통해 실제 배열에 접근. 인덱스를 사용해서 해당 위치의 요소에 접근
System.out.println("음식1 점수: " + x001[0]);
//3. 배열의 값을 읽어옴
System.out.println("음식1 점수: " + 90); ```

5. 배열 리팩토링

리펙토링(Refactoring)은 기존의 코드 기능은 유지하면서 내부 구조를 개선하여 가독성을 높이고, 유지보수를 용이하게 하는 과정을 뜻한다. 이는 중복을 제거하고, 복잡성을 줄이며, 이해하기 쉬운 코드로 만들기 위해 수행된다. 즉, 코드를 개선하는 것을 뜻함

변경 전 코드

 //변수 값 사용
        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]);

위의 코드는 변수명이 students 로 같기 때문에 숫자가 반복되는 부분을 리팩토링 할 수 있다.

변경 후 코드

        //for문 사용
        for (int i = 0; i < 5 ; i++) {
            System.out.println("학생" + (i+1)+ " 점수 " + students[i]);
        }

반복문을 사용해서 배열을 통해 값을 사용하는 부분을 변경했다.

배열은 {}만 사용해서 생성과 동시에 편리하게 초기화 하는 기능을 제공한다.

  int[] students;
  students = new int[]{90, 80, 70, 60, 50}; //배열 생성과 초기화
  

students = new int[5];로 표현한 부분을 students = new int[]{90, 80, 70, 60, 50};게 적음으로서 배열의 생성과 초기화가 한번에 가능하다

int[] students = {90, 80, 70, 60, 50}; //배열 생성과 초기화

이렇게 적으면 배열의 생성과 초기화를 더 간략히 적을 수 있다.

아래처럼은 안 된다. 변수의 선언과 동시에 적어야함

int[] students; 
students = {90, 80, 70, 60, 50}; 

6. 2차원 배열

2차원 배열은 하나의 차원이 추가되어 있는 배열로, 행과 열로 구성된다.
2차원 배열은 int[][] arr = new int[2][3] 와 같이 선언하고 생성한다.
arr[1][2] 와 같이 사용하는데, 먼저 행 번호를 찾고, 그 다음에 열 번호를 찾으면 된다.
행은 영어로 row(로우), 열은 영어로 column(컬럼)이라 한다.

arr[행][열] , arr[row][column]

아래의 방법으로 쉽게 선언이 가능하다

        int[][] arr = new int[][]{
            {1, 2, 3},
            {4, 5, 6}
        }; //행2, 열3

2차원 배열의 초기화

2차원 배열은 {{1, 2, 3},{4, 5, 6}} 괄호를 하나 더 묶어서 초기화한다.
{{},{}} 를 생각해보면 arr 배열은 {} , {} 2개의 배열 요소를 가진다.

0개의 댓글