배열

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

  • import java.util.Arrays; 후 사용해야 함



배열의 선언

  • 선언

    • 생성된 배열을 다루기위한 참조변수를 위한 공간이 만들어짐
  • 방법

    • 타입[] 변수이름; (추천!)

    • 타입 변수이름[];



생성

  • 값을 저장할 수 있는 공간이 만들어짐

  • 연산자 new와 함께 배열의 타입과 길이를 지정해주어야 함(길이 = 0 + 양의정수)

  • 방법

    • 변수이름 = new 타입[길이];

    • 자동으로 타입의 기본값으로 배열 공간(=배열요소=element)들이 초기화됨

  • 선언과 생성을 동시에 할 수 있음

    • 타입[] 변수이름 = new 타입[길이];



배열 길이(length)

  • 배열 요소(element)의 개수

  • 값을 저장할 수 있는 공간의 개수

  • int 범위의 양의 정수(0 포함)

  • 한 번 작성하면 변경이 불가하고, 저장 공간이 부족할 경우 더 큰 길이의 새로운 배열을 생성한 후 기존의 배열에 저장된 값들을 새로운 배열에 복사

    • 꽤나 비용이 많이 듦
  • 기존의 2배정도의 길이로 생성하는 것을 권장

    • 너무 많이 잡으면 메모리 낭비



배열 인덱스(index)

  • 배열의 요소마다 붙여진 일련번호

  • 각 요소를 구분하는데 사용됨

  • 범위 : 0부터 ‘배열 길이 -1’까지



배열 값 저장 및 읽어오기

  • 변수와 동일

    • 변수이름 대신 ‘배열이름[인덱스]’사용
  • 배열명[인덱스] = 값;

    • 배열명 인덱스에 해당하는 위치에 값을 저장
  • 타입 변수 = 배열명[인덱스];

    • 배열명 인덱스 값을 변수에 대입
  • 유효하지 않은 값을 사용할 경우(인덱스 초과)

    • 변수의 값은 실행시 대입되므로 컴파일러는 컴파일시에 해당 에러를 잡지 못함(런타임에러)

    • 실행시 ArrayIndexOutpOfBoundsException 발생 : 배열의 인덱스가 유효한 범위를 초과한 경우



배열이름.length

  • 자바에서는 JVM이 모든 배열의 길이를 별도로 관리

  • 배열이름.length를 통해 배열의 길이에 대한 정보를 얻을 수 있음

  • 배열은 한 번 생성하면 길이를 변경할 수 없음

  • 이미 생성된 배열의 길이는 변하지 않으므로 배열.lenght는 상수 (값을 변경할 수 없음)

  • 모든 경우에 배열의 길이를 직접 적어주는 것보다 배열이름.length를 적어주는 것이 코드의 관리가 쉽고 에러가 발생할 확률이 적어짐



배열의 초기화

  • 생성과 동시에 자동적으로 자신에 타입에 해당하는 기본 값으로 초기화 됨

  • 생성과 초기화를 동시에 하려면

    • int[] scoreA = new int[]{1, 2, 3, 4, 5}

    • int[] scoreB = {1, 2, 3, 4, 5} // 선언시 생략 가능

    • scoreA = new int[]{1, 2, 3, 4, 5}

    • scoreB = {1, 2, 3, 4, 5} // 그냥 초기화시 생략 불가능!



배열의 출력

  • 배열명[인덱스] → 인덱스에 해당하는 값 하나 출력

  • Arrays.toString(배열명) → 배열값 전체 출력 ( [값1, 값2, … ] )

  • 그냥 배열명으로 출력시 주소값이 출력됨

  • 단, char 배열의 경우, 각 요소가 구분자 없이 출력 됨

    • 예) char[] charA = {‘a’, ‘b’, ‘c’, ‘d’};
      → abcd 출력



배열의 복사

링크 참고 LINK



String 배열

  • 참조형 변수의 기본값은 null

  • String 배열 → String 주소값(참조형 변수 - 주소값) → String 값(실질적 값)



Char 배열

  • String 클래스는 char배열에 기능(메서드)을 추가한 것

  • 차이) String 객체(문자열)은 읽을 수만 있을 뿐, 내용을 변경할 수 없음



커맨드 라인을 통해 입력받기

  • java Class명 argument

  • 예시) java MainTest 123 abc

    • args[0] → “123”

    • args[1] → “abc”

  • JVM이 입력된 매개변수가 없을 때, null 대신 크기가 0인 배열을 생성해서 args에 전달하도록 구현되어 있기 때문에

    • args!=null ← 같은 수고를 덜게함



다차원 배열

  • 2차원 이상의 배열

  • 링크 참고 LINK



가변 배열

  • 2차원 이상의 배열일 때, 길이가 각기 다른 것