데이터을 어떻게 저장하고 처리할 것인지에 대한 구조적인 형태를 의미
e.g. )
스택(Stack) : 후입 선출 방식 (뒤로가기, undo)
큐(Queue) : 선입 선출 방식
어떤 프로그램을 제작하고, 데이터를 다루는지에 따라 적합한 자료구조의 형태를 취하는 것이 중요함
: 메모리의 효율적인 사용, 클린 코드 작성 등 필수적으로 공부해야할 부분..
자바에서의 큰 범주의 자료구조 형태 - List, Set, Map
1) 자료를 순차적으로 나열한 구조(배열과 유사)

2) 10개의 인덱스가 자동 생성
3) List의 종류
① ArrayList : 검색, 조회에 효율적
② LinkedList : 추가, 수정, 삭제 등에 효율적
③ Vector
4) List 선언 방법
e.g. )
[private] List<Student> studentList = new LinkedList<Student>();
// List가 부모, LinkedList가 자식
// LinkedList의 자료구조인 studentList를 생성
5) generics(제네릭) : '< >'에 위치 컬렉션에 저장되는 객체 타입을 한가지로 통일
'< >' 안의 객체타입만 저장 가능 → 객체 타입이 적절한지 검사할 필요가 없다.
6) List 주요 메소드
① 객체 추가 : add
② 객체 교체 : set
③ 포함 여부 확인 : contains
④ 저장 객체 리턴 : get
⑤ 비어있는지 확인 : isEmpty
⑥ 객체 수 확인 : size
⑦ 객체 삭제 : remove
e.g.)
studentList.add(new Student(name, age, region, gender, score));
// -------------------------------------- 객체 추가 (add)
studentList.set(input, new Student(name, age, region, gender, score));
// -------------------------------------- 객체 교체 (set)
System.out.print("학생 이름 입력 >> ");
String input = sc.next();
for(Student std : studentList) { // 향상된 for문(for each)
if(std.getName().contains(input)) {
System.out.println(std + "\n");
}
// -------------------------------------- 포함 여부 확인 (contains)
System.out.print("학생 이름 입력 >> ");
String input = sc.next();
for(Student std : studentList) {
if(input.equals(std.getName())) {
System.out.println(std + "\n");
}
// -------------------------------------- 저장 객체 리턴 (get)
if(studentList.isEmpty()) {
System.out.println("학생 정보가 없습니다.");
}
// -------------------------------------- 비어있는지 확인 (isEmpty)
System.out.print("정보 제거를 원하는 학생의 인덱스 번호를 입력하세요 >> ");
int input = sc.nextInt();
if (input < 0 || input >= studentList.size()) {
return "잘못 입력하셨습니다.";
}
// -------------------------------------- 객체 수 확인 (size)
System.out.println(studentList.get(input) + "\n");
System.out.print("정보 제거를 진행하시겠습니까?(y/n) >>");
char input2 = sc.next().toUpperCase().charAt(0);
if (input2 == 'Y') {
studentList.remove(input);
return "\n정보 제거 완료!\n";
}
// -------------------------------------- 객체 제거 (remove)