중급컬렉션 프레임워크

ArrayList 학생 관리

ArrayList를 사용하여 학생 정보를 저장하고 관리하는 시스템을 구현합니다. 동적 배열의 활용법을 학습합니다.

ArrayListCRUD 연산컬렉션 순회

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 - 학생 ID
  • private 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.lengthlist.size()
접근array[i]list.get(i)

5. 제네릭 (Generics)

  • ArrayList<Student>: Student 타입만 저장 가능
  • 컴파일 시 타입 안전성 보장
  • 꺼낼 때 형변환 불필요