배열(Array)


1. 배열(Array)

  • 자바는 같은 타입의 많은 데이터를 다루는 효율적인 방법인 배열을 제공
  • 배열은 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 데이터를 읽거나, 데이터를 저장하는 방법을 제공

 

2. 배열 변수의 선언

  • 변수와 마찬가지로 배열을 사용하기 위해서는 배열 변수를 선언
  • 배열 변수를 선언하는 구문은 자료형[] 변수명 또는 자료형 변수명[]
// 대괄호([])는 배열 변수를 선언할 때 사용하는 기호이다.
int[] iArray;
double dArray[];

 

3. 배열 생성 및 초기화

3.1. new 연산자로 배열 생성 및 초기화

  • 배열에 저장될 값을 배열 생성 후 저장하려면 new 연산자로 배열을 생성
  • new 연산자로 배열을 생성하는 구문은 new 자료형[배열 크기]
int[] iArray;
double dArray[] = new double[5]; // 배열 변수 선언과 동시에 배열 생성

iArray = new int[5]; // 배열 변수 선언 후 배열 생성
  • 배열이 생성되고 나서 배열에 저장되어 있는 값을 읽거나 저장, 변경하기 위해서는 배열 변수명과 인덱스를 사용
//  배열의 인덱스는 0번부터 시작한다. (Zero Base)
iArray[0] = 10; 
iArray[1] = 20; 
iArray[2] = 30; 
iArray[3] = 40; 
iArray[4] = 50;
 // iArray[5] = 60; // ArrayIndexOutOfBoundsException

System.out.println(iArray[0]); // 10 출력
System.out.println(iArray[1]); // 20 출력
System.out.println(iArray[2]); // 30 출력
System.out.println(iArray[3]); // 40 출력
System.out.println(iArray[4]); // 50 출력
// System.out.println(iArray[5]); // ArrayIndexOutOfBoundsException
  • 배열 사용 시 반복문을 활용하여 편리하게 사용이 가능
// 배열변수.length 필드로 배열의 길이를 얻을 수 있다.
for(int i = 0; i < dArray.length; i++) {
    iArray[i] = (i + 1) * 10;

    System.out.println(iArray[i]);
}

3.2. 값 목록으로 배열 생성 및 초기화

  • 배열에 저장될 값을 배열 생성과 동시에 초기화하려면 값 목록으로 배열을 생성
  • 값 목록으로 배열을 생성하는 구문은 new 자료형[] {값, 값, 값, ... } 또는 {값, 값, 값, ... }
int[] iArray = new int[] {1, 2, 3, 4, 5}; // 배열 생성과 동시에 초기화
double dArray[] = {1.1, 2.2, 3.3, 4.4, 5.5}; // 배열 생성과 동시에 초기화
  • 배열 변수를 이미 선언한 후에 중괄호를 사용한 배열 생성은 불가능
int[] iArray;

iArray = {1, 2, 3, 4, 5}; // 에러 발생
  • 배열 변수를 미리 선언한 후에 중괄호를 사용한 배열 생성은 new 연산자를 사용해서 값 목록을 지정
int[] iArray;

iArray = new int[] {1, 2, 3, 4, 5};

 

4. 배열의 저장 구조

  • 배열 변수는 참조 변수, 배열 변수는 Stack 영역에 생성
  • new 자료형[배열 크기] 구문을 실행하면 Heap 영역에 배열을 생성하고, 배열의 시작 주소를 반환.
  • new 자료형[] {값, 값, 값, ... } 또는 {값, 값, 값, ... } 구문을 실행하면 주어진 값들을 요소로 가지는 배열을 Heap 영역에 생성하고, 배열의 시작 주소를 반환

  • new 자료형[배열 크기] 구문으로 배열을 생성할 경우 배열은 자동적으로 기본값으로 초기화

  • null(널)은 참조형 변수가 Heap 영역의 객체를 참조하지 않는다고 뜻하는 값
  • null 값을 가지고 있는 참조 변수를 사용하면 NullPointerException이 발생
더보기

- 참조변수  : 주소값을 저장하는 변수

 

 

2차원 배열


1. 2차원 배열

  • 배열의 요소로 다른 배열을 가지는 배열
  • 2차원 배열은 논리적으로 행과 열로 이루어진 표 형태로 존재한다고 생각
  • 2차원 배열은 할당된 공간마다 인덱스 번호 두 개를 갖음 (앞 번호는 행, 뒤 번호는 열)

 

2. 2차원 배열 변수 선언

  • 2차원 배열 변수를 선언하는 구문은 자료형[][] 변수명 또는 자료형 변수명[][]
int[][] iArray;
double dArray[][];
byte[] bArray[]; // 배열 변수 선언 가능

 

3. 2차원 배열의 생성 및 초기화

