배열
int score1, score2, score3, score4, score5;

위와 같은 방식은 비효율적임
int[] score = new int[5]; //int값 5개를 저장할 수 있는 배열

효율적인 배열. 배열의 숫자를 인덱스(index)라고 함
score[0], score[1].. 이런식으로 자동으로 이름 붙음
배열은 저장공간이 연속적임.
배열의 선언과 생성
배열의 선언: 배열을 다루기 위한 참조변수의 선언
변수는 선언하는 순간 저장공간이 만들어지지만, 배열은 참조변수가 만들어짐.
| 선언방법 | 선언 예 | 비고 |
|---|---|---|
| 타입[] 변수이름; | int[] score; String[] name; | 흔한 방법 |
| 타입 변수이름[]; | int score[]; String name[]; | C언어스러운.. 작동은 함 |
타입[] 변수이름; //배열을 선언
변수이름 = new 타입[]; //배열을 생성(실제 저장공간을 생성)
예를 들어
int[] score; //int타입의 배열을 다루기 위한 참조변수 score 선언

score = new int[5]; //int타입의 값 5개를 저장할 수 있는 배열 생성.
저장공간 생김

int[] score = new int[5]; 선언과 생성을 한번에 함
배열의 인덱스
각 요소에 자동으로 붙는 번호
인덱스의 범위는 0부터 배열길이-1까지
int[] score = new int[5]; //길이가 5인 int배열
인덱스는 0,1,2,3,4로 5개

