일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- CSS
- Python
- vscode
- html
- C로 시작하는 컴퓨터 프로그래밍4판
- メソッド
- 건담베이스
- javascript
- Web
- 디지몬
- 日本語
- jsp
- 자바
- java
- springboot
- nico
- ruby
- 반다이몰
- 비즈니스일본어
- DART
- 일본어
- 인프런
- rails7
- 연습문제
- 単語
- Flutter
- Spring
- 건담
- rails
- 一日一つメソッド
- Today
- Total
AR삽질러
Java - Collection Framework(Example) 본문
Collection : 여러 객체를 모아놓은 것(객체의 저장)
Framework - 표준화, 정형화된 체계적인 프로그램방식
Collection Framework
- 여러 객체를 다루기 위한 표준화된 프로그래밍 방식
- 편리하고 쉽게 다룰 수 있는 다양한 클래스를 제공한다.
- java.util 패키지에 포함되어 있다.
CollectionFramework의 주요 인터페이스
1. Set
- HashSet, TreeSet : 순서x, 중복x
2. Map
- HashMap, HashTable : 순서x, 중복 key : x, value : o
3. List
- ArrayList, LinkedList, Vector : 순서o, 중복o
------------------------------------------------------------------------------------------------------------------------------------------
set연습문제
1.입력 2.출력 3.수정 4.삭제 5.종료
1번 입력시 이름과 전화번호를 입력받아 저장한다.
2번 출력시 입력된 모든 회원의 이름과 전화번호를 알려준다.
3번 수정시 이름을 입력받아 해당하는 회원이 있으면 전화번호를 수정한다.
4번 삭제시 이름을 입력받아 해당하는 회원이 있으면 삭제한다.
5번 종료시 프로그램을 종료시킨다.
member
- Member
- MemberMain
- MemberPro
- MemberProImpl
package member;
public class Member {
private String name;
private String tel;
public Member(String name, String tel) {
this.name = name;
this.tel = tel;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
- Member Class : 다른 클래스에서 사용될 수 있고 각 객체name tel을 저장하고 조회 변경할 수 있다.
package member;
public interface MemberPro {
// 기능
public void input();
public void view();
public void edit();
public void delete();
public void save();
public void load();
public void exit();
}
- MemberPro Interface : input(), view(), edit(), delete(), save(), load(), exit() 메서드를 정의하고 클래스에서 같은 기능을 재사용할 수 있다.
package member;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
public class MemberProImpl implements MemberPro{
private Hashtable<String, Member> ht; // key : name, value : MemberObject
private Scanner in;
File file;
public MemberProImpl() {
ht = new Hashtable<String, Member>();
in = new Scanner(System.in);
// 파일 저장기능
File dir = new File("C:\\myJavaProject\\KGProject-workspace");
file = new File(dir, "data.txt");
}
@Override
public void input() {
System.out.print("사용자의 이름을 입력해주세요 : ");
String name = in.next();
if(ht.containsKey(name)) {
System.out.println("동일한 회원이존재합니다!!");
input();
}else {
System.out.print("전화번호를 입력해주세요 : ");
String tel = in.next();
Member member = new Member(name, tel);
ht.put(name, member);
}
}
@Override
public void view() {
Set<String> set = ht.keySet();
Iterator<String> it = set.iterator();
while(it.hasNext()) {
String key = it.next();
Member member = ht.get(key);
System.out.println(member.getName() + "님의 전화번호 : " + member.getTel());
}
}
@Override
public void edit() {
System.out.print("수정할 회원 이름을 입력해주세요 : ");
String name = in.next();
if(ht.containsKey(name)) {
Member member = ht.get(name);
System.out.println("현재" + name + "님의 전화번호는 " + member.getTel() + "입니다.");
System.out.print("수정할 번호를 입력해 주세요 : ");
String tel = in.next();
member.setTel(tel);
System.out.println(name + "님의 번호를 수정하였습니다.");
}else {
System.out.println(name + "님은 저희 회원이 아닙니다.");
}
}
@Override
public void delete() {
System.out.print("삭제할 회원이름을 입력해주세요 : ");
String name = in.next();
if(ht.containsKey(name)) {
ht.remove(name);
System.out.println(name + "님을 삭제하였습니다.");
}else {
System.out.println(name + "님은 저희 회원이 아닙니다.");
}
}
@Override
public void save() {
//object입출력
try {
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(ht);
oos.close();
}catch(IOException e) {
e.printStackTrace();
}
// // text입출력
// try {
// FileWriter fw = new FileWriter(file);
// BufferedWriter bw = new BufferedWriter(fw);
// PrintWriter pw = new PrintWriter(bw);
// Enumeration<String> en = ht.keys();
// while(en.hasMoreElements()) {
// String key = en.nextElement();
// Member member = ht.get(key);
// pw.println(member.getName() + "@" + member.getTel());
// pw.flush();
// }
// pw.close();
// }catch (IOException e) {
// e.printStackTrace();
// }
// byte입출력
// try {
// FileOutputStream fos = new FileOutputStream(file);
// BufferedOutputStream bos = new BufferedOutputStream(fos);
// DataOutputStream dos = new DataOutputStream(bos);
// Enumeration<String> enu = ht.keys();
// while(enu.hasMoreElements()) {
// String key = enu.nextElement();
// Member member = ht.get(key);
// dos.writeUTF(member.getName() + "@" + member.getTel());
// dos.flush();
// }
// dos.close();
// }catch(IOException e) {
// e.printStackTrace();
// }
}
@Override
public void load() {
ht.clear();
// Object입출력
try {
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
ObjectInputStream dis = new ObjectInputStream(bis);
Object obj = dis.readObject();
ht = (Hashtable)obj;
}catch(Exception e) {
e.printStackTrace();
}
}
@Override
public void exit() {
System.out.println("프로그램을 종료합니다.");
System.exit(0);
}
}
- MemberProImpl Class :
MemberPro Interface를 구현한다.
HashTable<String, Member> ht. Scanner, File 세 개의 변수를 선언
HashTable : key : value 쌍으로 데이터를 저장하는 자료구조로 key : name value : Member
Scanner : 사용자의 입력을 받아 객체를 저장한다.
File : 파일 시스템으로 경로를 지정하고 data.txt파일을 생성한다.
MemberProImpl class : HashTable, Scanner, File 객체를 초기화하고 새로운 객체 생성을 한다.
Input() : name, tel을 입력받아 Member객체에 저장 -> Hashtable의 key값으로 사용되어 동일한 이름이 존재하는경우(key 값은 중복을 허용하지 않는다.) 와 아닌경우 Member객체를 생성하고 Hashtable에 추가한다.
- in.next() : Scanner클래스를 사용하여 콘솔에서 문자열 입력을 받는 메서드(공백을 포함하지 않는 문자열)
- input() : MemberPro Interface에서 정의된 메서드로 사용자에게 입력을 받는 기능
view() : 현재 등록된 회원들의 이름과 번호를 출력하는 기능
- Hashtable 객체 ht에 저장된 모든 ket값들을 set에 저장한다. -> while Iterator의 hasNext()메소드를 이용해 끝까지 출력한다.
- Iterator의 next()메소드를 이용해 저장된 다음 회원이름을 가져와 출력한다.
edit() : 수정할 회원을 입력받아 Hashtable에 있는지 확인한후 포함되어 있다면 정보를 불러와 이름과 번호를 출력하고 수정할 번호를 입력받는다. -> 회원정보를 수정한다.
delete() : 삭제할 회원을 입력받아 Hashtable에서 해당 이름이 키인 Member객체를 삭제시키는 기능
save() : File Class를 이용하여 저장하는 기능
- FileOutputStream : 파일열기, BufferOutputStream : 버퍼링 수행, ObjectOutputStream : Hashtable객체를 파일에 쓰는 작업 -> close();
load() : 파일에서 객체를 읽어와 Hashtable객체에 저장하는 기능
exit() : 종료
package member;
import java.util.Scanner;
public class MemberMain {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
MemberPro pro = new MemberProImpl(); // 다형성 업캐스팅
while(true) {
System.out.println("1.입력 | 2.출력 | 3.수정 | 4.삭제 | 5.저장 | 6.로드 | 7.종료");
int select = scan.nextInt();
switch (select) {
case 1:
pro.input();
break;
case 2:
pro.view();
break;
case 3:
pro.edit();
break;
case 4:
pro.delete();
break;
case 5:
pro.save();
break;
case 6:
pro.load();
break;
case 7:
pro.exit();
break;
default:
System.out.println("잘못입력하셨습니다.");
}
}
}
}
- Main Class
main method는 Scanner객체를 생성하고 MemberProImpl객체를 생성하여 다형성 업캐스팅을 한다.
while -> 사용자입력 -> switch -> 메서드실행
'JAVA' 카테고리의 다른 글
Java - Collection Framework (List Collection) (0) | 2023.04.14 |
---|---|
Java - Collection Framework(List성적관리프로그램) (0) | 2023.04.13 |
이것이 자바다 - 7장 확인문제(상속) (0) | 2023.02.24 |
이것이 자바다 - 6장 확인문제(클래스)-2 (0) | 2023.02.23 |
이것이 자바다 - 6장 확인문제(클래스)-1 (0) | 2023.02.23 |