3.1. new 연산자로 2차원 배열 생성 및 초기화

  • new 연산자로 2차원 배열을 생성하는 구문은 new 자료형[행 크기][열 크기]
    int[][] iArray;
    double dArray[][] = new double[4][4];
    
    iArray = new int[4][4];
  • 2차원 배열이 생성되고 나서 배열을 사용하기 위해서는 변수명과 두 개의 인덱스(행과 열)를 사용
iArray[0][0] = 10; 
iArray[0][1] = 20; 
iArray[0][2] = 30; 
iArray[0][3] = 40; 
...

System.out.println(iArray[0][0]); // 10 출력
System.out.println(iArray[0][1]); // 20 출력
System.out.println(iArray[0][2]); // 30 출력
System.out.println(iArray[0][3]); // 40 출력
  • 2차원 배열 사용 시 중첩 반복문을 활용하여 편리하게 사용이 가능
for(int i = 0; i < iArray.length; i++) {
    for(int j = 0; j < iArray[i].length; j++) {
        iArray[i][j] = (j + 1) * 10;

        System.out.println(iArray[i][j]);
    }
}

3.2. 값 목록으로 2차원 배열 생성 및 초기화

  • 값 목록으로 2차원 배열을 생성하는 구문은 new 자료형[][] {{값, 값, ... }, {값, 값, ... }} 또는 {{값, 값, ... }, {값, 값, ... }}
int[][] iArray = new int[][] {{1, 2, 3, 4}, {5, 6, 7, 8}};
double dArray[][] = {{1.1, 2.2, 3.3, 4.4}, {5.5, 6.6, 7.7, 8.8}};

 

 

4. 2차원 배열의 구조

  • 위 예시의 iArray의 구조는 아래와 같다.

 

 

 

 

열거 타입(Enumeration Type)


1. 열거 타입(Enumeration Type)

  • 데이터 중에는 몇 가지로 한정된 값만 갖는 데이터가 존재
  • 한정된 값만을 갖는 데이터 타입
  • 열거 타입은 몇 개의 열거 상수(Enumeration Constant) 중에서 하나의 상수를 저장하는 데이터 타입

 

2. 열거 타입 선언

  • 열거 타입은 클래스와 동일하게 소스 파일(.java)을 생성
  • 열거 상수는 모두 대문자로 작성하는 것이 관례
// public enum은 열거 타입을 선언하기 위한 키워드이다.
// 열거 타입의 이름은 소스 파일명과 동일해야 한다.
public enum Week {
   MONDAY, 
   TUESDAY, 
   WEDNESDAY,
   THURSDAY,
   FRIDAY,
   SATURDAY,
   SUNDAY
}

 

3. 열거 타입 변수

  • 열거 타입도 하나의 데이터 타입이므로 변수를 선언하고 사용
Week today;
  • 선언된 열거 타입 변수에 열거 상수를 저장할 수 있음
  • 열거 상수는 단독으로 사용할 수 없고 반드시 열거 타입.열거 상수로 사용
Week today = Week.FRIDAY;

 

4. 열거 타입 메소드

  • name() 메소드는 열거 상수가 가지고 있는 문자열을 반환
  • ordinal() 메소드는 전체 열거 상수 중 몇 번째 열거 상수인지 정숫값을 반환 (0부터 시작)
  • equals() 메소드는 매개값으로 전달되는 열거 상수와 동일한 열거 상수인지 확인 후 true 또는 false를 반환
  • compareTo() 메소드는 매개값으로 주어진 열거 상수를 기준으로 전후로 몇 번째 위치하는 정숫값을 반환
System.out.println(today.name());
System.out.println(today.ordinal());
System.out.println(today.equals(Week.SUNDAY));
System.out.println(today.compareTo(Week.SUNDAY));

 

 

5. 열거 타입에 속성 추가하기

  • 열거 타입의 열거 상수에 다른 속성을 추가할 수 있다.
  • 열거 상수의 괄호()를 넣고 추가로 할 속성을 적어준다.
  • 열거 타입에 필드를 설정하고 Getter를 통해 읽어 올 수 있다.
public enum Week {
  MONDAY("monday", 1),
  TUESDAY("tuesday", 2),
  WEDNESDAY("wednesday", 3),
  THURSDAY("thursday", 4),
  FRIDAY("friday", 5), 
  SATURDAY("saturday", 6),
  SUNDAY("sunday", 7);

  private final String name;
  private final int value;

  // 열거 타입의 생성자는 반드시 private으로 선언해야 한다.
  private Week(String name, int value) {
      this.name = name;
      this.value = value;
  }

  // 열거 타입의 name 값을 읽어오는 메소드이다.
  public String getName() {
      return this.name;
  }
  
  // 열거 타입의 value 값을 읽어오는 메소드이다.
  public int getValue() {
      return this.value;
  }
}

+ Recent posts