728x90
안녕하세요. 이번 게시글에서는 컬렉션 프레임워크를 활용해 데이터를 관리할 수 있는 간단한 학생 데이터 관리 시스템에 대해 설명해드리겠습니다.
자바의 ArrayList, HashMap, HashSet과 같은 컬렉션들을 사용하여 데이터를 관리하는 방법을 사용할 것이며
각 학생을 객체로 표현하고, 이를 관리하는 클래스를 통해 객체 지향 프로그래밍을 만들어보려고 합니다.
그럼 ArrayList, HashMap, HashSet 의 차이점에 대해 설명하겠습니다.
ArrayList
- 타입: ArrayList는 List 인터페이스를 구현하는 클래스입니다.
- 특징: ArrayList는 내부적으로 배열을 사용하여 요소를 저장합니다. 이는 인덱스를 통한 빠른 접근이 가능하게 해주지만, 크기 조정이 필요할 때는 비용이 많이 듭니다(예: 새로운 요소를 추가하거나 삭제할 때).
- 사용 사례: 순서가 중요하고, 데이터에 빠르게 접근해야 하지만, 자주 크기를 변경하지 않을 때 유용합니다.
- 주의점: 동일한 요소를 여러 번 저장할 수 있으며, null 값을 포함할 수 있습니다.
HashMap
- 타입: HashMap은 Map 인터페이스를 구현하는 클래스입니다.
- 특징: HashMap은 키-값 쌍으로 데이터를 저장합니다. 이 구조는 키를 통해 빠르게 데이터를 검색할 수 있도록 해줍니다. 내부적으로 해시 테이블을 사용하여 데이터를 저장합니다.
- 사용 사례: 키를 통해 빠르게 데이터를 찾거나, 데이터에 고유 식별자를 부여해야 할 때 사용합니다.
- 주의점: 각 키는 유일해야 하지만, 다른 키와 동일한 값을 가질 수 있습니다. 또한, 하나의 null 키와 여러 null 값을 허용합니다.
HashSet
- 타입: HashSet은 Set 인터페이스를 구현하는 클래스입니다.
- 특징: HashSet은 중복된 요소를 허용하지 않습니다. 내부적으로 HashMap을 사용하여 요소를 저장하며, 각 요소를 키로 사용하고, 모든 값은 동일한 더미(dummy) 값을 가집니다.
- 사용 사례: 중복을 허용하지 않는 고유한 요소들의 집합을 관리할 때 사용합니다.
- 주의점: 요소의 순서는 보장되지 않으며, null 값도 포함할 수 있습니다.
요약
- ArrayList: 순서가 중요한 요소들의 리스트. 요소의 중복이 허용됩니다.
- HashMap: 키-값 쌍으로 데이터를 저장. 키를 통한 빠른 접근이 가능하며, 키는 유일해야 합니다.
- HashSet: 중복 없이 고유한 요소들을 저장. 요소의 순서는 보장되지 않습니다.
우선 시연영상입니다.
전체 코드입니다.
// 필요한 클래스들을 임포트합니다.
import java.util.*;
public class StudentManagementSystem {
// 학생 정보를 저장하는 'Student'라는 내부 클래스를 정의합니다.
static class Student {
String id; // 학생의 ID
String name; // 학생의 이름
String department; // 학생의 학과
// 학생 객체 생성자: 새로운 학생 객체를 만들 때 ID, 이름, 학과 정보를 초기화합니다.
Student(String id, String name, String department) {
this.id = id;
this.name = name;
this.department = department;
}
// 학생 정보를 문자열로 반환하는 메서드. 객체를 출력할 때 유용합니다.
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", department='" + department + '\'' +
'}';
}
}
// 학생 객체들을 저장하기 위한 컬렉션들을 선언합니다.
List<Student> students = new ArrayList<>();
Map<String, Student> studentMapById = new HashMap<>();
Map<String, Student> studentMapByName = new HashMap<>();
Set<String> studentIds = new HashSet<>();
// 새로운 학생을 추가하는 메서드입니다.
public void addStudent(Student student) {
// 이미 등록된 학생 ID인지 확인합니다.
if (studentIds.add(student.id)) {
students.add(student);
studentMapById.put(student.id, student);
studentMapByName.put(student.name, student);
} else {
// 중복된 ID가 있으면 오류 메시지를 출력합니다.
System.out.println("이미 존재하는 학생 ID입니다: " + student.id);
}
}
// ID를 기반으로 학생을 찾는 메서드입니다.
public Student findStudentById(String id) {
return studentMapById.get(id);
}
// 이름을 기반으로 학생을 찾는 메서드입니다.
public Student findStudentByName(String name) {
return studentMapByName.get(name);
}
// 등록된 모든 학생들의 정보를 출력하는 메서드입니다.
public void printStudents() {
for (Student student : students) {
System.out.println(student);
}
}
// 프로그램의 시작점인 main 메서드입니다.
public static void main(String[] args) {
// 학생 관리 시스템 객체를 생성합니다.
StudentManagementSystem sms = new StudentManagementSystem();
// 몇 명의 학생을 시스템에 추가합니다.
sms.addStudent(new Student("2024001", "홍길동", "컴퓨터공학과"));
sms.addStudent(new Student("2024002", "김철수", "기계공학과"));
sms.addStudent(new Student("2024003", "이영희", "전자공학과"));
// 사용자 입력을 받기 위한 Scanner 객체를 생성합니다.
Scanner scanner = new Scanner(System.in);
System.out.println("학생의 ID 또는 이름을 입력하세요: ");
String input = scanner.nextLine();
// 입력받은 정보로 학생을 찾습니다.
Student foundStudent = sms.findStudentById(input);
if (foundStudent == null) {
foundStudent = sms.findStudentByName(input);
}
// 찾은 학생의 정보를 출력합니다.
if (foundStudent != null) {
System.out.println("검색된 학생: " + foundStudent);
} else {
// 학생을 찾지 못하면 이 메시지를 출력합니다.
System.out.println("학생을 찾을 수 없습니다.");
}
}
}
'Java' 카테고리의 다른 글
[Java] Vert.x 클러스터링 예제 (0) | 2024.04.04 |
---|---|
[Java] Vert.x HTTP 기본 예제 (0) | 2024.03.31 |
[Java] Java Swing으로 구현하는 날씨 기반 상태 변화 시뮬레이션 (0) | 2024.03.21 |
[JAVA] 클래스 상속을 활용한 게임만들기 (2) | 2024.02.27 |
[Java] 영화진흥위원회 오픈API 사용한 영화 정보 출력 예제 (0) | 2024.02.18 |