[Java 활용] 3.4 Vector 클래스

Java 언어에서 배열은 생성할 때 크기를 결정할 수 있어야 합니다. 하지만 미리 크게 설정하면 메모리 효율을 떨어지고 작게 설정하면 충분한 개체를 보관할 수 없습니다. Vector는 확장 가능한 배열로 저장소가 꽉 차면 자동으로 저장소의 크기를 늘려주기 때문에 유연하게 사용할 수 있습니다.

그리고 Vector 클래스는 Collection 인터페이스를 기반으로 구현한 List 클래스에서 파생한 클래스입니다. 따라서 Vector 클래스에는 Collection 인터페이스에 약속한 기능들을 사용할 수 있습니다. 물론 Vector 클래스에서 추가적으로 제공하는 기능들도 있습니다.

먼저 Vector 클래스로 Collection 인터페이스에 약속한 기능을 사용하는 예제 코드를 살펴봅시다. 회원 개체를 추가할 때는 add 멤버 메서드를 사용합니다.

Member member =new Member(num,name); 
members.add(member);

보관한 회원 개체 중에 특정 번호로 검색을 할 때 먼저 보관한 개수를 구하기 위해 size 멤버 메서드를 사용합니다. 컬렉션 요소들을 순차적으로 접근할 때 for(원소 형식 변수명: 컬렉션명)을 통해 접근할 수 있습니다.

Member Find(int num){
	int cnt = members.size();		
	for(Member member : members){
		if(member.getNum() == num){
			return member;
		}
	}
	return null;
}

특정 회원을 삭제할 때는 remove 메서드를 사용합니다.

Member member = Find(num);
if(member == null){
	System.out.println("존재하지 않습니다.");
	return;
}
members.remove(member);

다음은 Vector를 사용하여 회원 관리 프로그램을 작성한 예입니다.

▷ 소스 3.4 회원 관리 프로그램 (Vector 사용)

//Member.java
//회원 클래스
public class Member {
	final int num;
	String name;
	public Member(int num, String name){
		this.num = num;
		this.name = name;
	}
	public int getNum(){
		return num;
	}
	public String toString(){
		return String.format("번호:%d 이름:%s", num,name);		
	}
}
//MemberManager.java
//회원 관리자 클래스
import java.util.Vector;
import java.util.Scanner;
public class MemberManager {
	Scanner scan = new Scanner(System.in);
	Vector<Member> members = new Vector<Member>();
	public void Run(){
		int key = 0;
		while((key = selectMenu())!=0){
			switch(key){
			case 1: addMember(); break;
			case 2: removeMember(); break;
			case 3: searchMember(); break;
			case 4: listMember(); break;
			default: System.out.println("잘못 선택하였습니다."); break;
			}
		}
		System.out.println("종료합니다...");
	}
	int selectMenu(){
		System.out.println("1:추가 2:삭제 3:검색 4:목록 0:종료");
		int key = scan.nextInt();
		scan.nextLine();	
		return key;
	}
	void addMember(){
		int num = 0;
		String name="";
		System.out.print("추가할 회원 번호:");
		num = scan.nextInt();
		scan.nextLine();
		System.out.print("회원 이름:");
		name = scan.nextLine();
		Member member =new Member(num,name); 
		members.add(member);
		System.out.println(member.toString()+" 생성하였습니다.");		
	}
	void removeMember(){
		int num = 0;		
		System.out.print("삭제할 회원 번호:");
		num = scan.nextInt();
		scan.nextLine();
		Member member = Find(num);
		if(member == null){
			System.out.println("존재하지 않습니다.");
			return;
		}
		members.remove(member);
		System.out.println(member.toString()+" 삭제하였습니다.");
	}
	void searchMember(){
		int num = 0;		
		System.out.print("검색할 회원 번호:");
		num = scan.nextInt();
		scan.nextLine();
		Member member = Find(num);
		if(member == null){
			System.out.println("존재하지 않습니다.");
			return;
		}
		System.out.println("검색 결과>>"+member.toString());
		
	}
	void listMember(){
		System.out.println("전체 목록");
		int cnt = members.size();
		System.out.println("회원 수:"+cnt);
		for(Member member : members){
			System.out.println(member.toString());
		}
		
	}
	Member Find(int num){
		int cnt = members.size();		
		for(Member member : members){
			if(member.getNum() == num){
				return member;
			}
		}
		return null;
	}
}
//Program.java
//Vector 클래스로 Collection 인터페이스 약속한 기능 사용 예
public class Program {
	public static void main(String[] args){
		MemberManager mm = new MemberManager();
		mm.Run();
	}
}

▷ 소스 3.4 실행 결과

1:추가 2:삭제 3:검색 4:목록 0:종료
1
추가할 회원 번호:3
회원 이름:홍길동
번호:3 이름:홍길동 생성하였습니다.
1:추가 2:삭제 3:검색 4:목록 0:종료
1
추가할 회원 번호:2
회원 이름:강감찬
번호:2 이름:강감찬 생성하였습니다.
1:추가 2:삭제 3:검색 4:목록 0:종료
4
전체 목록
회원 수:2
번호:3 이름:홍길동
번호:2 이름:강감찬
1:추가 2:삭제 3:검색 4:목록 0:종료
3
검색할 회원 번호:2
검색 결과>>번호:2 이름:강감찬
1:추가 2:삭제 3:검색 4:목록 0:종료
2
삭제할 회원 번호:2
번호:2 이름:강감찬 삭제하였습니다.
1:추가 2:삭제 3:검색 4:목록 0:종료
4
전체 목록
회원 수:1
번호:3 이름:홍길동
1:추가 2:삭제 3:검색 4:목록 0:종료
0
종료합니다...