일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Service Locator
- 디자인 패턴
- Firebase
- Effective Java
- 플라이웨이트
- deleteById
- NotEmpty
- Effetive Java
- 이펙티브 자바
- 트랜잭션
- Connection Pool
- @Valid
- Proxy Patter
- @SpyBean
- JPA
- SQL 삽입 공격
- restTemplate
- java
- FCM
- springboot
- Service Locator 패턴
- 데이터베이스
- Item04
- Spring Boot
- @ControllerAdvice
- NotBlank
- multi module
- Web
- db
- @MockBean
- Today
- Total
목록Effective Java (4)
NoTimeForDawdling
GC는 다 쓴 객체를 알아서 회수해 가기 때문에 메모리 관리에 더 이상 신경 쓰지 않아도 된다고 오해할 수 있다. GC가 처리할 수 없는 자원이 생기지 않게 주의해야 한다. 메모리 직접 관리 예제 public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { this.elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { this.ensureCapacity(); this.elements[size++] = e; } public O..
똑같은 기능의 객체를 매번 생성하는 것 보다 객체 하나를 재사용하는 편이 나을 때가 많습니다. 만약 똑같은 기능의 객체를 매번 생성하게 된다면 쓸데없는 인스턴스가 수백만 개 만들어 질 수 있고, 이는 GC의 대상이 될 수 있습니다. 정적 팩토리 메서드 Boolean(String) 생성자 대신 Boolean.valueOf(String) 팩토리 메서드를 사용하는 것이 좋습니다. 생성자는 호출할 때마다 새로운 객체를 만들지만, 팩토리 메서드는 그렇지 않습니다. boolean bad = new Boolean("TRUE"); // 생성자 호출 boolean good = Boolean.valueOf("TRUE"); // 팩토리 메서드 사용 생성비용이 비싼 객체 생성 비용이 '비싼 객체'가 반복해서 필요하다면 캐싱하..
많은 클래스는 하나 이상의 자원에 의존합니다. 하나의 자원에 의존한다면 정적 유틸리티 클래스나, 싱글톤 방식을 써도 괜찮을 수 있습니다. 하지만 사용하는 자원에 따라 동작이 달라지는 클래스라면 정적 유틸리티 클래스나 싱글톤 방식이 적합하지 않습니다. 정적 유틸리티를 잘못 사용한 예 public class SpellChecker { private static final Lexicon dictionary = new Lexicon(); // 특정 자원 명시 private SpellChecker() {} // 인스턴스화 방지 public static boolean isValid(String word) {...} public static List suggestions(String typo) {...} } 싱글톤을..
싱글턴(Singleton) 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말합니다. 단순히 함수를 사용하기 위한 유틸, 로깅, 설계상 유일해야 하는 시스템 컴포넌트를 보통 싱글턴 인스턴스로 관리합니다. 클래스를 싱글톤으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있습니다. 싱글턴 만드는 방법 1. public static final 필드 방식 public class Elvis1 { public static final Elvis1 INSTANCE = new Elvis1(); private Elvis1() { } } public static final Elvis1 INSTANCE = new Elvis1() 은 static 영역이 로딩될 때 딱 1번만 호출됩니다. 해당 클래스가 ..