오늘의 코드
package edu.java.collection01;
import java.util.ArrayList;
import java.util.List;
// * List<> 클래스
// - 배열과 같은 역할을 Generic 클래스로 생성한 형태
// - 배열은 저장되는 크기를 지정해야하지만, List는 저장의 한계가 없음
// - 추가하는 만큼 저장 공간을 늘려줌
// - 주요 메소드 :
// add() : 원소 추가
// get() : 원소 읽기
// set() : 원소 변경
// remove() : 원소 삭제
public class ListMain01 {
public static void main(String[] args) {
int[] list1 = new int[3];
list1[0] = 1;
System.out.println(list1.length);
// 배열의 길이는 데이터가 저장된 개수와 상광없이 고정
// 배열에 저장된 데이터의 개수를 확인하기 어려움
List<Integer> list2 = new ArrayList<>(); // 다형성 및 상속관계가 성립 된다.
System.out.println(list2.size());
// ArrayList에 원소(element) 추가 : add() 메소드 사용
list2.add(100); // index = 0
list2.add(200); // index = 1
list2.add(300); // index = 2
list2.add(400); // index = 3
System.out.println("리스트 크기 : " + list2.size());
// ArrayList에 있는 원소 참조(읽기) : get(index) 메소드 사용
System.out.println(list2.get(0));
System.out.println(list2.get(2));
System.out.println();
// for-each()
// for(원소타입 변수이름 : 배열 쪼는 컬렉션) {...}
for(int n : list2) {
System.out.println(n);
} // 두개의 타입이 다르지만 작용하는 이유는 Integer때문
System.out.println();
// ArrayList에서 특정 인덱스의 원소를 변경 : set(index, value)
list2.set(0, 1);
list2.set(2, 1234);
for(Integer n : list2) {
System.out.println(n);
}
System.out.println();
// ArrayList에서 특정 인덱스의 원소를 삭제 : remove(index)
list2.remove(1);
System.out.println("리스트 크기 : " + list2.size());
for(int i =0; i < list2.size(); i++) {
System.out.println("index : " + i + ", value : " + list2.get(i));
}
} // end main()
} // end ListMain01
package edu.java.collection02;
import java.util.ArrayList;
class Student {
// 멤버 변수
private int stuNo;
private String name;
public Student() {}
public Student(int stuNo, String name) {
super();
this.stuNo = stuNo;
this.name = name;
}
@Override
public String toString() {
return "Student [stuNo=" + stuNo + ", name=" + name + "]";
}
}
public class ListMain02 {
public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(100);
ArrayList<String> list2 = new ArrayList<String>();
list2.add("test");
// Student 타입을 지정할 수 있는 ArrayList 인스턴스 생성
ArrayList<Student> list3 = new ArrayList<>();
list3.add(new Student(1, "kim")); // 형변환시켜 주어야 한다는 것 까지 생각을 해야 한다.
Student stu1 = new Student(2, "park");
list3.add(stu1);
for(int i = 0; i < list3.size(); i++) {
System.out.println(list3.get(i));
}
} // end main()
} // end ListMain02
package edu.java.collection03;
import java.util.LinkedList;
import java.util.List;
//Collection<E> : 자료(데이터)를 저장하기 위한 Generic 클래스
//|_ List<E>, Set<E>
//|_ Map<K, V>
//List<E>
//1. 자료들이 저장되는 순서가 중요 -> 인덱스 사용
//2. 중복된 값들의 저장을 허용
//List<E>
//|_ ArrayList<E>, LinkedList<E>
//ArrayList<E>
// 1. 내부적으로 배열 자료구조를 사용
// 2. 저장 용량을 늘리는데 많은 시간이 소요됨 - 단점
// 3. 저장된 데이터를 삭제하는데 많은 시간이 소요됨 - 단점
// 4. 데이터 참조(검색)할 때 매우 빠름 - 장점
//LinkedList<E>
// 1. 내부적으로 Linked List 자료구조를 사용
// 2. 저장 용량을 늘리는 과정이 매우 간단 - 장점
// 3. 저장된 데이터를 삭제하는 과정이 매우 간단 - 장점
// 4. 데이터를 참조(검색)하는 시간이 매우 느림 - 단점
//ArrayList<E>, LinkedList<E>에서 사용되는 메소드들 :
//- add(element), get(index), set(index, element), remove(index)
public class CollectionMain03 {
public static void main(String[] args) {
// String을 저장할 수 있는 Linked 객체 생성
List<String> list = new LinkedList<>();
list.add("화요일");
list.add("내일은");
list.add("수요일입니다. ㅠㅠ");
for(String x : list) {
System.out.println(x);
}
list.set(2, "금요일가즈아~~~");
for(String x : list) {
System.out.println(x);
}
} // end main()
} // end CollectionMain03
package edu.java.collection04;
public class Score {
private int math;
private int eng;
public Score() {
}
public Score(int math, int eng) {
super();
this.math = math;
this.eng = eng;
}
@Override
public String toString() {
return "Score [math=" + math + ", eng=" + eng + "]";
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
}
package edu.java.collection04;
public class Student {
private String name;
private Score score;
public Student() {
}
public Student(String name, Score score) {
super();
this.name = name;
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", score=" + score + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Score getScore() {
return score;
}
public void setScore(Score score) {
this.score = score;
}
}
package edu.java.collection04;
import java.util.*;
public class CollectionMain04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Student> list = new ArrayList<>();
Score score = new Score();
Student student = new Student();
// 학생 정보(이름, 점수) 3개 입력받아 list에 저장
// 학생 정보를 입력받는다. 입력받은 정보를 Student 객체에 저장
// 저장된 Student를 list에 추가한다.
for (int i = 0; i < 3; i++){
System.out.println("학생 이름 >");
String name = sc.next();
System.out.println("학생 수학 점수 >");
int mat = sc.nextInt();
System.out.println("학생 영어 점수 >");
int eng = sc.nextInt();
score = new Score(mat, eng);
student = new Student(name, score);
list.add(student);
}
// for (int i = 0; i < 3; i++){
// System.out.println("학생 이름 >");
// student.setName(sc.next());
// System.out.println("학생 수학 점수 >");
// score.setMath(sc.nextInt());
// System.out.println("학생 영어 점수 >");
// score.setEng(sc.nextInt());
// student.setScore(score);
// list.add(student);
// }
// 전체 데이터 검색(출력)
for(int i = 0; i < list.size(); i++) {
student = list.get(i);
System.out.println("이름 : " + student.getName());
System.out.println("수학 : " + student.getScore().getMath());
System.out.println("영어 : " + student.getScore().getEng());
}
// 데이터 수정
// -1번 인덱스의 학생의 정보를 변경
// 예시) 이름 : 둘리
// 수학 : 100
// 영어 : 50
String name = "둘리";
int mat = 100;
int eng = 50;
score = new Score(mat, eng);
student = new Student(name, score);
list.set(1, student);
// - 0번 인덱스 학생의 영어 점수만 변경
System.out.println("0번 인덱스 학생 영어 점수 >");
eng = sc.nextInt();
score = new Score(mat, eng);
student = new Student(name, score);
list.set(0, student);
// 변경된 리스트의 모든 데이터 출력
for(int i = 0; i < list.size(); i++) {
student = list.get(i);
System.out.println("이름 : " + student.getName());
System.out.println("수학 : " + student.getScore().getMath());
System.out.println("영어 : " + student.getScore().getEng());
}
// 데이터 삭제 : 1번 인덱스 학생의 모든 정보 삭제
list.remove(1);
sc.close();
} // end main()
} // end CollectionMain04
연락처 프로그램 ver0.3
연락처 프로그램 ver0.2를 이용하여 아래 기능 구현
1. ContactVO[] list -> ArrayList list 로 변경
2. 연락처 삭제 기능 추가
package edu.java.contact03;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;
// MVC 디자인 패턴에서 View 클래스
// - UI를 담당하는 역활
// * 현재 시스템은 규모가 작으므로 Controller 역활도 수행
public class ContactMain03 {
private static Scanner sc;
private static ContactDAO dao; // ContactDAOImple 인스턴스를 저장할 변수
public static void main(String[] args) {
System.out.println("연락처 등록 메뉴");
sc = new Scanner(System.in);
dao = ContactDAOImple.getInstance(); // 다형성. 싱글톤 인스턴스 생성
boolean run = true;
while (run) {
showMainMenu();
try {
int choice = sc.nextInt();
switch (choice) {
case Menu.INSERT:
InsertMember();
break;
case Menu.SELECT_ALL:
selectAll();
break;
case Menu.SELECT_BY_INDEX:
selectByIndax();
break;
case Menu.UPDATE:
updateMember();
break;
case Menu.DELETE:
deleteMamber();
break;
case Menu.QUIT:
sc.close();
run = false;
break;
default:
System.out.println("다시 선택하세요.");
break;
}
} catch (InputMismatchException e) {
System.out.println("올바른 선택이 아닙니다. 숫자를 입력하세요.");
sc.next(); // Clear the invalid input
} catch (Exception e) {
System.out.println("오류가 발생했습니다: " + e.getMessage());
}
}
} // end main()
private static void deleteMamber() {
System.out.println("검색할 인덱스 입력>");
int index = sc.nextInt();
int count = ((ContactDAOImple) dao).getCount();
if (index >= 0 && index < count) {
int result = dao.delete(index);
if (result == 1) {
System.out.println("연락처 정보 삭제 완료");
}
} else {
System.out.println("존재하지 않는 인덱스입니다.");
}
} // end deleteMamber()
private static void updateMember() {
System.out.println("인덱스 입력>");
int index = sc.nextInt();
int count = ((ContactDAOImple) dao).getCount();
if (index >= 0 && index < count) {
System.out.println("전화번호 입력>");
String phone = sc.next();
System.out.println("이메일 입력>");
String email = sc.next();
ContactDTO dto = new ContactDTO("", phone, email);
int result = dao.update(index, dto);
if (result == 1) {
System.out.println("연락처 정보 수정 완료");
}
}
} // end updateMember()
private static void selectByIndax() {
System.out.println("검색할 인덱스 입력>");
int index = sc.nextInt();
int count = ((ContactDAOImple) dao).getCount();
if (index >= 0 && index < count) {
ContactDTO dto = dao.select(index);
System.out.println(dto);
} else {
System.out.println("존재하지 않는 인덱스입니다.");
}
} // end selectByIndax()
private static void selectAll() {
ArrayList<ContactDTO> list = dao.select();
int count = ((ContactDAOImple) dao).getCount();
for (int i = 0; i < count; i++) {
System.out.println("연락처 정보 [" + i + "]");
System.out.println(list.get(i));
}
} // end selectAll()
private static void InsertMember() {
System.out.println("--- 연락처 정보 등록 ---");
System.out.println("이름 입력>");
String name = sc.next();
System.out.println("전화번호 입력>");
String phone = sc.next();
System.out.println("이메일 입력>");
String email = sc.next();
ContactDTO dto = new ContactDTO(name, phone, email);
dao.insert(dto);
} // end InsertMember()
private static void showMainMenu() {
System.out.println("------------------------------------------------");
System.out.println("1. 등록 | 2. 전체 검색 | 3. 상세 검색 | 4. 수정 | 5.삭제 | 0. 종료");
System.out.println("------------------------------------------------");
System.out.println("선택>");
} // end showMainMenu()
} // end MemberMain
package edu.java.contact03;
import java.util.ArrayList;
public class ContactDAOImple implements ContactDAO {
// 1. private static 자기 자신 타입의 변수 선언
private static ContactDAOImple instance = null;
// 2. private 생성자
private ContactDAOImple() {
}
// 3. public static 메소드 - 인스턴스를 리턴하는 메소드 구현
public static ContactDAOImple getInstance() {
if (instance == null) {
instance = new ContactDAOImple();
}
return instance;
}
// 나중에 DB에서 사용 할 것이지만 지금은 이렇게 사용
private ArrayList<ContactDTO> list = new ArrayList<>(); // 회원 정보를 저장할 배열
public int getCount() {
return list.size();
}
@Override
public int insert(ContactDTO dto) {
System.out.println("insert()"); // 로그 찍기
System.out.println("dto = " + dto);
list.add(dto);
return 1; // 0 : 실패, 1 : 성공
}
@Override
public ArrayList<ContactDTO> select() {
return list;
} // end select()
@Override
public ContactDTO select(int index) {
return list.get(index);
}
@Override
public int update(int index, ContactDTO dto) {
list.set(index, dto);
return 1;
}
@Override
public int delete(int index) {
list.remove(index);
return 1;
}
} // end ContactDAOImple
package edu.java.contact03;
import java.util.ArrayList;
public interface ContactDAO {
// 연락처 정보 등록
public abstract int insert(ContactDTO dto);
// 연락처 정보 전체 검색
public abstract ArrayList<ContactDTO> select();
// 연락처 정보 인덱스 검색
public abstract ContactDTO select(int index);
// 연락처 정보 인덱스 수정
public abstract int update(int index, ContactDTO dto);
// 연락처 삭제 인덱스
public abstract int delete(int index);
} // end ContactDAO