Home NhnAcademy 선발교육과정 5일차(배열)
Post
Cancel

NhnAcademy 선발교육과정 5일차(배열)

배열이란?

  • 배열은 요소를 순서대로 모아서 관리하기 위해 만들어진 자료구조
    • 배열은 모든 요소는 같은 타입을 가짐
    • 각각의 요소에는 정수 인덱스를 사용해서 엑세스

Java에서 배열 표기법

  • 다음 항목들을 지정하여 배열 선언
    • type[] name;
    • 배열에 나열딜 요소들의 타입 : type
    • 배열의 차원 : []
    • 배열을 선언한 변수이름 : name

배열의 차원

  • 선형 1차원 배열과 표형 2차원 배열, 육면체형 3차원 배열
  • 인덱스가 배열의 각 요소와 연관됨
  • 2차원 배열은 한 배열에 여러 배열이 포함되는 형태
    • 배열에 포함된 각 배열은 각각의 인덱스를 가짐

배열의 경계 검사

  • 배열은 크기가 정해져 있어,요소 엑세스를 위해 배열 경계를 검사함
    • 배열 내 잘못된 위치에 대한 접근은 ArrayIndexOutOfBoundsException 예외를 발생
    • length변수를 사용

배열과 컬렉션 비교

  • 배열
    • 크기를 조절할 수 없음
    • 같은 타입의 요소를 저장하기 위한 자료구조
    • 배열의 요소는 읽기 전용 엑세스 권한을 가질 수 있음
    • 배열은 빠르지만 유연성이 떨어짐
  • 컬렉션
    • ArrayList와 같은 컬렉션 클래스는 크기를 조절할 수 있음
    • 컬렉션은 다양한 타입의 요소를 저장하기 위해 설계됨
    • 컬렉션은 읽기 전용이 가능
    • 조금 느리지만 보다 유연함

배열 인스턴스 생성

  • 배열 변수를 선언한다고 해서 배열이 생성되지 않음
    • new 키워드를 사용해서 명시적으로 배열 인스턴스를 생성해야함
    • 배열이 생성되면 기본값 0 or null이 암시적으로 할당 됨
1
2
3
4
5
6
7
8
9
10
11
import java.util.Arrays;

public class ArrayTest {

  public static void main(String[] args) {
    int[] array = new int[10];
    System.out.println(Arrays.toString(array));
    String[] array2 = new String[10];
    System.out.println(Arrays.toString(array2));
  }
}
1
2
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[null, null, null, null, null, null, null, null, null, null]

확인을 해보면 암시적으로 정수형은 0 문자는 null이 들어가는 것을 확인할 수 있다.

배열 요소 초기화

  • 배열의 요소는 선언 시 명시적으로 초기화 될 수 있음
    • 편리하게 줄여 쓸 수 있는 방법 제공
    • 선언 시 초기화 할 대 배열의 크기를 사용할 수 없음
1
2
3
4
long[] row = new long[] {1,2,3};
long[] row = {1,2,3}; //동일하다.

long[] row = new long[3] {1,2,3}; //초기화와 값을 넣는 것을 동시에 하지 못한다.

가변 길이 배열

  • Java의 다차원 배열은 배열안에 다른 배열이 포함되어 있는 형태

위와 같이 길이가 다른 배열을 생성할 수 있다.

배열 요소 복사

  • 배열을 복사하면 변수만 복사되고 값은 복사되지 않음
    • 배열 인스턴스를 복사하지 않음
    • 두 개의 배열 변수가 같은 배열 인스턴스를 가리킴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ArrayTest {

  public static void main(String[] args) {
    int[] i = {5};
    System.out.println(i[0]);
    change(i);
    System.out.println(i[0]);

  }
  static void change(int[] i){
    i[0]++;
    System.out.println(i[0]);
  }

}

값을 복사하는게 아니기 때문에 change에서 ++ 할경우 메인에 있는 값을 확인 할경우 바뀐 것을 알수있다.

Deep Copy , Shallow Copy

  • Deep Copy: 주소가 아닌 실제 값을 복사하는 것
  • Shallow Copy: 주소만 복사하는 것

배열 메소드

  • 배열 인스턴스의 메소드
    • clone : 배열의 복사본을 생성
  • Arrays 클래스의 메소드
    • sort : 배열의 요소를 오름차순
    • binarySearch : 객체의 위치를 이진 검색 알고리즘으로 검색한 후, 위치를 반환
    • copyOf : 전달받은 원본 배열과 복사할 요소의 개수로 원본 배열과 같은 타입의 새 배열 반환
    • copyOfRange : 전달받은 원본 배열과 복사 시작 인덱스 및 복사 끝 인덱스로 원본 배열범위 내의 요소를 복사하여 같은 타입의 새 배열 반환
    • fill : 배열의 모든 요소를 특정 값으로 초기화

foreach 문에서 배열 사용

  • foreach문은 배열 처리를 위한 상세 작업을 추상화 함
1
2
3
4
5
6
7
8
public class foreach {

  public static void main(String[] args) {
    for(String arg: args){
      System.out.println(arg);
    }
  }
}

위와 같이 배열에서 하나씩 뽑아서 출력할 수 있다.

This post is licensed under CC BY 4.0 by the author.