개주 훈련일지/📚 코살대 교본 학습

배열(array)

lshfood2 2025. 11. 3. 08:58

[배열]
같은 자료형의 변수를 지정하여

여러 데이터를 저장할 수 있는 저장 공간

자료 구조(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