본문 바로가기
JAVA

자료구조 04. Comparable, Collection

by Y25N 2023. 10. 15.
728x90

https://youtu.be/VABNU7YZrgs?si=c9xWfryXAeYzDct9 

 

 

01. Comparable: 대소 비교를 위한 인터페이스


Comparable: 자바에 정의되어 있는 인터페이스

Float이라는 class는 Comparable를 상속받아 사용함.

 

- Coparable 인터페이스는 일반적으로 comparTo메소드를 재정의해 두 개의 객체를 비교한다.

- String, Data, Integer, Character, Double 등의 Wrapper 클래스에는 이미 Comparable인터페이스가 구현되어 있기 때문에 compareTo의 메소드를 재정의할 필요가 없다.

- Comparable 인터페이스는 일반적으로 다음과 같이 선언해 사용한다.

public class 클래스이름 implements Coparable<클래스이름> {
...
public int compareTo(클래스이름 other){
	...
    }
}

- 인터페이스 안의 추상메소드를 인터페이스를 상속받아 추상메소드를 재정의하여 사용할 수 있다.

*Wrapper클래스: 자바의 기본 타입을 클래스화 한 8개 클래스를 통칭함

- Comparable은 java.lang에 선언된 이터페이스

- 객체의 하나의 멤버만을 기준으로 객체를 정렬할 때 사용함

- 각각 다른 클래스를 선언할 때마다 객체들을 정렬하기 위해 별도의 비교 메소드를 일일이 선언해야 하는 불편을 덜어줌

- 만일 Comparable 인터페이스가 없었다면, 객체들을 정렬해야 하는 각각의 클래스마다 정렬 메소드를 정의해야 함

- 이러한 정렬 메소드는 거의 동일, 단지 객체의 멤버를 비교하는 부분만 다름.

 

*Comparator: java.util 에 선언된 인터페이스

- 한 프로그램 내에서 동일한 타입의 객체들을 여러개의 멤버를 기준으로 나열할 수 있음

- compare 메소드를 가짐

public interface Comparator{
	public int compare(T first, T second);
}

- 일반적으로 비교에 기준이 되는 멤버를 위한 별도의 (제 3의) 클래스를 다음과 같이 선언해 사용함

//클래스 이름 = 제 3의 클래스
public class 클래스이름 implements Coparator<클래스이름> {
	...
	public int companr(클래스이름 first, 클래스이름 second) {
    ...
    }
}

 

 

02. Collection


Collection의 개념

- 요소(element)라고 불리는 가변 개수의 객체들의 저장소

- 배열의 원소는 갯수가 정해져 있음. collection은 원소의 갯수를 변경할 수 있음

- 객체 컨테이너라고도 불림

- 요소의 개수에 따라 크기 자동 조절

- 요소의 삽입, 삭제에 따른 요소의 위치 자동 이동

- 배열에서는 index 1에 해당하는 원소를 삭제하면 다른 원소들의 자리를 이동시켜야 하지만, 컬렉션은 자동으로 이동 됨

- 고정 크기의 배열을 다루는 어려움 해소

- 다양한 객체들의 삽입, 삭제, 검색 등의 관리가 용이함

 

*컬렉션 자바 인터페이스와 클래스

 

컬렉션의 특징

1. 컬렉션은 제네릭(generics)기법으로 구현

- 제네릭

특정 타입만 다루지 않고, 여러 종류의 타입으로 변할 수 있도록 클래스나 메소드를 일반화 시키는 기법

클래스나 인터페이스 이름에 <E>,<K>,<V>등 타입 매개변수 포함

 

- 제네릭 컬렉션 사례: 벡터 Vector<E>

- <E>에서 E에 구체적인 타입을 주어 구체적 타입만 다루는 벡터로 활용

- 정수만 다루는 컬렉션 벡터 Vector<Integer>

- 문자열만 다루는 컬렉션 벡터 Vector<String>

 

2. 컬렉션의 요소는 객체만 가능

- int, char, double 등의 기본 타입으로 구체화 불가능

Vector <int> v = new Vector<int>(); : 컴파일 오류 int 사용 불가

Vector <Integer> v = new Vector <Integer>(); : 정상 코