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 종료합니다...