* 해당 글은 백엔드 자바 강의이후 회고 글입니다.
https://bootcamp.likelion.net/school/kdt-backendj-21th
백엔드 부트캠프 21기: Java : 멋사 부트캠프
실전 스킬 기반 백엔드 개발자 취업 완벽 대비 교육
bootcamp.likelion.net
배열의 기본적인 개념
- 동일한 자료형의 데이터를 하나의 이름으로 관리하는 데이터 객체(data objectg) 이다.
- 배열은 같은 종류의 데이터를 여러개 선언하는 대신 하나의 변수로 나열형 상수를 인덱스를 통해 관리한다.
- 기본 데이터 형과 참조형 객체 배열을 포함하여 모든 자료형에서 사용 가능하다.
- 배열은 선언과 동시에 주소를 할당받아 요소로 관리되며 연속된 메모리 공간을 차지한다.
- 가변 배열을 사용하면 크기가 다른 배열을 저장할 수 있다.
- System.arraycopy() 를 활용하면 배열을 복사할 수 있다.
- Arrays.sort(), Arrays.copyOf(), Arrays.fill(), Arrays.equals() 등 주요 메서드를 활용하면 배열을 효율적으로 관리할 수 있다.
- List.of(), Stream API, Pattern Matching for switch 등의 최신 JDK 21 기능을 활용하여 배열을 더욱 효율적으로 사용할 수 있다.
// Pattern Matching for switch (JDK 21)
// 객체가 특정 배열 타입인지 검사 가능
Object obj = new int[]{1,2,3};
switch(obj) {
case int[] arr -> System.out.println("This is an int array: " + Arrays.toString(arr));
default -> System.out.println("Unknown type");
}
배열(Array) 이 구현하는 인터페이스
배열은 java.lang.Clonable 인터페이스와 java.io.Serializable 인터페이스를 구현한다.
- Clonable 인터페이스
- 클래스가 java.lang.Clonable 인터페이스를 구현한다는 것은 Object.clone() 메서드가 해당 클래스의 인스턴스를 필드 단위로 복사하는 것이 허용됨을 나타낸다.
- Clonable 인터페이스를 구현하지 않는 인스턴스에서 Object 클래스의 clone 메서드를 호출하면 CloneNotSupportedException 예외가 발생한다.
- 관례적으로 이 인터페이스를 구현하는 클래스는 Object.clone (protected) 메서드를 공개(public) 메서드로 재정의 해야 한다.
- 이 인터페이스 자체에는 clone 메서드가 포함되어 있지 않다는 것을 유의해야 한다.

- clone() 메서드 활용
int [] ia1 = {1,2};
int [] ia2 = ia1.clone(); // ia1 배열 복사
int[] ia3 = ia1;
System.out.println((ia1 == ia2)); //false
System.out.println((ia1 == ia3)); //true
- clone() 메서드의 설명을 보면 알 수 있듯 이 메서드를 배열 객체에 대해 실행했을 경우 해당 배열의 메모리 주소값을 그대로 참조해서 복사하는 것이 아닌, 해당 배열의 내용을 그대로 복사한 새로운 배열 객체를 만들어서 반환해주므로(new) 위의 코드에서 ia1 에 대해 clone() 메서드를 통해 생성한 ia2 배열은 ia1 과 시작 주소가 서로 다른 새로운 배열 객체가 된다. 그렇기 때문에 ia1 == ia2 의 결과는 false 가 반환된다.
리플렉션을 이용해 객체의 타입 정보를 확인해보자.
아래의 코드를 실행시켜 보자.
int[] ia = new int[3];
System.out.println(ia.getClass());
System.out.println(ia.getClass().getSuperclass());
for(Class<?> c : ia.getClass().getInterfaces())
System.out.println("Superinterface : " + c);
- Class<? extends T> java.lang.Object.getClass() : 객체가 어떤 클래스의 인스턴스인지 반환한다.
- Class<? super T> java.lang.Class.getSuperclass() : 해당 클래스의 부모 클래스를 반환한다.
- Class<?>[] java.lang.Class.getInterfaces() : 해당 클래스가 구현하고 있는 인터페이스 목록을 반환한다.
출력은 아래와 같이 나오는 것을 확인할 수 있다.
class [I
class java.lang.Object
Superinterface : interface java.lang.Cloneable
Superinterface : interface java.io.Serializable
번외) ArrayList
- 기본적으로 배열은 항상 배열의 길이를 정하고 시작한다. 처음 만들어질때부터 정해진 길이가 존재하는 정적인 자료구조이다.
- 그렇기 때문에 중간에 데이터가 더 필요하거나 중간에 데이터가 삭제되더라도 배열의 길이를 변경할 수는 없기 때문에 그에 맞는 길이를 가지고 있는 배열을 새로 선언해야 한다.
- 이러한 단점을 보완하기 위해 자바에서는 객체 배열을 좀 더 쉽게 사용할 수 있도록 ArrayList 를 제공한다.
- ArrayList 외에도 배열을 쉽게 사용할 수 있도록 제공되는 클래스들이 있지만 ArrayList 가 가장 효율이 높기 때문에 많이 사용된다.
* 주요 메서드
- boolean add(E e) : 요소 하나를 배열에 추가한다. E는 리스트 요소의 자료형을 의미한다.
- add() 메서드를 이용하면 배열 길이와 상관없이 객체를 추가할 수 있다.
- int size() : 배열에 추가된 요소 전체 갯수를 반환한다.
- E get(int index) : 배열의 index 위치에 있는 요소 값을 반환한다.
- E remove(int index) : 배열의 index 위치에 있는 요소 값을 제거하고 그 값을 반환한다.
- remove() 메서드를 통해 배열 중간의 어떤 요소가 제거되더라도 그 다음 요소 값을 하나씩 앞으로 이동하는 코드가 이미 내부적으로 구현되어 있다.
- boolean isEmpty() : 배열이 비어있는지 확인한다.
사용 예시
- Book.java
public class Book {
private String bookName;
private String author;
public Book() {}
public Book(String bookName, String author) {
this.bookName = bookName;
this.author = author;
}
public String getBookName(){
return bookName;
}
public void setBookName(String bookName){
this.bookName = bookName;
}
public String getAuthor(){
return author;
}
public void setAuthor(String author){
this.author = author;
}
public void showBookInfo(){
System.out.println(bookName + "," + author);
}
}
- ArraysListTest.java
import java.util.ArrayList;
public class ArrayListTest{
public static void main(String[] args){
ArrayList<Book> library = new ArrayList<Book>();
library.add(new Book("태백산맥", "조정래"));
library.add(new Book("데미안", "헤르만 헤세"));
library.add(new Book("토지", "박경민"));
library.add(new Book("어린왕자", "생텍쥐페리"));
for(int i = 0; i < library.size(); i++){
Book book = library.get(i);
book.showBookInfo();
}
System.out.println();
System.out.println("===향상된 for문 사용===");
for(Book book : library){
book.showBookInfo();
}
}
}
'부트캠프 > 후기 챌린지' 카테고리의 다른 글
| [멋쟁이사자처럼부트캠프] 백엔드 자바 21기 (2026.01.19) (0) | 2026.02.09 |
|---|---|
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.15) (0) | 2026.01.22 |
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.14) (0) | 2026.01.22 |
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.13) (1) | 2026.01.22 |
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.09) (0) | 2026.01.09 |