ArrayList 학생 관리 시스템
📋 문제 설명
ArrayList를 사용하여 학생 정보를 저장하고 관리하는 시스템을 구현하세요.
동적 배열의 활용법과 CRUD 연산(생성, 조회, 수정, 삭제)을 학습합니다.
🎯 학습 목표
- ArrayList의 기본 사용법
- 객체를 컬렉션에 저장하고 관리
- 반복문을 통한 컬렉션 순회
- ID 기반 검색 및 삭제
💻 코드 구조
Student 클래스
Java
import java.util.ArrayList;
class Student {
private int id;
private String name;
private int age;
// TODO: 디폴트 생성자를 만드세요.
// TODO: 다음 생성자를 구현하세요.
// 힌트: id, name, age를 매개변수로 받아 초기화합니다.
// TODO: getter와 setter 메소드를 구현하세요.
// 힌트: 각 필드에 대해 getter와 setter를 만듭니다.
// public int getId() { return id; }
// public void setId(int id) { this.id = id; }
// ...
// TODO: print 함수를 만드세요. 학생 정보를 출력
// 힌트: "ID: [id], 이름: [name], 나이: [age]" 형식 출력
}
필드
private int id- 학생 IDprivate String name- 학생 이름private int age- 학생 나이
구현해야 할 것
- 디폴트 생성자
- 매개변수가 있는 생성자
- 모든 필드에 대한 getter/setter
print()메서드
StudentManager 클래스
Java
class StudentManager {
private ArrayList<Student> students;
public StudentManager() {
// TODO: students ArrayList를 초기화하세요.
// 힌트: students = new ArrayList<>();
}
public void addStudent(Student student) {
// TODO: 학생을 ArrayList에 추가하는 코드를 작성하세요.
// 힌트: students.add(student);
}
public void removeStudent(int id) {
// TODO: 주어진 id와 일치하는 학생을 ArrayList에서 제거하세요.
// 힌트:
// 1. for 루프로 students를 순회
// 2. student.getId()가 id와 같으면 제거
// 3. ArrayList의 remove() 메소드 사용
// 4. 제거 후 return으로 메서드 종료
}
public Student findStudent(int id) {
// TODO: 주어진 id와 일치하는 학생을 찾아 반환하세요.
// 힌트:
// 1. for 루프를 사용하여 ArrayList를 순회
// 2. student.getId()가 id와 같으면 해당 student 반환
// 3. 찾지 못한 경우 null 반환
return null;
}
public void displayAllStudents() {
// TODO: 모든 학생의 정보를 출력하세요.
// 힌트:
// 1. for-each 루프 사용: for (Student student : students)
// 2. 각 student의 print() 메서드 호출
// 3. 학생이 없으면 "등록된 학생이 없습니다." 출력
}
}
필드
private ArrayList<Student> students- 학생 목록
메서드
addStudent()- 학생 추가 (Create)findStudent()- ID로 학생 검색 (Read)removeStudent()- ID로 학생 삭제 (Delete)displayAllStudents()- 전체 학생 출력 (Read)
📝 Main 클래스 테스트
Java
public class Main {
public static void main(String[] args) {
StudentManager manager = new StudentManager();
// TODO: 최소 3명의 학생을 생성하고 manager에 추가하세요.
// 힌트:
// Student student1 = new Student(1, "홍길동", 30);
// manager.addStudent(student1);
// ... (나머지 학생도 동일하게)
// 학생 정보:
// - ID: 1, 이름: 홍길동, 나이: 30
// - ID: 2, 이름: 김나나, 나이: 22
// - ID: 3, 이름: 최영수, 나이: 25
// TODO: 모든 학생 정보를 출력하세요.
System.out.println("=== 전체 학생 목록 ===");
// manager.displayAllStudents();
// TODO: ID가 3인 학생을 검색하여 출력하세요.
System.out.println("\n=== ID 3번 학생 검색 ===");
// Student found = manager.findStudent(3);
// if (found != null) {
// found.print();
// } else {
// System.out.println("학생을 찾을 수 없습니다.");
// }
// TODO: ID가 1인 학생을 삭제하세요.
System.out.println("\n=== ID 1번 학생 삭제 ===");
// manager.removeStudent(1);
// System.out.println("학생이 삭제되었습니다.");
// TODO: 삭제 후 모든 학생 정보를 다시 출력하세요.
System.out.println("\n=== 삭제 후 전체 학생 목록 ===");
// manager.displayAllStudents();
}
}
예상 출력:
Java
=== 전체 학생 목록 ===
ID: 1, 이름: 홍길동, 나이: 30
ID: 2, 이름: 김나나, 나이: 22
ID: 3, 이름: 최영수, 나이: 25
=== ID 3번 학생 검색 ===
ID: 3, 이름: 최영수, 나이: 25
=== ID 1번 학생 삭제 ===
학생이 삭제되었습니다.
=== 삭제 후 전체 학생 목록 ===
ID: 2, 이름: 김나나, 나이: 22
ID: 3, 이름: 최영수, 나이: 25
💡 학습 포인트
1. ArrayList 기본 사용법
Java
// 생성
ArrayList<Student> students = new ArrayList<>();
// 추가
students.add(student);
// 조회 (인덱스)
Student s = students.get(0);
// 삭제 (인덱스)
students.remove(0);
// 삭제 (객체)
students.remove(student);
// 크기
int size = students.size();
2. 컬렉션 순회
일반 for 루프:
Java
for (int i = 0; i < students.size(); i++) {
Student student = students.get(i);
// ...
}
for-each 루프 (권장):
Java
for (Student student : students) {
// ...
}
3. CRUD 연산
- Create:
add()메서드로 추가 - Read:
get(),findStudent()로 조회 - Update: 객체를 찾아서 setter로 수정
- Delete:
remove()메서드로 삭제
4. 배열 vs ArrayList
| 구분 | 배열 | ArrayList |
|---|---|---|
| 크기 | 고정 | 동적 (자동 확장) |
| 타입 | 기본형 + 참조형 | 참조형만 (객체) |
| 길이 | array.length | list.size() |
| 접근 | array[i] | list.get(i) |
5. 제네릭 (Generics)
ArrayList<Student>: Student 타입만 저장 가능- 컴파일 시 타입 안전성 보장
- 꺼낼 때 형변환 불필요