equals 재정의시 주의사항 equal 메서드는 재정의 하기 쉬워 보이지만 자칫하면 끔직한 결과를 초래한다. 아래 케이스에 해당하면 재정의를 하지말자. 각 인스턴스가 본질적으로 고유하다. 값을 표현하는게 아니라 동작하는 개체를 표현하는 클래스가 여기 해당한다. 인스턴스의 논리적 동치성(Logical Equality)을 검사할 일이 없다. java.util.regex.Pattern이란 정규식을 담는 클래스를 재정의해서 두 패턴의 인스턴스가 같은 정규표현식을 나타내는지 논리적 동치성을 검사하는 방법도 있지만, 설계자가 원하지 않거나 불필요할 수 있다. 후자의 경우에는 Object의 기본 equals로 충분하다. 상위클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다. 예컨데 Set구현체는 Ab..
자바 라이브러리에는 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많다. 대표적으로 inputStream, OutputStream, java.sql.Connection 등이 좋은 예다. 자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어진다. 이런 자원 중 상당수가 안전망으로 finalizer를 활용하고는 있지만 finalizer는 그리 믿을만 하지 못하다. 또한 try 문을 중첩해서 사용할 경우 가독성은 급격히 내려간다. try-with-resource 문을 사용하기 위해서는 해당 클래스가 AutoCloseable 인터페이스를 구현해야한다. 이 인터페이스는 단순히 void를 반환하는 close 메서드 하나만 덩그러니 정의한 인터페이스다. 아래는 AutoCloseable을 실..
C, C++처럼 메모리를 직접 관리해야 하는 언어와 달리 자바는 가비지 컬렉터를 갖춘 언어이다. 하지만 그럼에도 불구하고 메모리 누수가 발생한다. 아래 코드가 대표적인 메모리 누수가 일어나는 클래스다. public class Stack { private Object[] elements ; private int size = 0; // ... public Object pop(){ if(size == 0 ){ throw new EmptyStackException(); } return elements[--size]; } // ... }Stack 이란 자료구조는 원래 pop을 하면서 해당 데이터가 내보내는데, 위 코드에서는 size 변수의 값을 1 내림으로써 pop한 데이터를 남긴다. public class St..
- Total
- Today
- Yesterday
- Java Memory Structure
- Delete
- k8s
- Java
- kubernetes
- Replication Controller
- POD
- 자바 메모리 구조
- JVM
- Effective Java
- JMM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |