AR삽질러

Java - Collection Framework(Example) 본문

JAVA

Java - Collection Framework(Example)

아랑팡팡 2023. 4. 13. 01:10
728x90

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 -> 메서드실행

 

728x90
반응형
LIST