[배열]
같은 자료형의 변수를 지정하여
여러 데이터를 저장할 수 있는 저장 공간
자료 구조(data structure) 라고도 한다.
다음과 같이 선언할 수 있다
자료형 [] 변수 이름; / int [ ] arr;
자료형 변수 이름 []; / int arr [ ];
* 배열의 초기화는 보통 null로 한다. (뜻은 '없다')
[ ] 는 배열의 연산자로 자료형 뒤에 붙이거나,
변수명 뒤에 붙이면 해당 자료형은 배열이라는 선언
[배열 생성]
배열을 선언한 후에는 생성을 해줘야
프로그래밍에서 메모리를 할당 받아 사용할 수 있다.
선언 : 참조 변수를 위한 공간이 만들어짐
생성 : 값을 저장할 수 있는 공간을 확보(메모리 할당)
다음과 같이 작성하여 쓸 수 있다.
int [ ] arr = new int [4];
// 4칸 크기의 배열이 만들어졌다.
int [] arr = { 1, 2, 3, 4, 5};
//저장될 값을 미리 부여해 선언하는 법
new와 함께 자료형과 길이를 지정한다.
혹은 값을 미리 부여해 선언할 수도 있다.
다만 이러한 방법은 배열을 최초 선언할 때만 가능하다.
[배열 재정의]
최초 선언된 배열의 데이터를 다음과 같이
바꾸려고 하면 오류가 발생한다.
int [] arr; //배열 선언
arr = {1,2,3,4,5} //값 대입 -> 오류 발생
이미 선언된 배열에 다시 값을 대입해야 하는 경우에는
'재정의'하여 사용하면 되는데 이 때 new 연산자를 사용한다.
int [] arr; //배열 선언
arr = new int [] {1,2,3,4,5}; //new를 통한 재정의
배열의 인덱스는 0부터 시작한다.
배열의 길이는 arr.length 로 불러올 수 있다.
배열의 초기값을 아래와 같다.
- 정수형 : 0
- 실수형 : 0.0
- 문자형 : ' '
- 객체형 : null
(자료형에 따라 배열이 선언될 때, 자동 초기화)
[Arrays 클래스 활용]
▼배열 출력하기
Arrays.toString은 배열에 정의된 값들을
하나의 문자열(String) 형태로 변환하여 출력해준다.
int [] arr = {1,2,3,4,5,6,7,8,9,10}
Systemout.println(Arrays.toString(arr));
//Console 실행결과
[1,2,3,4,5,6,7,8,9,10]
▼배열 정렬하기
Arrays.sort()는 배열 항목을 정렬해주는 기능이다.
// 오름차순 정렬
int [] arr = {1,9,10,5,3,6,7,2,4,8}
Arrays.sort(arr);
Systemout.println(Arrays.toString(arr));
// Console 출력 결과
// [1,2,3,4,5,6,7,8,9,10]
// 내림차순 정렬
Integer [] arr = {1,9,10,5,3,6,7,2,4,8}
Arrays.sort(arr, Comparator.reverseOrder());
Systemout.println(Arrays.toString(arr));
// Console 출력 결과
// [10,9,8,7,6,5,4,3,2,1]
내림차순 정렬 시 자료형을 int 대신
Integer로 사용해야 한다.
또한 Comparator 클래스의
reverseOrder() 메서드를 이용한다.
▼배열 복사하기
배열을 복사하는 방법은 2가지가 있다.
1) 얕은 복사 : 복사 배열이나 원본 배열이 변경되면 서로 간의 값이 같이 바뀜
- 배열의 주소를 공유하기 때문에 한쪽이 수정되면 다른쪽도 같이 수정된다.
2) 깊은 복사 : 복사 배열이나 원본 배열이 변경되어도 서로 간의 값은 바뀌지 않음
- 서로 다른 공간을 가지고 있어 한쪽을 수정해도 다른 한쪽에는 값이 변경되지 않는다.
//얕은 복사 - 주소값 공유
int [] arr01 = {1,2,3};
int [] arr02 = arr01;
//arr01의 힙메모리 주소값이 arr02에 대입된다.
//변수가 값이 아닌 주소를 가질 때 대입 연산자는
//값의 대입이 아니라 가지고 있는 주소값을 공유한다.
//깊은 복사 - 서로 주소값이 달라 영향을 미치지 않음
//▼ Arrays 클래스를 활용하는 방법
int [] card = {3,1,4,5,10};
int [] newCard = Arrays.copyOf(card, card.length);
//Arrays.copyOf 를 사용하면 배열을 깊은 복사할 수 있다.
//()에는 배열명, 복사범위를 기입한다.
//▼ System 클래스를 활용하는 방법
int [] card = {1,6,4,5,3,2};
int [] newcard = new int[card.length];
// 복사할 배열 크기만큼 새로운 배열 생성
System.arraycopy(card,0,newcard,0,card.length);
//시스템 클래스의 arraycopy() 메서드를 사용한다.
//인자로는 복사 대상, 시작 위치, 새로운 배열, 시작 위치, 복사할 길이 부여
Arrays 클래스를 활용하면 copyOf() 메서드를 사용한다.
> 매개변수로 배열명, 복사범위를 가진다.
System 클래스를 활용하면 arraycopy() 메서드를 사용한다.
> 매개변수로 복사할 배열명, 복사 시작 위치,
> 복사체 배열명, 복사체 시작 위치, 복사할 배열 길이를 가진다.
[다차원 배열]
행이 여러개인 배열이다. (2차원 이상)
한 개의 데이터만 쭈욱 저장한 것은
행 하나로 이루어진 1차원 배열이다.
▼2차원 배열 선언하기
//2차원 배열은 대괄호가 추가된다.
int [][] arr = new int [크기/행개수][크기/열개수];
다만 열의 크기를 지정하지 않고 선언한 뒤
각 행의 열을 각각 선언하여 사용할 수도 있다.
int [][] arr = new int [3][];
//열의 값을 지정하지 않고 선언 후
//단 행의 크기를 지정하지 않으면 오류 발생
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
//각 행마다 열 값을 지정한다.
이러면 2칸, 3칸, 1칸 짜리 행을 가진 3열 배열이 만들어진다.
[향상된 for 문]
JDK 1.5부터 새롭게 추가된 기능으로
배열과 컬렉션의 모든 요소를
참조하기 위한 반복문이다.
for문을 실행할 반복 대상이 있다면
자료형은 반복 대상이 지닌 자료형과
반드시 같은 타입으로 지정해야 한다!
for(int num : score){
System.out.println(num);
//복사된 num을 모두 보여주게 된다.
}
//int 자료형
//num 변수명
//score 반복대상
※ 향상된 for 문도 '깊은 복사' 형식이다.
'개주 훈련일지 > 📚 코살대 교본 학습' 카테고리의 다른 글
| 클래스(class) (0) | 2025.11.04 |
|---|---|
| 소프트웨어 공학의 주제 (0) | 2025.11.03 |
| SQL) 속성 (0) | 2025.11.02 |
| 제어문2 - 반복문 (0) | 2025.11.02 |
| SQL) 엔터티 (0) | 2025.11.01 |