일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 알고리즘
- 공채
- 디지털
- 컴퓨터과학
- java
- 프로그래밍
- 개발
- 뮤텍스
- 스프링
- Public
- github
- package-private
- 신입
- 깃허브
- 운영체제
- 세마포어
- 스터디
- IT
- Effective Java
- CS
- 우리카드
- 컴퓨터공학
- spring
- 메모리
- OS
- 정보처리기사
- 이펙티브 자바
- 깃
- 자바
- 신입사원
- Today
- Total
목록이펙티브 자바 (11)
주니어 개발자 성장기
3장 Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되었다. Object에서 final이 아닌 메서드(equals, hashCode, toString, clone, finalize)는 모두 재정의(overriding)를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약이 명확히 정의되어 있다. 일반 규약에 맞게 해당 메소드를 overriding 해야 일반 규약을 활용하는 클래스들(HashMap, HashSet)이 오동작하지 않게 된다. finalize는 이전 장에서 다루었으므로 더이상 언급하지 않는다. 개요equals 메서드는 overriding하기 쉬워 보이지만 곳곳에 함정이 있으므로 필요하지 않은 경우 overriding하지 않는 것이 최선이다. 그..
개요 자바 7부터 try-finally는 더 이상 최선의 방법이 아니다. (자바 7부터) try-with-resources를 사용하면 코드가 더 짧고 분명하다. 만들어지는 예외 정보도 더 유용하다. try-finally의 문제점 // 코드 9-2 자원이 둘 이상이면 try-finally 방식은 너무 지저분하다! (47쪽) 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 =..
개요 자원 회수를 위해서 사용할 수 있는 finalizer와cleaner는 즉시 수행된다는 보장이 없으며 상황에 따라 위험할 수도 있어 불필요하다. Finalizer 다음과 같이 클래스에 Object.finalize 메서드를 오버라이딩 해주면 된다. @Override protected void finalize() throws Throwable { System.out.print(""); } 자바 9부터 Deprecated 되었다. 대안으로 AutoCloseable, Cleaner, WeakReference, PhantomReference 등을 제시하고 있다. (AutoCloseable가 제일 낫다고 한다) 또한 상속을 악용한 Finalizer 공격이 일어날 수도 있다. Cleaner 다음과 같이 stati..
싱글톤을 사용하는 경우 크게 2가지 경우에 싱글톤을 사용하면 된다. 싱글톤을 사용하면 좋은 경우 DB 커넥션 등 인스턴스 생성 비용이 비싼 경우 반드시 사용해야 하는 경우 환경설정 등 애플리케이션 전반에 하나만 존재해야 하는 경우 Private 생성자 이펙티브 자바에서는 private 생성자를 기본으로 싱글톤을 구현하는 방법을 소개하고 있다. 그 중 첫 번째 방법인 public static final 멤버 변수를 사용하는 방법은 다음과 같다. public static final Elvis INSTANCE = new Elvis(); 즉, 필요 할 때마다 Elvis. INSTANCE를 직접 호출하면 된다. 문제점 테스트하기 어려운 구조 싱글톤 클래스를 사용하는 클라이언트 코드의 테스트가 어려워진다. 인터페이..
개요 클라이언트 코드가 어떤 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자이다. 하지만 이 방식은 단점이 존재하기 때문에 대안으로 정적 팩터리 메서드를 생각해 볼 수 있다. 정적 팩터리 메서드? 정적 팩터리 메서드는 간단하게 생성자와 같이 클래스의 인스턴스를 반환하는 역할을 한다. 영어로는 static factory methods public class CoffeeBean { // 원두 원산지 private String region; // 원두 품종 private String variety; // 원두 로스팅 시각 private LocalDateTime roastedAt; private CoffeeBean(String region, String variety, LocalDateTime ro..