Langauge/Java-basic

[Java] 배열

강잇 2022. 7. 11. 22:58

배열이란

  • 배열이란 동일한 타입의 값들을 하나의 묶음으로 묶은 자료 구조
  • 배열은 생성할 때 배열의 크기를 지정해야 하며 한 번 선언한 크기는 변경 불가
    EX. int[] numbers = new int[4]; -> int형 데이터가 4개 들어갈 수 있는 배열
  • 배열은 참조 자료형으로, 데이터의 원본 값은 힙 메모리에 저장된다.
  • 힙 메모리 영역의 모든 값은 강제로 초기화되며, 배열에 값을 할당하지 않으면 자료형에 맞게 강제 초기화된다.
    (정수:0, 실수:0.0, boolean:false String:null 등)

1차원 배열

개인적으로 배열과 딱 맞는 이미지

1차원 배열의 선언

배열을 선언하면 스택 메모리에 변수에 대한 공간만 생성하고, 스택 메모리 특성 상 초기화를 해주지 않으면 빈 공간으로 유지된다.

// 1차원 배열 선언
자료형[] 변수명;
자료형 변수명[];

1차원 배열 객체 생성 및 대입

  • new 키워드를 사용하여 객체 생성
  • 객체는 힙 메모리 영역에 생성되며, 배열의 데이터가 저장
  • 객체 생성과 대입은 분리 가능
// 객체 생성 및 대입 
자료형[] 변수명 = new 자료형[배열의 길이];
// 객체 생성 및 대입 분리
자료형[] 변수명;
변수명 = new 자료형[배열의 길이];

1차원 배열 값 할당 및 읽기

  • 배열은 데이터를 저장할 수 있는 공간마다 방 번호가 존재하며 방 번호를 'Index(인덱스)'라고 한다.
  • Index는 항상 0부터 시작하며 1씩 증가한다.
  • 존재하지 않는 Index를 호출하면 예외가 발생하며 프로그램이 종료된다. (Index : 0 ~ 배열의 길이 - 1)
// 배열의 해당 인덱스(방)에 값 할당
참조 변수명[인덱스] = 값;

// 배열의 해당 인덱스 방 번호 읽기
참조 변수명[인덱스];

// 위의 약 케이스로 예시
int[] pillCase = new int[7];
// 첫 번째 공간에 알약 2알 저장
pillCase[0] = 2;
// 두 번째 공간에 알약 5알 저장
pillCase[1] = 5;
// 첫 번째 공간에 약 개수 출력
System.out.println(pillCase[0]); // 출력 : 2
int[] fillCase = new int[7]; (알약 케이스)
인덱스 : 0
알약 : 2
인덱스 : 1
알약 : 5
인덱스 : 2
알약 : 0
인덱스 : 3
알약 : 0
인덱스 : 4
알약 : 0
인덱스 : 5
알약 : 0
인덱스 : 6
알약 : 0

1차원 배열 값 할당의 다양한 방법

// 방법1) 배열 선언과 객체를 생성 후 인덱스로 값 할당
자료형[] 참조 변수명 = new 자료형[배열의 길이];
참조 변수명[0] = 값;
참조 변수명[1] = 값;
...
참조 변수명[배열의 길이 - 1] = 값;

// 방법2) 배열 객체 생성할 때 값을 같이 할당
자료형[] 참조 변수명 = new 자료형[배열의 길이]{값1,값2,값3,...};
자료형[] 참조 변수명 = new 자료형[]{값1,값2,값3,...}; // 배열 길이 생략 시 중괄호의 개수로 자동 컴파일

// 방법3) 객체 생성 X
자료형[] 참조 변수명 = {값1,값2,값3,...};

/*
배열 선언과 객체 생성은 분리할 수 있지만, 객체 생성을 하지 않는 방법으로는 분리할 수 없다.
자료형[] 참조 변수명;
참조 변수명 = {값1,값2,값3,...} (X)
*/

 

2차원 배열

9줄 바둑판

2차원 배열 개념

  • 2차원 배열이란 가로 및 세로 방향의 2차원으로 데이터를 저장하는 배열
  • 위의 사진과 같이 모든 행의 길이가 같은 배열을 '2차원 정방 행렬 배열'이라고 한다.
  • 배열이 2차원 이상일 때, 마지막 차수에 해당하는 열의 길이를 고정하지 않아도 되며, 이러한 배열을 가변 배열(비정방 행렬 배열)이라 한다.

2차원 배열 선언

자료형[][] 변수명;
자료형 변수명[][];
자료형[] 변수명[];

2차원 배열 객체 생성 및 값 할당

// 방법1) 인덱스를 이용하여 값 할당
자료형[][] 참조 변수명 = new 자료형[행의 길이][열의 길이];
참조 변수명[0][0] = 값;
참조 변수명[0][1] = 값;
참조 변수명[0][2] = 값;
...
참조 변수명[행의 길이 - 1][열의 길이 - 1] = 값;

// 방법2) 배열 객체의 행에 열의 배열 대입
자료형[][] 참조 변수명 = new 자료형[행의 개수][];
참조 변수명[0] = 1차원 배열 객체 생성
참조 변수명[1] = 1차원 배열 객체 생성
...
참조 변수명[행의 길이 - 1] = 1차원 배열 객체 생성

// 방법3) 배열 객체 생성과 동시에 값 할당 (배열 선언과 배열 객체 생성 분리 가능)
자료형[][] 참조 변수명 = new 자료형[][] {
    {값,값,값},
    {값,값,값},
    ...
}

// 방법4) 객체 생성 X (배열 선언과 값 대입 분리 불가)
자료형[][] 참조 변수명 = {
    {값,값,값},
    {값,값,값},
    ...
}