일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- throwable
- 람다식
- 항해99
- junit 5
- System.in
- System.err
- 상속
- 접근지시자
- docker
- 스파르타코딩클럽
- annotation processor
- 브릿지 메소드
- 로컬 클래스
- 제네릭 와일드 카드
- System.out
- 익명 클래스
- auto.create.topics.enable
- 제네릭 타입
- github api
- Switch Expressions
- 바운디드 타입
- 프리미티브 타입
- yield
- 자바할래
- 정렬
- 합병 정렬
- Study Halle
- raw 타입
- 함수형 인터페이스
- 자바스터디
- Today
- Total
목록Book (37)
코딩하는 털보
이펙티브 자바, 아이템 8. finalizer와 cleaner 사용을 피하라 자바의 두가지 객체 소멸자 finalizer, cleaner finalizer (자바9 deprecated) finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있어서 일반적으로 불필요하다. 기본적으로 쓰지말아야 한다. cleaner cleaner는 finalizer보다는 덜 위험하지만, 여전히 예측할 수 없고, 느리고, 일반적으로 불필요하다. finalizer와 cleaner의 문제점 finalizer, cleaner가 예측할 수 없다는 것은, 객체에 접근할 수 없게 된 후 finalizer나 cleaner가 실행되기까지 얼마나 걸릴지 알 수 없다는 것. 즉, finalizer와 cleaner로는 제때 실행되어야 하는..
이펙티브 자바, 아이템 7. 다 쓴 객체 참조를 해제하라 자바의 가비지 컬렉터는 다 쓴 객체를 알아서 회수해가지만 그렇다고 메모리 관리에 더 이상 신경 쓰지 않아도 되는 것은 아니다. 가비지 컬렉션 언어에서는 메모리 누수를 찾기가 아주 까다롭다. 객체 참조 하나를 살려두면 가비지 컬렉터는 그 객체뿐아니라 그 객체가 참조하는 모든 객체를 회수해가지 못한다. 그래서 단 몇 개의 객체가 매우 많은 객체를 회수되지 못하게 할 수 있고 잠재적으로 성능에 악영향을 줄 수 있다. 해법은 참조해제. 해당 참조를 다 썼을 때 null 처리하면 된다. public Object pop() { if (size == 0) { throw new EmptyStackException(); } Object result = elemen..
이펙티브 자바, 아이템 6. 불필요한 객체 생성을 피하라 똑같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을 때가 많다. String String s = new String("bikini"); 대신 String s = "bikini" 전자는 매번 새로운 인스턴스를 만들지만 후자는 하나의 인스턴스를 사용하며 같은 문자열 리터럴을 사용하는 코드에서 같은 객체를 재사용한다. 정적 팩터리 메서드를 제공하는 불변 클래스 Boolean(String) 생성자 대신 Boolean.valueOf(String) 생성 비용이 비싼 객체 가능하다면 비싼 객체를 반복적으로 생성하지말고 정적 초기화 과정에서 직접 캐싱해두자. 예를들면 String.matches() 메서드는 내부에서 Pattern 인스턴스를..
이펙티브 자바, 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아니다. 그러나 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어 주기 때문에 private 생성자를 추가하여 클래스의 인스턴스화를 막을 수 있다. 명시적인 생성자를 추가하면 기본 생성자가 자동으로 만들어지지 않으며, 명시적인 생성자가 private이므로 클래스 바깥에서는 접근할 수 없다. 코드에 인스턴스화 방지용이라는 주석을 추가하는 것도 좋다. 생성자가 private 생성자 하나만 있는 경우에는 하위 클래스의 생성자에서 사용될 상위클래스 생성자가 없는 것이므로 상속도 막을 수 있다.
이펙티브 자바, 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴 : 인스턴스를 오직 하나만 생성할 수 있는 클래스 public static final 인스턴스 public class Printer { private final String name = "yoyo printer"; private final String owner = "tuna"; public static final Printer INSTANCE = new Printer(); private Printer() { } public void print(String in) { System.out.println("========================="); System.out.println("this is "+thi..
이펙티브 자바, 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라. 생성자든 정적 팩토리 메서드든 매개변수가 많다면 적절하게 대응하기 쉽지 않다. 생성자에 매개변수가 많을 때 사용하는 방법들을 알아보았다. 점층적 생성자 패턴 필수적 매개변수만 받는 생성자부터 시작해서 선택적 매개변수 한 개씩을 늘려가면서 모든 매개변수를 받는 생성자까지 늘려가는 단순한 방식이다. public class Book { private String title; private String author; private int price; private String publisher; private String description; private String subTitle; public Book(String title, St..
이펙티브 자바, 아이템 1. 생성자 대신 정적 팩토리 메서드를 고려하라 객체를 생성해서 반환해주는 static 메서드를 이용하여 생성자의 역할을 대신한다. 정적 팩토리 메서드를 사용했을 때의 장점 이름을 가질 수 있다. 메서드 이름에 객체의 생성 목적을 담아 낼 수 있다. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있다. class MiddleSchool extends School { private static final MiddleSchool INSTANCE = new MiddleSchool(); private MiddleSchool() { super("middle"); } publ..