Engineering Note

Java의 Array 본문

Programming Language/Java

Java의 Array

Software Engineer Kim 2021. 6. 5. 09:34

Array

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

배열의 선언과 생성

  • 배열을 선언하는 방법은 원하는 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 대괄호[]를 붙이면 된다. 대괄호[]는 타입 뒤에 붙여도 되고 변수이름 뒤에 붙여도 된다. 하지만 Java 에서는 타입에 붙이는 쪽이 많다. 대괄호가 변수이름의 일부라기보다 타입의 일부라고 보는 경우가 많기 때문이다.
    image
    int[] score;  //배열 선언(배열을 다루기 위한 참조변수 선언)
    score = new int[5]; //배열을 생성(실제 메모리 저장공간 생성)
    1. 선언과 생성 단계별로 하기배열의 선언
    • int[] score;
    • int형 배열 참조변수 score를 선언한다. 데이터를 저장할 수 있는 공간은 아직 마련되지 않았다.
    • image
    배열 메모리 공간 생성
    • score = new int[5];
    • 연산자 'new'에 의해서 메모리의 빈 공간에 5개의 int형 데이터를 저장할 수 있는 공간이 마련된다.
      image
    • 그리고 각 배열 요소는 자동적으로 int의 기본값(default)인 0으로 초기화 된다.
      image
    • 끝으로 대입 연산자'+'에 의해 배열의 주소가 int형 배열 참조변수 score에 저장된다.
      image
    • 이제 참조변수 score를 통해서 생성된 배열에 값을 저아하거나 읽어 올 수 있다. 이 배열은 '길이가 5인 int배열'이며, 참조변수의 이름을 따서 '배열 score'라고 부르면 된다.
  • 배열의 생성
  1. 선언과 생성을 동시에 하기배열 선언 생성 동시에
  • int score = new int[5];

배열의 길이와 인덱스

  • 생성된 배열의 각 저장공간을 '배열의 요소(element)'라고 하며, '배열이름[인덱스]'의 형식으로 배열의 요소에 접근한다. 인덱스(index)는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다. 변수의 이름을 지을 때 score1, score2, score3과 같이 번호를 분이는 것과비슷하다고 할 수 있다.
  • 주의할 점은 배열의 인덱스는 1이 아닌 0부터 시작한다.
  • 인덱스의 범위는 0부터 '배열의길이 -1까지'
    image
  • 배열의 값을 저장하고 읽어오는 방법은 변수와 같다. 단지 변수이름 대신 '배열이름[인덱스]'를 사용한다는 점만 다르다.
    score[3] = 100;
    int value = score[3];
    image
  • 반복문을 이용해서 한번에 값을 할당 할 수도 있다.
    for (int i = 0; i < 5;++i){
    score[i] = i*10;
    

//score[0] = 0;
//score[1] = 10;
//score[2] = 20;
//score[3] = 30;
//score[4] = 40;


## 배열의 초기화
* Java에서 배열은 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화가 된다.
  * - 정수 : 0
  * - 실수 : 0.0
  * - 논리형 : false
  * - 문자 : 공백 ( 공백문자 \u0000)
* 위 처럼 초기화가 되기 때문에 배열을 초기화 해주지 않아도 되지만, 원하는 값을 저장하려면 아래와 같이 각 요소 마다 값을 지정해 줘야한다.
```java
int[] score = new int[5];
score[0] = 10;
score[1] = 20;
score[2] = 30;
score[3] = 40;
score[4] = 50;
  • 위의 방법은 배열을 선언하고 생성하고 기본값(0)으로 초기화가 된 후에 사용자가 원하는 값으로 다시 초기화를 해주었지만 배열의 생성과 초기화를 동시에 할 수도 있다.
  • int[] score = new int[]{10,20,30,40,50};
  • 저장할 값들을 괄호{} 안에 쉼표로 구분해서 나열하면 되며, 괄호{} 안의 값의 개수에 의해 배열의 길이가 자동으로 결정되기 때문에 괄호[]안에 배열의 길이는 적어주지 않아도 된다.
  • 조금 더 간단한 방법도 있다. 'new 타입[]' 코드를 생량하고 초기화를 해줄 수 도 있다.
  • int[] score = {10,20,30,40,50};
  • 하지만 선언과 생성을 따로하는 경우에는 new 타입[]' 코드를 생량할 수 없다.
  • int[] score; // score = {10,20,30,40,50}; //에러 score = new int[]{10,20,30,40,50}; //OK
  • 또 다른 예로, 아래와 같이 매개변수로 int 배열을 ㅂ다는 add메서드가 정의 되어 있고 이 메서드를 호출해야할 경우 역시 'new 타입[]'을 생략할 수 없다. 이유는 당연히 이 경우도 생성과 선언을 따따로 해주는 경우로 볼 수 있기 때문이다.
  • int add(int[] arr){ /* 내용 생략*/} // add 함수 선언 int result = add({10,20,30,40,50}); // 에러 int result = add(new 타입[]{10,20,30,40,50});

참고자료: 자바의 정석(저자 남궁 성)

Comments