728x90
반응형

전체 글 168

[Effective Java] 아이템 14. Comparable을 구혈할지 고려하라.

알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 인터페이스를 구현하자. 이 객체와 주어진 객체의 순서를 비교한다. 이 객체가 주어진 객체보다 작으면 음의 정수를, 같으면 0을, 크면 양의 정수를 반환한다. 이 객체와 비교할 수 없는 타입의 객체가 주어지면 ClassCastException 을 던진다. public class Item14 implements Comparable { private Integer integer; public Item14(Integer integer) { this.integer = integer; } @Override public int compareTo(Item14 o) { return Integer.compare(integer, o...

Java 2022.05.24

[Effective Java] 아이템 13. clone 재정의는 주의해서 진행하라.

Cloneable은 복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스지만, 아쉽게도 의도한 목적을 제대로 이루지 못했다. 가장 큰 문제는 clone 메서드가 선언된 곳이 Cloneable이 아닌 Object이고, 그마저도 protected라는 데 있다. protected native Object clone() throws CloneNotSupportedException; Object 명세에 적힌 규약 ❗ 이 객체의 복사본을 생성해 반환한다. '복사'의 정확한 뜻은 그 객체를 구현한 클래스에 따라 다를 수 있다. 일반적인 의도는 다음과 같다. 어떤 객체 x에 대해 다음 식은 참이다. x.clone() != x 또한 다음 식도 참이다. x.clone().getClass() == x.g..

Java 2022.05.24

[Effective Java] 아이템 10. equals는 일반 규약을 지켜 재정의하라.

Object 명세에 적힌 규약 ❗ 1️⃣ 반사성 : null이 아닌 모든 참조 값 x에 대해, x.equals(x)는 true다. 2️⃣ 대칭성 : null이 아닌 모든 참조 값 x,y에 대해, x.equals(y)가 true면 y.equals(x)도 true다. 3️⃣ 추이성 : null이 아닌 모든 참조 값 x,y,z에 대해, x.equals(y)가 true이고 y.equals(z)도 true면 x.equals(z)도 true다. 4️⃣ 일관성 : null이 아닌 모든 참조 값 x,y에 대해, x.equals(y)를 반복해서 호출하면 항상 true를 반환하거나 항상 false를 반환한다. 5️⃣ null-아님 : null이 아닌 모든 참조 값 x에 대해, x.equals(null)은 false다. 잘..

Java 2022.05.24

[Effective Java] 아이템 9. try-finally보다는 try-with-resources를 사용하라.

close 메서드를 직접 호출하여 닫아주는 자원들이 존재하기 때문에 클라이언트가 놓치기가 쉽다. 안전망으로 finalizer를 활용하고 있지만 [아이템8]에서 말했듯 믿을게 못된다. static void copy(String src, String dst) throws IOException { InputStream in = new FileInputStream(src); try { OutputStream out = new FileOutputStream(dst); try { byte[] buf = new byte[BUFFER_SIZE]; int n; while ((n=in.read(buf)) >= 0){ out.write(buf,0,n); } } finally { out.close(); } } finally ..

Java 2022.05.24

[Effective Java] 아이템 7. 다 쓴 객체 참조를 해제하라.

import java.util.EmptyStackException; public class Stack { private Object[] elements; private int size = 0; public Object pop() { if (size == 0) { throw new EmptyStackException(); } return elements[--size]; } } 위는 Stack 클래스의 일부분이다. 스택이 커졌다가 줄어들었을 때 스택에서 꺼내진 객체들을 가비지 컬렉터가 회수하지 않는다. 프로그램에서 그 객체들을 더 이상 사용하지 않더라도 말이다. // 제대로 구한한 pop메서드 public Object pop() { if (size == 0) { throw new EmptyStackExcep..

Java 2022.05.24
728x90
반응형