TIL

TIL - 2024/04/29

기석김 2024. 4. 29. 20:58

배운 내용 🏃

배열을 알아보자 ..!

 

  Java 프로그래밍에서 여러개의 변수를 분류통 같은곳에 모아서 저장하고 싶을때 기본적으로는 “배열”이라는 변수에 저장한다

  분류통🗳이라고 표현한 이유는 여러개의 값들을 한꺼번에 넣거나 하나씩 넣을수도 있고, 꺼낼때는 하나씩 꺼낼 수 있 기 때문이다

즉, 변수들을 담을 수 있는 분류통🗳 중에서 가장 기본이 되는 분류통이 배열 입니다. 배열 = []

👉참고로, 분류통🗳은 자료구조 라는 이름으로 불립니다

 

배열 

선언 (🗳 [] )

📌 int 와 같은 기본형 변수는 1개의 값만 변수에 저장할 수 있다면 int[] 와 같은 배열형 변수는 여러개를 변 수에 저장할 수 있다

여러개를 하나의 변수에 넣어놓고 들고다니거나 하나씩 꺼내서 쓸 수 있다는 점에서 분류통🗳의 개념과 비슷합니다.

단, 하나의 배열형 변수에는 같은 타입의 변수만 담을 수 있습니다. (=김치통에는 김치만!)

•  한번에 많은 양의 데이터를 다루거나 계산할때 사용한다

  배열은 영어로 Array 라고 부른다

 선언방법은 아래 2가지 방법이 있다

1. 타입 [] 변수 ; ex. int[] intArray;

2. 타입 변수[] ; ex. int intArray[];

 

코드로 알아보자

// 배열 선언

// 일반적인 선언방식
int[] intArray; // 정수 배열
long[] longArray;
double[] doubleArray; // 실수 배열
char[] charArray; // 문자 배열
String[] stringArray; // 문자열 배열

// 2번째 선언방식
int intArray[]; // 정수 배열
long longArray[];
double doubleArray[]; // 실수 배열
char charArray[]; // 문자 배열
String stringArray[]; // 문자열 배열

생성 ( new 🗳 [] )

📌 배열(Array)는 참조형 변수들처럼 new 명령을 통해서 생성하며, 대괄호 [] 안에 크기를 지정해준다

분류통🗳을 만들때 new 명령어로 생성하고 분류통에 몇개를 담을지 미리 정의해준다고 생각하면 된다

☝주의할점은 사이즈를 지정해서 생성된 분류통은 각 칸마다 순번이 있다는걸 기억하면 좋다

순번은 0부터 시작하기 때문에 8개 사이즈의 분류통이라면 0번~7번까지 있다

 

코드로 알아보자

// 배열 생성

//배열 생성후 초기화하면 배열의 주소가 할당된다.
int[] intArray = new int[3]; // 초기값 {0,0,0}
boolean[] boolArray = new boolean[3]; // 초기값 {false, false, false}
String[] stringArray = new String[3]; // 초기값 {"","",""}

//배열 선언만 해놓고 나중에 초기화를 시킬수도 있다.
int[] intArray2;
intArray2 = new int[3]; // 초기값 {0,0,0}

 

순회 (🗳 [i] )

📌 배열(분류통🗳) 안에 담겨있는 변수들을 하나씩 꺼내서 사용하는것을 순회라고 한다.

 

먼저 배열의 값을 하나 뽑아서 조회하는 방법을 알아보자 

 

배열(분류통🗳)에는 순번이 있고 해당 순번을 통해 하나의 값을 조회 가능

해당 배열변수 뒤에 순번을 대괄호 [] 로 감싸서 명시해주면 된다

 

배열 단건조회 코드

// 배열 단건조회

int[] intArray = new int[3]; // 모두 0으로 초기화된 사이즈8의 배열 생성
// 배열에서 2번쨰 순번의 값을 출력해본다. (0부터 순번이 시작하므로 2번째 순번은 1)

System.out.println(intArray[1]);
// 출력

 

 

 

배열 순회 코드

//길이가 8인 정수배열 선언
int[] intArray = new int[3];

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

// 출력
0
0
0

 

🔎 .length() 메서드 length() 메서드는 배열이 지원하는 메서드로써 해당 배열의 길이값을 응답해준다.

배열의 길이는 처음에 선언한 크기를 가지고 있다

 

초기화 (🗳 = {…} )

 

배열(분류통)을 초기화 할때는 아래 3가지 방법이 있다

1. 중괄호 {} 를 사용해서 초기화

2. 반복문 for 문을 사용해서 초기화 (또는 향상된 for문)

3. Arrays.fill 메소드를 사용해서 초기화 ( Arrays 클래스는 Java 에서 기본으로 제공하는 메소드가 담긴 클래스)

 

배열 초기화 코드

// 배열 초기화

import java.util.Arrays; // Arrays 클래스를 import 해주세요!

public class Main {

	public static void main(String[] args) {
		//1. 배열에 특정값 대입하며 선언
		int[] intArray = {1, 2, 3, 4, 5};
		String[] stringArray = {"a", "b", "c", "d"};
        
		//2-1. for문을 통해 값을 대입
		for (int i = 0; i < intArray.length; i++) {
			intArray[i] = i;
		}
        
		//2-2. 향상된 for문을 통한 배열 출력
		for (int i : intArray) {
			System.out.print(i); // 01234
		}
        
		System.out.println(); // 줄바꿈
        
		//3. 배열의 주소를 모두 같은값으로 초기화
		Arrays.fill(intArray, 1);//배열의 모든 값을 1로 초기화
		for (int i : intArray) {
			System.out.print(i); // 11111
		}
	}
}

// 출력
01234
11111

 

복사 (🗳 .clone() )

얕은 복사란 ?

• 배열은 참조형 변수이며 실제값이 아닌 실제값의 주소값을 가진다

따라서 배열 변수간에 대입 연산자 = 를 사용해서 복사를 하게 되면 주소값만 복사된다

•  이렇게 주소값만 복사되고 실제값은 1개로 유지되는걸 얕은 복사라고 한다

 

얕은복사 코드로 알아보자

// 얕은 복사

int[] a = { 1, 2, 3, 4 };
int[] b = a; // 얕은 복사

b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정했습니다. (1 -> 3)

System.out.println(a[0]); // 출력 3 <- a 배열의 0번째 순번값도 3으로 조회됩니다.

 

깊은 복사

얕은 복사처럼 가짜 복사가 아니라 진짜 새로운 배열을 똑같이 만들고 싶을때 깊은 복사를 한다

• 깊은 복사는 결국 실제 값을 가지고 있는 배열의 기본형 값을 꺼내서 복사해주면 된다

• 반복문 for 문 을 통해서 하나씩 꺼내서 복사해주는 방법과 여러 메서드를 사용하는 방법이 있다

 

깊은복사 코드로 알아보자

// 깊은 복사

int[] a = { 1, 2, 3, 4 };
int[] b = new int[a.length];

for (int i = 0; i < a.length; i++) {
	b[i] = a[i]; // 깊은 복사
}

b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정했습니다. (1 -> 3)

System.out.println(a[0]); // 출력 1 <- 깊은 복사를 했기때문에 a 배열은 그대로 입니다.

 

 

 

 

마무리🔥

배열 배우니깐 갑자기 어려워 졌다

열심히 공부 해야겠다