이펙티브자바(2)
-
???: "규칙에 예외를 둘 순 없어요", equals 오버라이딩은 일반 규약을 지켜 재정의하기 - (1)
1. 기본적으로 Object.equals() 는 Overriding 하지 않는 것이 정답이다.위 문장을 보고 이런 생각이 들었을 겁니다. "뭔 규약을 지켜 재정의하라면서, 애초에 하지 말라니?" 틀린 말은 아니다만, equals() 오버라이딩은 오류가 나기 쉬운 작업입니다. 그러기에 Equals 오버라이딩를 고민하고 있는 당신에게 만약 다음 상황들에 쳐해있다면 equals를 오버라이딩 하지 않는 것을 추천하지 않습니다!각 인스턴스가 고유하다. ex) Thread 클래스인스턴스의 '논리적 동치성' 을 검사할 일이 없다. ex) new Point(1,2), new Point(1,2)의 경우, 둘이 같다고 해석할 수도 있다.상위 클래스에서 재정의한 equals가 하위 클래스에서도 딱 들어맞는다. ex) Abs..
2023.08.01 -
finalize, cleaner 는 쓸모도 없는 데 대체 왜 있을까?
자바에는 2가지의 객체 소멸자가 존재한다finalize()cleaner()💡 객체 소멸자란?객체가 메모리에서 제거될 때 호출되는 함수나 메소드본래의 뜻과 같은 의도의 함수이지만객체 소멸자는 기본적으로 쓰지 말아야 한다. 왜냐하면 finalizer(), cleaner() 가 언제 실행된다는 보장이전적으로 GC 의 알고리즘에 달려 있어 프로그래머가 사용한다고 해도 보장을 받지 못하기 때문이다. 그래서 finalizer(), cleaner() 는 기본적으로 쓰지 말라고 하지만더더욱 쓰지 말아야 하는 순간과 상황들이 존재하게 되는 데이는 다음 경우들이다.상태를 영구적으로 수정하는 작업성능 문제보안 문제사실상 finalize, cleaner 안에서는 무엇을 보장받지 못한다.그렇다면 finalizer 와 clea..
2023.07.28