배운 내용 🏃
배열을 알아보자 ..!
• 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 배열은 그대로 입니다.
마무리🔥
배열 배우니깐 갑자기 어려워 졌다
열심히 공부 해야겠다
'TIL' 카테고리의 다른 글
TIL - 2024/05/01 (0) | 2024.05.01 |
---|---|
TIL - 2024/04/30 (0) | 2024.04.30 |
TIL - 2024/04/26 (0) | 2024.04.26 |
TIL - 2024/04/25 (2) | 2024.04.25 |
TIL - 2024/04/24 (0) | 2024.04.24 |