728x90
반응형

Effective Java 67

[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

[Effective Java] 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라.

class Singleton { // LazyHolder Singleton pattern private Singleton(){}; private static class LazyHolder{ public static final Singleton instance = new Singleton(); } // getInstance()를 호출했을때 LazyHolder 클래스가 로딩되면서 생성 // 장점 : 객체가 필요한 시점에서 초기화가 진행된다. public static Singleton getInstance(){ return LazyHolder.instance; } } 객체를 오직 하나만 생성하여 활용하는것을 싱글턴이라고 한다. 싱글턴을 만들때 반드시 고려해야하는 사항은 무상태 객체이다. 참고 자료 Joshua..

Java 2022.05.24

[Effective Java] 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라.

if. 생성자의 매개변수가 많다면 ❓ public class User { private long userSn; private String userId; private String userPw; public User(long userSn) { this.userSn = userSn; } public User(long userSn, String userId) { this.userSn = userSn; this.userId = userId; } public User(long userSn, String userId, String userPw) { this.userSn = userSn; this.userId = userId; this.userPw = userPw; } } 점층적 생성자 패턴도 쓸 수는 있지만, 매개..

Java 2022.05.24
728x90
반응형