일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- stream
- jwt
- select_type
- VUE
- 재정의
- java
- DDL
- Spring
- cache
- Test
- redis
- 테스트 코드
- SQL
- jpa
- 바이너리 카운팅
- 인덱스
- StringBuilder
- 필드 주입
- KEVISS
- lambda
- 열 속성
- DI
- static
- docker
- 생성자 주입
- hashcode
- MSA
- 조합
- AOP
- equals
- Today
- Total
목록Java (39)
백엔드 개발자 블로그
똑같은 기능의 객체를 매번 생성하기보다 하나의 객체를 재사용하는 것이 나을 떄가 많다. 1. new String()은 사용하지 말아라 new String() : 코드가 실행될 때마다 새로운 인스턴스가 생성됩니다. "문자열" : 스트링 풀에서 재사용합니다. 2. 정적 팩터리 메서드를 통해 인스턴스를 재사용할 수 있다. 정적 팩터리 메서드에서도 Effective Java 1. 생성자 대신 정적 팩터리 메서드를 고려하라 에서 호출될 때 인스턴스를 새로 생성하지 않아도 됩니다. 또한 불변이 아닌 가변 객체라도 사용중에 변경되지 않는다면 재사용이 가능합니다. 3. 생성 비용이 비싼 객체는 캐싱을 하여 재사용을 하라. String.matches에 사용되는 Pattern는 인스턴스 생성비용이 큽니다. 이러한 클래스는..
정적 유틸리티와 싱글턴의 단점 대부분의 많은 클래스들은 하나의 자원에 의존합니다. // 정적 유틸리티를 잘못 사용한 예 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} public static boolean isValid(String word) {...} public static List suggestions(String typo) {...} } // 싱글턴 패턴을 잘못 사용한 예 public class SpellChecker { private final Lexicon dictionary = ...; private SpellChecker() {} public static S..
상황 정적 메서드와 정적 필드만을 담은 유틸리티 클래스를 생성하고 싶을 때가 존재합니다. java.lang.Math, java.util.Arrays와 같이 기본 타입 값이나 배열 관련 메서드를 모아둔 것 java.util.Collectios와 같이 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아둔 것 final 클래스를 상속하여 하위 클래스에 메서드를 넣는 것이 불가능하기에 final 클래스와 관련된 메서드를 모아둘 때 이런 유틸리티 클래스는 인스턴스로 만드려고 설계한게 아니라서, 클래스의 인스턴스화를 막아줘야합니다. 해결책 private접근 제어자를 가진 기본 생성자를 만들어 클래스의 인스턴스화를 막아주면 됩니다. 해당 클래스가 인스턴스화 될 일이 발생하지 않습니다. 상속을 불가능하게 ..
싱글턴은 하나의 프로그램 내에 하나의 인스턴스만을 가질 수 있도록 하는 전략 패턴입니다. 싱글턴을 사용하는 대표적인 예로는 stateless 객체나 설계적으로 프로그램 내에 하나만 존재해야하는 시스템 컴포넌트 들이 있습니다. 하지만 싱글턴의 경우 interface를 통해 구현하여 만든 것이 아니라면 싱글턴 인스턴스를 mock 구현으로 대체할 수 없기 때문에 클라이언트를 테스트하기 어려워질 수 있다는 단점이 존재합니다. 싱글턴 패턴을 만드는 방식 1. public static final 필드 방식의 싱글턴 public class Singleton { public static final Singleton INSTANCE = new Singleton(); private Singleton() { ... } ....