반응형
1. 배열( array )이란? ( 참조형 )
- 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 배열이라 한다.
" 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것 " - 여기서 중요한 것은 같은 타입이어야 한다는 것이다.
- 서로 다른 타입의 변수들로 구성된 배열은 만들 수 없다.
Ex) int[ ] score = new int[5]; // 5개의 int값을 저장할 수 있는 배열 생성 - 메모리 상에서 기본형 애들은 Stack( Call Stack )에 만들어지고 참조형( new int[5] )은 Heap영역에 만들어진다.
이때 score( 변수 )는 Stack영역에 만들어지는데 score는 Heap영역에 있는 것을 참조해서 사용한다.
그래서 참조형이라 한다. ---> 참조형은 다른 영역에서 만들어져서 참조되는 것이다.
2. 배열의 생성
- 배열을 선언하는 방법은 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 대괄호[]를 붙이면 된다.
선언 방법 선언 예 타입[ ] 변수이름 int[ ] score; String[ ] names; 타입 변수이름[ ] int score[ ] String names; - 배열의 생성
- 배열은 선언한 다음에는 배열을 생성해야 한다.
- 배열을 선언한 것은 단지 생성된 배열을 다루기 위한 참조 변수를 위한 공간이 만들어질 뿐이다.
( Stack 공간에만 만들어짐 )
배열을 생성해야만 비로소 값을 저장할 수 있는 공간이 만들어지는 것이다.
( Heap 영역에 만들어져 비로소 참조가 된다. )
타입[ ] 배열이름; 배열을 선언( 배열을 다루기 위한 참조변수 선언 ) 배열이름 = new 타입[길이] 배열을 생성( 실제 저장공간을 생성 )
3. 배열의 길이와 인덱스
- 생성된 배열의 각 저장공간을 배열의 요소( element )라고 하며, 배열이름[인덱스]의 형식으로 요소에 접근한다.
- 인덱스( index )는 배열의 요소마다 붙여진 일련번호를 각 요소를 구별하는 데 사용한다.
* 인덱스의 범위는 0부터 배열의 길이 -1까지 - 배열의 값을 저장하고 읽어오는 방법은 변수와 같다.
- 단, 변수 이름 대신 배열이름[인덱스]를 사용한다는 점만 다르다.
- 배열의 길이
- 배열의 길이는 배열의 요소의 개수, 즉 값을 저장할 수 있는 공간의 개수이다.
- 배열의 길이는 양의 정수여야 한다.
4. 배열의 초기화
- 배열은 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화하므로 배열을 사용하기 전에 따로 초기화를 해주지 않아도 되지만 원하는 값을 따로 저장할 수 있다.
- 선언과 초기화 동시에 가능
- 저장할 값들을 괄호{ } 안에 쉼표로 구분해서 나열하면 되고, 괄호 안의 값의 개수에 의해 배열의 길이가 자동으로 결정되기 때문에 배열의 길이는 안 적어도 된다.
5. 배열의 출력
- for문을 이용한 출력
* 배열이름.length : 배열의 길이 반환 - 향상된 for문
* 배열 arr 처음부터 순서대로 하나씩 ele변수에 저장해서 꺼내온다.
* 마지막 인덱스까지 가면 종료
6. 배열의 복사
- for문을 이용한 복사
- System.arraycopy()를 이용한 배열의 복사
- for문 대신 System클래스의 arraycopy()를 사용하면 보다 간단하게 빠르게 복사할 수 있다.
7. 다차원 배열
- 지금까지 우리가 배운 배열은 1차원 배열인데, 2차원 이상의 배열도 선언해서 사용할 수 있다.
- 2차원 배열의 선언과 인덱스
선언 방법 선언 예 타입[ ][ ] 변수이름; int[ ][ ] score; 타입 변수이름[ ][ ]; int score[ ][ ]; 타입[ ] 변수이름[ ]; int[ ] score[ ]; - 2차원 배열은 행과 열로 구성되어 있기 때문에 index로 행과 열에 각각 하나씩 존재한다.
- 행 index의 범위는 0 ~ ( 행의 길이 - 1 )이고, 열 index의 범위는 0 ~ ( 열 인덱스 - 1 )이다.
- 각 요소에 접근하는 방법은 배열이름[행 index][열 index]; 이다.
- 2차원 배열의 초기화
- 2차원 배열도 괄호를 사용해서 생성과 초기화를 동시에 할 수 있다.
- 다만, 1차원 배열보다 괄호 { }를 한번 더 써서 행렬로 구분해준다.
- 메모리 상에서( int[ ][ ] scores = new int[2][3];)
Stack영역에 scores라는 변수가 생기고 Heap영역에는 new int[2]만 참조변수에 참조된다.
그 다음에 Heap영역에 있는 int[0], int[1] 에서 new int[0][3], new int[1][3]을 다시 참조하게 된다.
반응형
'웹개발 > JAVA' 카테고리의 다른 글
[JAVA] 변수와 메소드 (1) | 2022.01.16 |
---|---|
[JAVA] 객체지향 언어, 클래스와 객체 (0) | 2022.01.16 |
[JAVA] 제어문( 조건문, 반복문 ) (0) | 2022.01.12 |
[JAVA] 연산자( Operator ) (2) | 2022.01.08 |
[JAVA] 입력메서드( Scanner ), 출력메서드( Print ) (0) | 2022.01.07 |