Arrays 클래스는 객체나 혹은 기본자료형에 대한 배열을 좀더 관리하기 쉽게하기 위해 구현된 클래스입니다.
Byte, Character, Double, File,Float, Integer, Long, ObjectStreamField, Short, String, BigDecimal, BigInteger, URI,
Charset, Date, CollationKey 등등....
따라서 객체배열에 대한 정렬을 하고자 할 때에는 비교하고자 하는 객체가 같은 클래스가 되어야 하고,
Comparable 구현한 클래스이어야 한다는 점 입니다.
음.. 이게 49번 문제 풀다가 이렇게 됫는데요 ㅇㅅㅇ;;;;
잠시 49번문제를 보겠습니다.
-----------------------------------------------------------------------------------
QUESTION 49
Given:
23. Object [] myObjects = {
24. new Integer(12),
25. new String("foo"),
26. new Integer(5),
27. new Boolean(true)
28. };
29. Arrays.sort(myObjects);
30. for(int i=0; i<myObjects.length; i++) {
31. System.out.print(myObjects[i].toString());
32. System.out.print(" ");
33. }
What is the result?
A. Compilation fails due to an error in line 23.
B. Compilation fails due to an error in line 29.
C. A ClassCastException occurs in line 29.
D. A ClassCastException occurs in line 31.
E. The value of all four objects prints in natural order.
Answer: C
-------------------------------------------------------------------------------------
여기서 정답은 C가 됩니다. 그 이유는 객체에 대하여 정렬을 한다는것은 객체를 서로 비교한다는 뜻이고,
따라서 객체를 비교하기 위해서는 위에서 언급한 조건이 충족되어야 한다는 점입니다.
문제의 코드중에서 Object타입의 myObjects 배열변수에 들어있는 객체들은 모두 Comparable 인터페이스를
구현하고 있지만, 이들 객체의 클래스가 모두 틀리기 때문에 서로 비교할 기준이 모두 틀리게 됩니다.
따라서 객체에 대한 비교를 할 수 없고, 때문에 정렬을 할 수 없습니다.
때문에 예외가 발생하게 되는것 입니다.
여기서 잠시!! ClassCastException 에 대해서 알아보겠습니다.
이 예외의 발생하는 조건은 다음과 같습니다.
1. 객체가 상위클래스가 아닌 클래스로 형변환 하고자 할 때 발생한다.
---> 단 Object클래스는 제외입니다. 임의 객체에 한해서 극히 제한적인 범위내에서 자신의 클래스형을
변환할 수 있습니다.
2. 코드가 인스턴스에 없는 서브 클래스로 객체를 보낼려고 할 때 발생한다.
여기서 SCJP문제의 코드에서 발생한 예외는 위의 두 조건중에서 후자쪽으로 판단이 됩니다.
그리고 문제를 풀면서 느낀점은 각 예외에 대하여 발생하는 조건을 숙지를 하는것이 SCJP문제를 풀기에 유리하고
나아가서 실무작업시에도 해당 예외를 보고 잘못된 점을 빠르게 찾을 수 있다고 생각이 됩니다.
다음은 몇몇 예외에 대한 발생조건입니다. (전부다 알아볼려고 했지만.. 지금 당장은 여기가 한계인것 같아요 추후 더 올릴께요)
-------------------------------------------------------------------------------------------
ArrayIndexOutOfBoundsException
-> 배열이 잘못된 색인으로 액세스 되었음을 나타내기 위해 발생한다.
-> 잘못된 배열요소를 참조할 경우에 발생한다.
ArithmeticException
-> 0으로 정수를 나눌때와 같은 수학적으로 부적절한 계산을 실행할 때 발생한다.
ArrayStoreException
-> 객체배열에 잘못된 객체유형을 저장하려고 할 때 발생한다.
AWTError
-> 심각한 Abstract Window Toolkit 오류가 발생할 때
CheckedException
-> 컴파일러에 의해 검사된 예외
EmptyStackException
-> 스텍이 비었음을 나타내기 위해 Stack클래스에 있는 메소드에 의해 발생
-------------------------------------------------------------------------------------------
'Java' 카테고리의 다른 글
SCJP 30번 문제 File객체의 파일 및 디렉토리 생성 / 디렉토리 변경 (0) | 2013.07.25 |
---|---|
확장 For문의 활용(집합체에 적용시켜 사용하기) (0) | 2013.07.25 |
Comparator 인터페이스 와 Comparable 인터페이스 (0) | 2013.07.25 |
SCJP 70번 문제 와일드 카드와 제네릭에 대한 간단한 기술 (0) | 2013.07.25 |
Comparable 인터페이스 (0) | 2013.07.24 |