(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.)
- Tip
- Interface는 자식클래스에서 구현이 어떻게 될 지 모르니깐 예외를 throws 하지 않는다.
- Callee에서 에러가 발생하는데 그 원인이 Caller 가 전달해준 매개변수 때문일때,
- Runtime Exception이 발생하는 것이면 Callee에서는 try-catch도 안해도 되고, throws도 안해도 된다.단지 Caller에서 try-catch만 처리하면 된다.
- Checked Exception이 발생하면 Collee는 예외발생의 원인이 자신이 아니더라도 try-catch로 처리해줘야한다.
하지만 이런경우 Callee에서만 예외를 처리하면 정작 예외발생의 원인이되는 Caller는 예외인줄도 모르고 자신이 올바르게 작업했다고 생각한다. 그래서 Callee의 catch문에서 throw new RuntimeException("에러문구") 를 수행한다.
그런뒤에 Caller에서는 예외가 던져져 왔으니깐 try-catch문을 써서 catch에서 Exception 또는 RuntimeException으로 받는다.- 왜 이렇게 하냐면 일례로 Caller가 전달한 매개변수로 인해서 Collee에서 SQLException이 발생할 경우 Caller 에서 catch에 SQLException을 처리해버리게 하면 Caller는 Callee의 예외에 종속되어버린다. 이렇게 클래스가 다른 클래스에 종속되는 것은 좋지 않다.
- Java에서 객체를 동등 비교 할때는 equals를 사용한다. 기본 클래스가 아니면 equals를 사용하기 위해서는 클래스에 equals 메서드를 재정의 해줘야 한다.
- HashSet, HashMap, Hashtable에서는 동등비교에서 바로 equals로 값을 비교하지 않고 객체의 hashcode를 먼저 비교한다. 객체가 같으면 hashcode가 같다.
- 객체의 비교를 hashcode로 할 때, 두 객체의 hashcode가 다르면 두 객체는 같지 않다는것이 보장된다. 하지만 그렇다고 해서 두 객체의 hashcode가 같다고해서 두 객체가 같다는 것은 보장되지 않는다.
- 결론적으로 equals 동작은 hashcode를 먼저 비교하고 hashcode가 같을때, equals로 비교한다.
(equals보다 hashcode 수행속도가 더 빠르다.) - HashSet, HashMap, Hashtable에서 객체의 동등비교를 위해서 hashcode와 equals를 모두 사용하기 때문에 내가 만든 클래스에 equals를 재정의할때는 hashcode도 재정의 해줘야한다.
- 객체를 복제할 때는 clone을 이용하는 것이 편리하다. 기존 객체의 필드값을 모두 새로운 객체에 옮겨 담으려면 필드가 많을수록 점점 어렵고 불편해진다. clone을 이용하면 편리하게 객체 자체를 복제할 수 있다.
- clone을 사용하기 위해서는 복제하고 싶은 클래스에 Cloneable을 implements해야한다.
- 재정의 clone함수를 만들면 함수 내부에서 객체를 생성하고 super.clone() 으로 객체를 복제하여 리턴한다.
- !!주의!! clone하려는 객체에 기본타입이 아닌 객체타입의 멤버가 있으면 원본과 clone이 같은 객체타입 멤버를 가리킨다.!! 이 경우에는 해당 객체멤버는 clone함수 내에서 new로 다시 생성해서 할당해야 한다.
- 객체가 GC쓰레드에 의해서 소멸될 때는 finalize 함수가 호출된다.
- 강제로 GC쓰레드를 실행시키려면 System.gc() 를 이용한다.
- ex. 영상처리같이 한번에 메모리가 많이 차지할 때는 강제적으로 GC쓰레드를 작동시킬 때도 있다.
- 정규표현식과 Pattern클래스
- 문자열이 특정 패턴과 일치하는지 확인할 수 있다.
- 패턴을 정규표현식이라고 하고, Pattern클래스의 메서드로 일치 여부를 확인할 수 있다.
댓글 없음:
댓글 쓰기