Java

간단한 Comparable 인터페이스를 구현한 클래스 만들기

bang2001 2013. 7. 25. 16:01

설명은 현재 이 블로그에 java카테고리에 올려놓은 글은 있으므로 생략하겠습니다.


이 블로그는 전에 설명한 Comparable 인터페이스에 대해서 좀더 쉽고 간편하게 구현된 클래스를 통해서

Comparable 인터페이스를 처음보시는 분들이 보다 빠르게 이해하실 수 있도록 하기위해 작성하였습니다.

바로 코드를 보여드리겠습니다.

-------------------------------------------------------------------------------------------

import java.util.*;

public class ComparableTest2 implements Comparable<ComparableTest2>
{
private int age;

public void setAge(int inputAge)
{
this.age = inputAge;
}//setAge()====================================

public int getAge()
{
return age;
}//getAge()====================================

public ComparableTest2()
{
}//기본생성자()================================

public ComparableTest2(int inputAge)
{
this.age = inputAge;
}//인자생성자()================================

@Override
public int compareTo(ComparableTest2 num)
{
//이렇게 비교하고자 하는 기준을 프로그래머가 제시한다.
//순서가 같으면0, 순서가 뒤쪽이면 양수, 순서가 앞쪽이면 음수로 구분하게 된다.
//이 규칙을 이용하여 프로그래머가 어떤것이 양수가 될지, 혹은 음수가 될지만 구현하면된다.
//저자는 나이(age)가 어린사람이 앞으로 가도록 해보겠다.
int result = this.age - num.getAge(); 
return result;
}//compareTo()=================================


public static void main(String[] args) 
{
ComparableTest2 c1 = new ComparableTest2(5);
ComparableTest2 c2 = new ComparableTest2(4);
ComparableTest2 c3 = new ComparableTest2(3);
ComparableTest2 c4 = new ComparableTest2(2);
ComparableTest2 c5 = new ComparableTest2(1);

ComparableTest2 c_array[] = {c1, c2, c3, c4, c5};

for (ComparableTest2 output : c_array)
{
int out = output.getAge();
System.out.println(out);

System.out.println(output); //객체의 참조값이 출력됩니다.
}

System.out.println("------------- 구 분 선 -------------");

Arrays.sort(c_array); //정렬을 시켜주는 메소드를 호출하였다.

for (ComparableTest2 output : c_array)
{
int out = output.getAge();
System.out.println(out);

System.out.println(output); //위의 반복문에서 출력한 참조값과 대조하여 
                        실제 객체배열에 있는 값이 바뀐건지 아니면 출력했을때 표현되는 값의 순서만 
                        바뀐건지 알아보기 위해서 이 코드를 삽입하였다.
}
}//main()===============================================================
}//////////////////////////////////////////////////////////////////////////////////


-------------------------------------------------------------------------------------------

위와같이 객체배열에 있는 객체들의 순서 자체가 변한것을 알 수 있다.
즉 정렬이 된것이다. 정렬이 되었다는것은 객체를 비교하였다는 말과 같은 의미이다.

그렇다면 Comparable 인터페이스를 구현하지 않은상태에서 정렬하게 되면 어떻게 될까?

다음 코드가 바로 그 예시이다.

-------------------------------------------------------------------------------------------

import java.util.*;

public class ComparableTest3
{
private int age;

public void setAge(int inputAge)
{
this.age = inputAge;
}//setAge()====================================

public int getAge()
{
return age;
}//getAge()====================================

public ComparableTest3()
{
}//기본생성자()================================

public ComparableTest3(int inputAge)
{
this.age = inputAge;
}//인자생성자()================================

public static void main(String[] args) 
{
ComparableTest3 c1 = new ComparableTest3(5);
ComparableTest3 c2 = new ComparableTest3(4);
ComparableTest3 c3 = new ComparableTest3(3);
ComparableTest3 c4 = new ComparableTest3(2);
ComparableTest3 c5 = new ComparableTest3(1);

ComparableTest3 c_array[] = {c1, c2, c3, c4, c5};

for (ComparableTest3 output : c_array)
{
int out = output.getAge();
System.out.println(out);

System.out.println(output);
}

System.out.println("------------- 구 분 선 -------------");

Arrays.sort(c_array);

for (ComparableTest3 output : c_array)
{
int out = output.getAge();
System.out.println(out);

System.out.println(output);
}
}//main()===========================================================
}/////////////////////////////////////////////////////////////////////////

결과화면은 다음과 같다.




-------------------------------------------------------------------------------------------

이처럼 Comparable 인터페이스가 구현되지 않으면 객체를 비교하는데 있어서 기준이 없기 때문에
객체비교를 할 수 없다. 따라서 정렬도 할 수 없고 이 때문에 위 사진처럼 예외가 발생하게 되는것이다.


'Java' 카테고리의 다른 글

각종 예외의 발생조건과 의미  (0) 2013.07.25
Arrays.binarySearch() 메소드  (0) 2013.07.25
Collection 개요  (0) 2013.07.25
SCJP 39번 문제 try ~ catch문의 finally  (0) 2013.07.25
SCJP 40번 문제 do while 과 while의 차이점  (0) 2013.07.25