ArrayList를 다루는 StudentManager 클래스는 controller 패키지에
student 객체를 다루는 Student 클래스는 entity 패키지에 두고 코딩해보자.
import controller.StudentManager;
import entity.Student;
public class ArrayMain {
public static void main(String[] args) {
StudentManager manager = new StudentManager();
// TODO: 최소 3명의 학생을 생성하고 manager에 추가하세요.
// id 1, 홍길동, 30
Student s1=new Student(1,"홍길동", 30);
// id 2, 김나나, 22
Student s2=new Student(2, "김나나", 22);
// id 3, 최영수, 25
Student s3=new Student(3, "최영수", 25);
manager.addStudent(s1);
manager.addStudent(s2);
manager.addStudent(s3);
// TODO: 모든 학생 정보를 출력하세요.
manager.displayAllStudents();
System.out.println();
// TODO: ID로 한 명의 학생을 검색하고 그 정보를 출력하세요.
// id 가 3인 학생 검색하여 출력.
(manager.findStudent(3)).print();
//manager.findStudent(3))가 student 객체임
System.out.println();
// TODO: 한 명의 학생을 삭제하세요. id가 1인 학생 삭제.
manager.removeStudent(1);
// TODO: 삭제 후 모든 학생 정보를 다시 출력하세요.
manager.displayAllStudents();
}
}
package entity;
public class Student {
private int id;
private String name;
private int age;
// TODO: 디폴트생성자를 만드세요.
public Student() {
}
// TODO: 다음 생성자를 구현하세요.
// 힌트: id, name, age를 매개변수로 받아 초기화합니다.
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
// 함수는 필요할 때 만들자
// TODO: print 함수를 만드세요. 학생 정보를 문자열로 출력
// 힌트: "ID: [id], 이름: [name], 나이: [age]" 형식 출력
public void print() {
System.out.println("ID: " + id + ", 이름: " + name + ", 나이: " + age);
}
// TODO: getter와 setter 메소드를 구현하세요.
// 힌트: 각 필드에 대해 getter와 setter를 만듭니다.
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package controller;
//삭제하고 관리하는 클래스 controller Class
import entity.Student;
import java.util.ArrayList;
//자바의 유틸이라는 패키지의 ArrayList
public class StudentManager {
private ArrayList<Student> students;
//students는 Student 객체들을 관리하는 ArrayList
//src에 controller(관리) 새 패키지를 만듬
// TODO: students ArrayList를 초기화하세요.
// students 객체생성하자
public StudentManager() {
students=new ArrayList<>();
}
public void addStudent(Student student) {
// TODO: 학생을 ArrayList에 추가하는 코드를 작성하세요.
students.add(student);
// 클래스의 객체 저장
}
public void removeStudent(int id) {
// TODO: 주어진 id와 일치하는 학생을 ArrayList에서 제거하는 코드를 작성하세요.
// 힌트: ArrayList의 remove() 메소드를 사용하세요.
for(Student student : students){
if(student.getId()==id){
students.remove(student);
}
};
}
public Student findStudent(int id) {
// TODO: 주어진 id와 일치하는 학생을 찾아 반환하는 코드를 작성하세요.
// 힌트: for 루프를 사용하여 ArrayList를 순회하며 찾습니다.
for (Student student : students) {
// student를 관리하는 ArrayList =students 에서
// Student 클래스의 student 변수 가져와라
// students의 ArrayList를 순회함
if (student.getId() == id) {
return student;
}
}
return null; // 전부 순회했는데 찾지 못한 경우 null 반환
}
public void displayAllStudents() {
// TODO: 모든 학생의 정보를 출력하는 코드를 작성하세요.
// 힌트: for-each 루프를 사용하여 ArrayList를 순회하며 각 학생 정보를 출력합니다.
for( Student student: students){
// student를 저장하는 ArrayList =students 에서
// Student 클래스의 student 변수 가져와라
student.print();
}
}
}
for (a : b) 구문
for (a : b) 구문은 Java에서 향상된 for 문 또는 for-each 루프라고 불리며,
배열이나 컬렉션의 모든 요소를 순회하는 데 사용됩니다.
이 구문은 코드의 가독성을 높이고, 인덱스를 직접 관리할 필요가 없기 때문에 간결하게 작성가능
public void displayAllStudents() {
// TODO: 모든 학생의 정보를 출력하는 코드를 작성하세요.
// 힌트: for-each 루프를 사용하여 ArrayList를 순회하며 각 학생 정보를 출력합니다.
for(Student student:students){
student.print();
}
}
for (데이터타입 변수명 : 배열/컬렉션) {
// 실행할 코드
}
for (a : b) 구문 작동방식
- 배열이나 컬렉션의 첫 번째 요소부터 시작합니다.
- 해당 요소를 지정한 변수에 할당합니다.
- 코드 블록 내의 문장을 실행합니다.
- 마지막 요소까지 모두 순회할 때까지 2~3번의 과정을 반복합니다.
첨삭
public void removeStudent(int id) {
// TODO: 주어진 id와 일치하는 학생을 ArrayList에서 제거하는 코드를 작성하세요.
// 힌트: ArrayList의 remove() 메소드를 사용하세요.
students.remove(id);
}
이 코드는 ArrayList의 인덱스를 기준으로 제거합니다:
id를 ArrayList의 인덱스로 간주하여 해당 위치의 요소를 제거합니다.
학생의 실제 ID와 ArrayList의 인덱스가 일치한다는 가정 하에 동작합니다.
이는 위험할 수 있습니다. 왜냐하면 학생의 ID와 ArrayList의 인덱스가 항상 일치하지는 않기 때문입니다.
public void removeStudent(int id) {
// TODO: 주어진 id와 일치하는 학생을 ArrayList에서 제거하는 코드를 작성하세요.
// 힌트: ArrayList의 remove() 메소드를 사용하세요.
for(Student student : students){
if(student.getId()==id){
students.remove(student);
}
};
}
후자가 옳은방법
모든 학생을 순회하며 주어진 id와 일치하는 학생을 찾습니다.
일치하는 학생을 찾으면 그 학생 객체를 제거합니다.
학생의 실제 ID를 기준으로 삭제하므로 더 안전하고 정확합니다.
실제 학생의 ID를 기준으로 삭제하기 때문에 의도한 대로 정확히 동작합니다.