🧱 배열 복습하기 - 도서 관리 프로그램 (CRUD 실습)
✍️ 시작하며
지난 시간에는 자바의 기본 자료구조 중 하나인 **배열(Array)**에 대해 배웠습니다.
이번 글에서는 배열을 활용해 도서 데이터를 관리하는 간단한 콘솔 프로그램을 만들어 보겠습니다.
이를 통해 프로그래밍의 가장 기본이 되는 개념 중 하나인 CRUD도 자연스럽게 복습할 수 있습니다.
✅ CRUD란?
CRUD는 데이터 처리의 기본적인 네 가지 동작을 의미합니다.
- C: Create (생성)
- R: Read (조회)
- U: Update (수정)
- D: Delete (삭제)
이 개념은 웹, 앱, DB 등 모든 프로그래밍 영역에서 반복적으로 사용됩니다.
이번 실습에서는 배열과 클래스를 활용해 이 동작들을 직접 구현해볼 거예요.
💡학습 목표
- 배열을 이용한 도서 목록 관리 시스템 구현
- 자바의 객체 배열과 null 체크를 통한 방어적 코드 작성
- while문 + switch 또는 if문을 이용한 메뉴 처리 흐름 익히기
- static 변수와 메서드를 이용한 데이터 관리의 흐름 이해
🧱 1단계 - Book 클래스 만들기
도서 정보를 담을 Book 클래스를 먼저 정의합니다.
package books;
public class Book {
private String title;
private String author;
// 생성자
public Book(String title, String author) {
this.title = title;
this.author = author;
}
// getter 메서드
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
// 도서 정보 출력
public void showInfo() {
System.out.println(">> 책 정보 <<");
System.out.println("제목 : " + title);
System.out.println("저자 : " + author);
}
}
📌 설명
Book 클래스는 도서 정보를 표현하는 데이터 모델입니다.
생성자에서 제목과 저자를 받아 저장하고, getter를 통해 외부에서 접근할 수 있도록 했습니다.
showInfo()는 도서 정보를 깔끔하게 출력해주는 메서드입니다.
🧰 2단계 - 메인 클래스 설계
MyBookStore 클래스를 만들고, 콘솔 메뉴를 통해 사용자의 입력을 받아 기능을 실행하도록 구성합니다.
Scanner scanner = new Scanner(System.in);
Book[] books = new Book[100];
boolean flag = true;
while (flag) {
System.out.println("1.저장 2.전체조회 3.선택조회 4.전체삭제 5.종료");
String selectedNumber = scanner.nextLine();
if (selectedNumber.equals("1")) {
save(scanner, books);
} else if (selectedNumber.equals("2")) {
readAll(books);
} else if (selectedNumber.equals("3")) {
readByTitle(scanner, books);
} else if (selectedNumber.equals("4")) {
deleteAll(books);
} else if (selectedNumber.equals("5")) {
flag = false;
}
}
✅ 메뉴를 선택하면 해당 기능이 호출되는 구조입니다.
사용자가 "1"을 입력하면 save()가 실행되고, "5"를 입력하면 프로그램이 종료됩니다.
📝 3단계 - CRUD 기능 구현
📌 Create - 도서 정보 저장
public static void save(Scanner scanner, Book[] books) {
System.out.println("책 제목을 입력하세요:");
String title = scanner.nextLine();
System.out.println("저자를 입력하세요:");
String author = scanner.nextLine();
books[currentBookIndex] = new Book(title, author);
currentBookIndex++;
}
✅ 사용자의 입력을 받아 Book 객체를 만들고 배열에 저장합니다.
📌 Read - 전체 도서 목록 조회
public static void readAll(Book[] books) {
for (int i = 0; i < books.length; i++) {
if (books[i] != null) {
System.out.println(books[i].getTitle() + ", " + books[i].getAuthor());
}
}
}
✅ 배열을 순회하며 등록된 도서만 출력합니다.
📌 Read - 도서 제목으로 검색
public static void readByTitle(Scanner scanner, Book[] books) {
System.out.println("책 제목 입력:");
String title = scanner.nextLine().trim();
boolean found = false;
for (Book book : books) {
if (book != null && book.getTitle().equals(title)) {
System.out.println(book.getTitle() + ", " + book.getAuthor());
found = true;
break;
}
}
if (!found) System.out.println("해당 책은 존재하지 않습니다.");
}
✅ 특정 제목을 가진 도서를 배열에서 검색합니다.
🗑️ Delete - 전체 삭제
public static void deleteAll(Book[] books) {
for (int i = 0; i < books.length; i++) {
books[i] = null;
}
}
✅ 배열의 모든 요소를 null로 초기화하여 도서를 논리적으로 삭제합니다.
저장된 도서 정보는 사라지며, readAll() 실행 시 출력되지 않습니다.
🧪 4단계 - 참조형 배열 활용 (BookTest1)
배열은 단순한 숫자만 저장하는 것이 아니라, 우리가 만든 클래스의 객체도 저장할 수 있습니다. Book 객체를 배열에 저장하고 활용하는 예제를 보며 배열의 특징을 정리해 봅시다.
public class BookTest1 {
public static void main(String[] args) {
// 배열 안에 요소는 기본형 또는 참조형일 수 있다.
Book[] books = new Book[10]; // 길이는 10 (0~9)
// 객체 저장
books[0] = new Book("개발자가되고싶습니다.", "앨런");
books[1] = new Book("무궁화꽃이피었습니다.", "김진명");
books[2] = new Book("흐르는강물처럼.", "파울로코엘료");
books[3] = new Book("리딩으로리드하라.", "이지성");
books[4] = new Book("사피엔스.", "유발하라리");
books[9] = new Book("홍길동전.", "허균");
// 단일 요소 조회
String title9 = books[9].getTitle();
String author9 = books[9].getAuthor();
System.out.println("title9: " + title9);
System.out.println("author9: " + author9);
// 반복문을 이용한 전체 조회 (null 방어)
for (int i = 0; i < books.length; i++) {
if (books[i] != null) {
System.out.println(books[i].getTitle());
}
}
}
}
✅ 참조형 배열은 우리가 만든 클래스의 인스턴스를 저장할 수 있습니다.
✅ 배열 전체 길이와 실제로 저장된 요소 수는 다를 수 있으므로 null 체크는 필수입니다.
📦 배열의 특징과 한계 정리
항목 | 설명 |
고정 길이 | 한 번 생성된 배열의 길이는 변경할 수 없음 |
순차 저장 | 인덱스를 통해 빠르게 접근 가능 |
null 처리 | 비어있는 인덱스는 null이므로 방어적 코드 필요 |
참조형 저장 | 객체를 배열에 저장하여 구조적인 데이터 관리 가능 |
🧩 마무리하며
이번 실습을 통해 자바 배열과 객체를 활용하여 도서 관리 프로그램을 직접 구현해보았습니다.
배열은 단순한 숫자 저장을 넘어, 우리가 만든 객체 데이터를 체계적으로 관리할 수 있는 유용한 자료구조임을 확인할 수 있었죠.
특히, 이번 프로젝트에서는 프로그램의 핵심 개념인 CRUD를 실제 코드로 체험하며 그 동작 방식을 익힐 수 있었습니다.
다시 정리하면,
- C (Create) : 도서를 배열에 추가
- R (Read) : 저장된 도서를 전체 또는 선택적으로 조회
- U (Update) : (선택적으로) 특정 도서 정보를 수정
- D (Delete) : 배열 데이터를 null 처리하여 삭제
📝 CRUD는 프로그래밍의 기본 중의 기본입니다. 반드시 기억해두세요!
🔜 다음 글 예고 : 메서드 오버로딩
다음 글에서는 자바의 중요한 문법 개념인
메서드 오버로딩(Method Overloading) 에 대해 다룹니다.
같은 이름의 메서드를 다양한 입력 방식으로 처리하는 방법을 함께 배워보세요!
🔙 이전 글 다시 보기
배열(Array)에 대해서 궁금하다면??
🧱 Array(배열)에 대한 이해
💬 시작하며이번 글에서는 자바의 기본 자료구조 중 가장 핵심인배열(Array) 에 대해 자세히 배워봅니다.지난 글에서는 static 키워드를 통해 클래스 수준의 공유 데이터를 다뤘다면,이번에는 다
seohong.tistory.com