저장공간 하나를 배열의 요소라고 함
score[3] = 100; //배열 score의 4번째 요소에 100을 저장한다.
int value = score[3]; //배열 score의 4번째 요소의 값을 읽어서 value에 저장
인덱스 범위를 벗어나는게 가장 흔한 오류 ⇒ 배열.length를 쓰자
배열의 길이
배열이름.length = 배열의 길이(int형 상수)
int[] arr = new int[5]; //길이가 5인 int배열 arr을 생성
int tmp = arr.length; //arr.length의 값은 5이고 tmp에 5가 저장된다.
배열은 한번 생성하면 그 길이를 바꿀 수 없다.
- 왜 못바꾸냐? 배열은 연속적이라 저장공간에서 배열 공간을 바꿀 수 있다는 보장이 없음
- 부족하면? 더 큰 새 공간을 만들어 기존 배열을 복사
int[] score = new int[6]’;
for(int i=0; i < ***5***; i++) //6이 아닌 이유는 0부터 시작하기 때문
System.out.println(score[i]); //배열의 모든 요소 출력
위는 오류나기 쉬움 그래서
for (int i=0; i < ***score.length***; i++)
System.out.println(score[i]);
배열의 초기화
배열의 각 요소에 처음으로 값을 저장하는 것. 배열은 기본적으로 자동 초기화가 됨(int인 경우는 기본값인 0으로)
int[] score = new int[5]; //길이가 5인 int배열 score을 생성
score[0] = 50;
score[1] = 60;
…
score[4] = 90;
위와 같은 초기화를
for(int i=0;i<score.length;i++)
score[i] = i * 10 + 50;
위처럼 할 수 있지만, 규칙이 필요해서 안될수도
그래서 더 간단한 방법
int[] score = new int[]{50,60,70,80,90}; //방법1. 거의 안쓰임
**int[] score = {50,60,70,80,90};** //방법2. 이 방법을 사용할 것. 다만 이 문장은 나눠서 쓰지않고 한문장으로만 이어서 써야함
배열의 출력
int[] iArr = {100,95,80,70,60}; 길이가 5인 배열
System.out.println(iArr); //문자열 [I@14318bb이 출력됨. 배열 인티저타입 주소 뭐 이런 내용. *char는 값이 그대로 출력됨
위와 같은 방식으로말고
for문으로는
for(int i=0;i<iArr.length;i++ {
System.out.println(iArr[i]); //배열의 요소를 순서대로 하나씩 출력
}
더 간단하게는
System.out.println(Arrays.toString(iArr)); //[100, 95, 80, 70, 60]이 출력됨
String배열의 선언과 생성
String[] name = new String[3]; //3개의 문자열을 담을 수 있는 배열을 생성한다.

참조형의 기본값은 null
name[0] = ”Kim”;
name[1] = "Park";
name[2] = "Yi";
이걸 괄호를 이용해 이런식으로
String[] name = {"Kim", "Park", "Yi"};
2차원 배열
테이블 형태의 데이터를 저장하기 위한 배열. 2차원 배열은 배열의 배열이다.

테이블의 한 줄이 1차원 배열이고,
여러 줄들이 모인게 2차원 배열

2차원 배열이 여러개 모인게 3차원 배열
int[][] score = new int[4][3]; //4행3열의 이차원 배열 생성. 4*3 int 12개의 저장공간이 마련됨


score[0][0] = 100; //배열 score의 1행 1열에 값 100을 저장
2차원 배열의 초기화
int[][] arr = {{1,2,3}, {4,5,6}}; //new int[][]가 생략됨. 2차원 배열의 생성과 초기화를 동시에
위는 가독성이 떨어지니까
int[][] arr = {
{1,2,3}, //얘네 한줄이 1차원 배열. arr[1]
{4,5,6} //arr[2]
};
이렇게 하면 좋다
2차원 배열 예제
아래 이중for문을 외워두자
for(int i=0;i<score.length;i++) { //length=행의 수
for(int j=0;j<score[i].length;j++) {//score[i].length=각 행의 배열 길이
System.out.printf("score[%d][%d]=%d%n", i, j, score[i][j]);
sum += score[i][j];
}
}
String 클래스
String 클래스=char[] + 메서드(기능). String 클래스는 char과 메서드(기능)을 결합한 것
String 클래스는 내용을 변경할 수 없다. (읽기 전용. read only)

예를 들어, a의 값이 바뀌는게 아니고, 새로운 것이 만들어진 후 주소가 전달됨
String클래스의 주요 메서드
메서드 설명 char charAt(int index) 문자열에서 해당 위치(index)에 있는 문자를 반환한다 int length() 문자열의 길이를 반환한다 String substring(int from, int to) 문자열에서 해당 범위(from~to)의 문자열을 반환한다. (to는 미포함) boolean equals(Object obj) 문자열의 내용이 같은지 확인한다. 같으면 결과는 true, 다르면 false char[] toCharArray() 문자열을 문자배열(char[])로 변환해서 반환한다 String str = “ABCDE”;
char charAt(int index)
char ch = str.charAt(3); //문자열 str의 4번째 문자 ‘D’를 ch에 저장
index 0 1 2 3 4 문자 A B C D E int length()
str.length() = 5. 문자 다섯개니까
String substring(int from, int to)
String tmp = str.substring(1,4); //BCD. str에서 index범위 1~3의 문자들을 반환(to인 4는 포함안되니까)
to를 생략하면 인덱스 끝까지 나옴. ex) str.substring(1); //1~4까지
혹은 str.substring(1, str.length()); //1~4까지
boolean equals(Object obj)
문자열을 비교할때는 equals를 써야함. ==쓰지말고!
char[] toCharArray()
String → Char[]
Arrays로 배열 다루기
Arrays는 클래스임. Math클래스가 수학관련 메서드를 모아놓은 것처럼 배열을 다루는데 유용한 메서드 제공
배열의 비교와 출력 - equals(), toString()
출력
int[] arr = {0,1,2,3,4}; int[][] arr2D = {{11,12}, {21,22}}; System.out.println(Arrays.**toString**(arr)); //[0,1,2,3,4] 배열에 저장된 내용을 문자열로 바꿔줌 System.out.println(Arrays.**deepToString**(arr2D)); //[[11,12],[21,22]] **2차원이상 배열**은 deepToString비교
String[][] str2D = new String[][]{{”aaa”,”bbb”},{”AAA”,”BBB”}}; String[][] str2D2 = new String[][]{{”aaa”,”bbb”},{”AAA”,”BBB”}}; //위 두개가 같은지 비교할때 ==쓰지말고!! System.out.println(Arrays.**equals**(str2D, str2D2)); //false. 왜냐면 2차원배열인데 1차원으로 비교해서 System.out.println(Arrays.**deepEquals**(str2D, str2D2)); //true. **2차원이상 배열은 deepEquals**배열의 복사 - copyOf(), copyOfRange()
copyOf(배열, 복사할 요소의 개수)
copyOfRange(배열, from, to)인데 to는 미포함. 아래 int arr5를 참고
int[] arr = {0,1,2,3,4}; int[] arr2 = Arrays.**copyOf**(arr, **arr.length**); //arr2=[0,1,2,3,4] 복사할 요소의 개수 int[] arr3 = Arrays.copyOf(arr, 3); //arr3=[0,1,2]. 3개 복사 int[] arr4 = Arrays.copOf(arr, 7); //arr4=[0,1,2,3,4,0,0] 배열 길이보다 큰 값을 넣으면? 0이 들어옴 int[] arr5 = Arrays.**copyOfRange**(arr, 2, 4); //arr5=[2,3]. 4 미포함이라 인덱스2~3 값 int[] arr6 = Arrays.copyOfRange(arr, 0 ,7); //arr6=[0,1,2,3,4,0,0]. 7 미포함이고 배열 길이를 초과해서 인덱스0~6 값. 잉여는 0으로배열의 정렬 - sort()
오름차순으로 정렬됨
int[] arr = {3,2,0,1,4}; Arrays.**sort**(arr); //배열arr을 정렬한다 System.out.println(Arrays.toString(Arr)); //[0,1,2,3,4]
'Back-end' 카테고리의 다른 글
| [Java] 클래스와 객체 (0) | 2025.12.04 |
|---|---|
| [Java] 증감 연산자 ++ -- (0) | 2025.12.04 |
| [Java] 상수와 리터럴 (0) | 2025.12.04 |
| [OCI] Oracle Cloud에 Spring Boot JAR 배포 & 포트 허용하기 (0) | 2025.11.15 |
| [Java] MacOS에 자바 openjdk 설치하기 - Homebrew, 맥 터미널 (0) | 2025.09.05 |