자바의 배열

Yoop·2020년 2월 4일
0

Java 개념정리

목록 보기
3/3
  • 여러 개의 값을 관리할 수 있다.
  • 배열은 하나의 공간을 갖게되고, 그 공간에 값이 직접 들어가는 것이 아니라, 값이 들어있는 다른공간의 위치를 알려준다 (참조형)
  • 배열은 다 똑같은 타입의 값만 받을 수 있고,
    어떠한 형태의 값을 받는지는 선언을 할 때 지정한다.
int[] arr = new int[3];
  • 같은 int(정수) 타입의 값을 관리한다.
  • []는 정수 값들을 받는 공간을 가리킨다.
  • new'새로운 메모리 공간을 만든다' 는 의미
    - new int[3] ➨ int 값을 3개 담을 수 있는 공간을 새롭게 만들어라!
System.out.println("arr : " + arr);    // arr : [I@6108b2d7  
System.out.println("arr 크기 : " + arr.length);  // arr 크기 : 3
  • 배열의 크기 : 배열의 이름.length
  • arr이란 변수에는 arr배열이 있는 인스턴스 공간의 주소값이 들어 있다.
    배열자체의 주소값.
  • 주소의 형식  예를들어 [I@6108b2d7 는 @뒤에는 16진법 @앞은 클래스에 대한 형태. 대괄호가 하나면 1차원, 두개면 2차원

배열의 특징

  • 배열은 생성과 동시에 자동초기화 된다. 자동초기화란 자동으로 초기값을 주는 것.
    - 타입별 자동 초기화 값
    - 정수 : 0
    - 실수 : 0.0
    - 논리형 : false
    - 문자 : 공백 ( 공백문자 \u0000)

  • 배열의 인덱스 값이 들어간, 예를 들어  arr[0] 를 하나의 변수로 본다.

  • 배열의 선언과 동시에 원하는 값으로 초기화 하기

int[] arr = {10, 20, 30}; 

    앞에서부터  0번째, 1번째, 2번째에 들어간다.
이처럼 {}을 활용한 배열의 초기화 방식변수의 선언시에만 가능하다.

```java
int[] arr = new int[] {10, 20, 30};
```
- 이 방식은 꼭 선언할 때만 쓰는 것이 아니다.

한 번에 배열의 값들을 바꿀때 편리하다!


생성된 배열의 요소를 확인하는 방법

  • 향상된 for문 (1.5버전부터 가능)
    - for( 배열의 요소값 : 반복대상 배열명)
int[] arr = {1, 2, 3};
for (int val : arr) {
     System.out.println(val);   
}

     int val에 1, 2, 3이 순차적으로 담기며 출력된다.
배열의 길이만큼 자동으로 반복한다!

     int 뿐만 아니라 char, boolean 모두 for문으로 출력이 가능하다.

  • API에서 제공하는 배열의 요소값들을 확인하는 방법 : toString()
	String result = Arrays.toString(arr); // 이 자체가 문자열(String)이다. 
	System.out.println(result);
	System.out.println(Arrays.toString(arr)); // 쉽게 이렇게 표현할 수 있다.

다차원 배열의 메모리 이해

  • int[] : 정수를 담는 배열

  • int[][] : 정수를 담는 배열을 담는 배열

  • 배열은 참조형 이기 때문에 값을 직접 담는 것이 아니라 주소값 을 가리킨다.

  • int[] a = null;      
    - null은 아직 생성된 주소값이 없단 뜻을  가지고 있다. 때문에 기본형은 주소를 받을 수 없는 형태이다.
    - 나는 아직 값을 받지 않은 배열이다!
  • 이차원 배열
int[][] arr = new int[3][];
1차원 배열을 담는, 길이가 3인 2차원 배열이 생성 되었다.

    그러나 1차원 배열은 아직 생성되지 않은 상태이기 때문에 {null, null, null} 이다.
- arr →→→         0 1 2
□ →→→ null null null
- 만약 첫번째 칸에 null 대신 0이 두개 들어있는 두칸짜리 배열이 있었으면 좋겠다?

```java
	arr[0] = new int[2]; // 0 0
	arr[1] = new int[3]; // 0 0 0
	arr[2] = new int[1]; // 0

	System.out.println(arr[0]);  // [I@6cd8737
	System.out.println(arr[1]);  // [I@22f71333
	System.out.println(arr[2]);  // [I@13969fbe
	System.out.println(arr[0].length); // 2
	System.out.println(arr[1].length); // 3
	System.out.println(arr[2].length); // 1
```
- int[][] arr = new int[3][2]; 

정수를 담는 배열의 크기를 2개로, 그 주소값을 담는 1차원 배열을 3개로 통일 시키겠다.
이렇게 선언하면 1차원 배열엔 주소값이 들어가고, 정수담는 배열엔 초기값인 0이 모두 들어가있다.
- { {0, 0},  {0, 0},  {0, 0}}

- Random[] arr2 = new Random[3];   
  Random은 참조형이기 때문에 3칸짜리 배열에 null이 자동으로 들어간다.

arr2[0] = new Random;  을 해주면 첫번째 칸에 랜덤값이 들어가는 주소를 알려주는 값이 생긴다.

profile
병아리 개발자의 취뽀 일기

0개의 댓글