ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알기 쉬운 JAVA 벡터 클래스(Vector class)에 대해 알아보자
    프로그래밍/JAVA 2020. 5. 13. 13:48

    벡터 클래스(Vector class)

     

     배열은 같은 종류의 여러 데이터를 다루는 데 편리한 자료 구조이지만, 데이터의 크기를 예측할 수 없는 응용프로그램에서 사용하기에는 불편하다. Vector class는 데이터를 가변 크기로 설정할 수 있고, 요소의 개수에 따라 자동으로 크기를 조절한다.

    벡터 클래스의 특징

    1) java.util.List 인터페이스를 구현한 컬렉션이다.

    2) 객체의 삽입, 삭제, 이동이 쉽다.

    3) 데이터를 저장한 순서를 기억한다. (순서대로 저장)

    4) 데이터 중복 저장을 허용한다.

    5) 다양한 타입의 데이터들을 저장할 수 있다.

    6) 기본형 데이터는 저장할 수 없다.

     

    생성 방법

    1. 여러 데이터 타입 저장

     

     제네릭(generics)은 JDK 1.5버전 부터 도입되었다. 제네릭이 도입된 이유는 여러가지가 있겠지만 그 중 하나는 Vector의 특징이 여러 타입의 데이터를 저장할 수 있는 것인데 실제로 사용해보니 같은 데이터 타입의 종류를 저장할 때 더 많이 쓰기 때문이다. 그래서 제네릭의 타입 매개변수 <E>를 붙여서 지정된 특정 타입의 값만 저장 가능하도록 했다.

     

    여러 타입의 데이터를 저장하기 위해서는 제네릭 <E>를 붙이지 않고 Vector를 사용하면 된다.

    Vector v = new Vector(5, 3); // 초기 용량 5, 데이터가 차면 3개씩 증가
    
    // 데이터 삽입
    v.add("Hello");
    v.add(11);   // 원래는 기본 자료형이 안되는데 1.5이후로 Wrapper클래스 유형으로 자동으로 바뀐다.
    v.add(1.23); // auto boxing
    v.add(3.14f);

    기본 자료형으로 저장할 경우 자동으로 Wrapper 클래스 유형으로 바뀐다. -> auto boxing

    데이터 출력

    System.out.println(v.get(0));
    System.out.println(v.get(1));
    System.out.println(v.get(2));
    System.out.println(v.get(3));
    Hello
    11
    1.23
    3.14

     

    2. 동일한 데이터 타입 저장

     

    1) 먼저 Vector를 사용하기 위해 java.util.Vector를 import 해준다.

    2) Vector<E>의 E에 요소로 사용할 타입을 지정한다.

     

    Vector에는 기본형 데이터를 저장할 수 없다. 정수나 실수 형태 같은 기본 데이터형을 저장하기 위해서는 기본형 데이터를 Wrapper 클래스 타입의 객체로 생성해야 한다.

     

    예를 들어 정수 값만 삽입 가능한 벡터를 만들고자 하면 다음과 같이 E에 Integer를 지정하여 생성한다.

    Vector<Integer> v = new Vector<Integer>();

    Vector의 생성자를 통해 데이터를 담을 크기와 용량을 지정할 수 있다.

    기본 생성자는 디폴트로 10개의 데이터를 담을 수 있다.

    Vector<Integer> v = new Vector<Integer>(5, 3); 
    // 초기 용량 5개, 데이터가 5개가 넘어가면 3개씩 증가시킴
    
    Vector<Integer> v2 = new Vector<Integer>(10, 2); 
    // 초기 용량 지정 가능 10개, 데이터가 10개가 넘어가면 2개씩 증가시킴
    
    System.out.println("v의 현재 크기(size): "+v.size()); // 0 (저장한 요소의 갯수)
    System.out.println("v의 현재 용량(capacity): "+v.capacity()); // 5 (용량 수)

    v.size()v.capacity() 메소드를 통해 현재 크기와 용량을 확인할 수 있다.

    데이터 삽입

    v.add() 메소드를 사용하여 Vector에 데이터를 담을 수 있다.

    // add(Object o) - 반환타입 : boolean
    v.add(new Integer(34));
    v.add(234);
    v.add(535);

     

    데이터 출력

    v.get()메소드를 사용하여 벡터의 인덱스에 접근할 수 있다. 괄호안에 인덱스번호를 넣어준다.

    Integer i1 = v.get(0);
    System.out.println("i1: "+i1);
    
    int i2 = v.get(0); // auto unboxing
    System.out.println("i2: "+i2);

    v.get(0)을 담아줄 Integer변수 i1을 지정하고 담아준다.

    int형으로도 받아 줄 수 있는데 이 때는 auto unboxing이 일어난다.

    i1: 34
    i2: 34

     

    객체 유형을 Vector에 담는 방법

    Vector에 담을 데이터 유형은 Object 유형으로 객체를 넣을 때가 더 많다. 

    Person클래스의 객체를 만들고 Vector에 담아보려고 한다.

    class Person {
    	
    	private String name;
    	private int age;
    	
    	
    	public Person(String name, int age) {
    		this.name = name; this.age = age;
    	}
        
    	// setter, getter 캡슐화
    	
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public String getName() {
    		return name;
    	}
    	
    	public void setAge(int age) {
    		this.age = age;
    	}
    	
    	public int getAge() {
    		return age;
    	}
    	
    	
    } //
    
    public class VectorTest {
    
    	public static void main(String[] args) {
    		// [1] Person 객체 3개 생성
    		Person p1 = new Person("홍길동", 30);
    		Person p2 = new Person("고길동", 40);
    		Person p3 = new Person("이길동", 20);
    		
    		// [2] Person 유형을 저장할 Vector를 생성 후 Person 객체 3개를 저장
    		Vector<Person> v = new Vector<Person>();
    		v.add(p1);
    		v.add(p2);
    		v.add(p3);
    		
    		// [3] for루프 이용해서 Vector에 저장된 Person을 꺼내 이름과나이를 출력
    		for(int i=0;i<v.size();i++) {
    			System.out.println("이름:"+v.get(i).getName());
    			System.out.println("나이:"+v.get(i).getAge());
    			System.out.println("--------");
    		}
    	} // main()
    
    } //

    1. Person 객체를 생성한다. -> Person p1 = new Person();

    2. Person 객체를 담을 Vector<Person>을 생성한다.

    3. v.add() 메소드를 이용하여 Person 객체를 저장한다.

    4. for문을 이용해서 배열의 데이터를 출력하는 방법과 같이 Vector의 저장된 데이터를 출력한다.

    5. 이 때 for문의 조건을 v.size() 메소드를 이용한다.

     

    댓글

Designed by Tistory.