[JAVA]객체지향(13): Error

ho's·2022년 4월 28일
0

Error와 Exception

  • 비정상적으로 프로그램을 종료되게 하는 원인

Error의 종류

  • 컴파일 에러
    컴파일시 발생하는 에러

  • 런타임 에러
    실행시 발생하는 에러

자바에서는 실행시 2가지 형태의 오류가 발생할 수 있다.

  • Error: 수습할 수 없는 심각한 오류
  • Exception(예외): 예외 처리를 통해 수습할 수 있는 덜 심각한 오류
  • 메모리 부족, 스택오버플로우(stack overflow)등이 발생하여 프로그램이 죽는 것은 프로그래머가 제어 할 수 없다.

예제

  • 수학에서는 0으로 나눌 수 없기 때문에 오류가 발생한다.

예외 처리방법

try {
코드1,
코드2}
catch(Exception클래스명1 변수명1){
	Exception을 처리하는 코드
} catch(Exception클래스명2 변수명2){
	Exception을 처리하는 코드
}

위의 방법을 토대로 코드를 작성해보자.

값이 0이 나온다.

하지만, 10/0의 값은 무한대가 나오므로, 위와 같이 작성하는 것은 옳지 않다.

돈과 관련된 일이라거나 예민한 정보에는 더 조심해야 할 것이다.
예외처리를 하느니, 프로그램 실행 시 오류가 발생하는 쪽이 더 나을 것이다.


TreeSet

  • SortedSet 인터페이스를 구현하고 있으면, 자동으로 정렬이 된다.

  • Tree의 자료구조는 데이터가 추가되면서 자동으로 정리 된다.

  • 저장과 동시에 정렬된다.

코드를 보자.

아래 사진과 같이 TreeSet의 생성자는 Comparator를 갖는다.

사용해보자!

TreeSet<String> treeSet = new TreeSet<>(new Comparator<String>(){
	@Override
    public int compare(String o1, String o2){
    return 0;
    }
});

new 생성자 { }; 이름 없는 객체

compare(String o1, String o2)

o1,o2를 비교해 결과값이 1,0 ,-1을 반환한다.

다시 코드를 보자.

substring

같은 코드를 람다 코드로 변경하기

 public static void main(String[] args) {
        TreeSet<String> treeSet = new TreeSet<>((String o1, String o2)-> {
                String str1 = o1.substring(1);
                String str2 = o2.substring(1);
                return str1.compareTo(str2);
            }
        );

위의 식이 람다를 이용한 코드이다. 비교적 더 깔끔하다(잘 사용한다면)

TreeSet<String> treeSet = new TreeSet<>(new Comparator<String>() {
          @Override
          public int compare(String o1, String o2) {
              String str1 = o1.substring(1);
              String str2 = o2.substring(1);
              return str1.compareTo(str2);
          }
      });

Vector를 상속받는 Stack

  • Vector는 List,Set,Map,Collection중에 어떤 자료구조에 속할까?
  • Stack은 List,Set,Map,Collection 중에 어떤 자료 구조에 속할까?
  • Stack은 Vector를 상속받는다. 맞는 말일까?

  • Stack은 Vector을 상속받고 있다.

Vector는 List형태의 자료구조이다.
List는 특정 index를 꺼낼 수 있다.

그렇다면 Stack은 중간에 있는 인덱스를 꺼낼 수 있을까?

YES 있다!

하지만 안된다!

그 이유는 잘 못 만들어 진 것이다.
즉 JAVA에서 만들어진 Stack은 사용하지 말자.
java 1.0이후에 나온 2.0부터 컬렉션프레임워크가 만들어 졌다.

오픈 소스로 구현된 자료구조가 어떤 것들이 있는지 찾아보는 것도 좋다.

외부에서 만들어진 라이브러리는 메이븐,그레이들과 같은 도구들이 존재한다.

profile
그래야만 한다

0개의 댓글