[Java] 배열

김세림·2024년 4월 23일

Java

목록 보기
5/24
post-thumbnail

배열


자료구조Data Structure)

자료구조란 개발자가 데이터를 효율적으로 사용할 수 있도록 정리하는 방법을 말한다.
분류통에 비유하여 설명을 해주셨는데
분류통이라 표현한 이유는 여러개의 값들을 한꺼번에 넣거나 하나씩 넣을 수 도있고, 꺼낼때는 하나씩 꺼낼 수 있기 때문이다.
이 분류통에서 가장 기본이 되는 것은 배열이다.

배열

배열이란?

배열은 1)선언 2)생성 3)초기화 를 통해 사용가능하며,
4)순회를 통해 배열의 값들을 이용한다.

1. 선언

선언은 두가지 방법이 있는데

//ex)
int[ ] intArray;//일반적인 선언방식
int intArray[ ]; 

2. 생성

배열은 참조형 변수들처럼 new 명령을 통해서 생성하며 대괄호에 크기를 지정해준다.

//ex)
int[] intArray = new int[5]; 
//초기값은 int는 0, boolean은 false, String은 null이 들어가있다.

3. 초기화

초기화에는 3가지 방법이 있다.
1) 중괄호를 사용하여 초기화
2) 반복문 for문을 사용하여 초기화
3) Arrays.fill 메서드를 사용하여 초기화

//ex)
int[] intArray = {1,2,3,4,5}; //선언과 동시에 초기화

for(int i = 0; i<intArray.length; i++){
	intArray[i] = i; //for문을 이용한 초기화
}
for(int i:intArray){
	System.out.println(i); //향상된 for문을 통한 배열 출력
}
Arrays.fill(intArray, 1); //배열의 모든 값을 1로 초기화

4. 순회

순회란 배열의 담겨있는 변수들을 하나씩 꺼내서 사용하는 것을 말한다.
배열은 인덱스가 0부터 시작되어 .length만큼의 갯수를 포함하고있다.
이를 통해 배열변수 뒤에 순번을 대괄호로 감싸서 명시해주면 해당 값을 꺼내 사용할 수 있다.

//ex)
int[] intArray = new int[3]; //길이가 3인 int배열을 선언+생성

// 배열이 초기화된 값을 출력해본다.
for(int i=0; i<intArray.length; i++) { 
	System.out.println(intArray[i]); // 0 0 0 이 출력
}

5. 복사

복사에는 두가지, 얕은 복사와 깊은 복사가 있다.

  1. 얕은 복사란 주소값만 복사되고 실제값은 하나로 유지되는 것을 얕은 복사라고 한다.
//예시로 설명하자면
int[ ] arr1 = {1,2,3};
int[ ] arr2 = arr1;
/*
라고 표현했을 때 arr1의 값을 저장하고 있는 주소값을 100이라고 표현해보자
arr2도 arr1의 주소값을 복사하기 때문에 arr2의 주소값도 100이 된다.
그렇기 때문에 arr2의 값을 바꾸면 arr1도 같이 변경되게 된다.

이러한 복사방식을 얕은 복사방식이라고 한다.
*/
  1. 깊은 복사는 주소값이 아닌 실제값 자체를 복사하는 방식을 말한다.
    새로운 배열을 똑같이 만들고 싶을 때 깊은 복사를 하며 3가지 방법이 있다.
//1. for문을 이용한 복사
for(int i = 0; i< a.length; i++){
	b[i] = a[i];
}

//2.clone메서드
int b = a.clone(); //하지만 2차원이상의 배열에서는 얕은 복사로 동작함.
/* 
그 이유는 2차원 배열의 예시를 들어
int[][] a = { {1,2,3}, {1,2,3}}이라면 
clone을 했을 때 {1,2,3}의 배열의 주소값을 복사하고 있으므로 얕은 복사가 된다
*/

//3. Arrays.copyOf 메서드
int b = Arrays.copyOf(a, a.length); //배열과 함께 길이값도 넣어주어야 한다.

String 배열

가장 많이 사용하게 될 문자열 배열을 뜻한다.
선언, 생성, 초기화는 위에 설명한것과 같으며, String자체는 char문자형의 배열이라고 생각하면 된다.
String = char[]
하지만 char배열보다 String을 더 많이 쓰는 이유는 String이 참조형 변수이고, 그렇기에 더 많은 기능을 제공하기 때문이다.
그 기능은 아래와 같다.

메서드
응답값 타입
설명
length()
int
문자열의 길이를 반환한다.
charAt(int index)
char
문자열에서 해당 index의 문자를 반환한다.
substring(int from, int to)
String
문자열에서 해당 범위(from~to)에 있는 문자열을 반환한다. (to는 범위에 포함되지 않음)
equals(String str)
boolean
문자열의 내용이 같은지 확인한다. 같으면 결과는 true, 다르면 false가 된다.
toCharArray()
char[]
문자열을 문자배열(char[])로 변환해서 반환한다.
new String(char[] charArr)
String
문자배열(char[]) 을 받아서 String으로 복사해서 반환한다.

여기서 많이 사용된다고 생각되는 부분은 length, substring, equals 정도가 될 것 같다. (더 쓴다해도 charAt정도..?)

다차원 배열

2차원 배열

배열안에 배열이 들어가있는 형태라고 생각하면 된다.

int[][] arr = new int[2][3];//과 같이 선언 및 생성이 가능하며 

int[][] intArray = {{1,2,3}, {1,2,3}}; //와 같이 초기화가 가능하다.

for(int i=0; i<arr.length; i++){
	for(int j=0; j<arr[i].length; j++){
    	arr[i][j]=0; //을 통해 초기화 가능하다.
    }
}

가변 배열

위 예제처럼 배열을 생성할때 열의 길이를 정해놓지않고 생략하여 행마다 다른 길이의 배열을 저장하는 방식을 말한다.

int[][] array = new int[3][];
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1]; //과 같이 행마다 길이를 다르게 생성할 수 있다. 
//초기화도 해당 배열 길이에 맞게 해주어야한다.

2차원 이상의 배열

3~4차원 등등 넘어갈 수 있지만 대부분 3차원까지만 사용한다.
괄호를 더해 선언을 해주면 되고 초기화 또한 중괄호를 더하면된다.
조회는 2중반복문을 통해 출력할 수 있다.

0개의 댓글