일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BFS
- 투 포인터
- 플로이드-와샬
- 위상정렬
- 에라토스테네스의 체
- 후니의 쉽게 쓴 시스코 네트워킹
- Network
- 백준
- 시뮬레이션
- Effective Java
- swea
- 유니온 파인드
- 문자열
- 스택
- JUnit 5
- 세그먼트 트리
- 수학
- 이분탐색
- Kotlin
- java
- 동적계획법
- 완전탐색
- 프로그래머스
- 구현
- 그리디
- CS
- mst
- dfs
- 알고리즘
- 백트래킹
목록개발 (17)
반갑습니다!
똑같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을 때가 많음 재사용은 빠르고 세련됨 특히 불변 객체는 언제든 재사용할 수 있음 극단적인 예시 String s = new String("bikini"); // 따라 하지 말 것! 실행될 때마다 String 인스턴스를 새로 만듬 반복문이나 빈번히 호출되는 메서드 안에 있다면 쓸데없는 String 인스턴스가 수백만 개 만들어질 수 있음 개선 String s = "bikini"; 새로운 인스턴스를 매번 만드는 대신 하나의 String 인스턴스를 사용함 같은 가상 머신 안에서 이와 똑같은 문자열 리터럴을 사용하는 모든 코드가 같은 객체를 재사용함이 보장됨 정적 팩터리 메서드 생성자 대신 정적 팩터리 메서드(아이템 1)를 제공하는 불변 클래스..
아이템 5: 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 많은 클래스가 하나 이상의 자원에 의존함 ex) 맞춤법 검사기는 사전(dictionary)에 의존함 이런 클래스를 정적 유틸리티 클래스로 구현하는 모습을 드물지 않게 볼 수 있음 정적 유틸리티를 잘못 사용한 예 - 유연하지 않고 테스트하기 어렵다 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} // 객체 생성 방지 public static boolean isValid(String word) { ... } public static List suggestions(String typo) { ... } } 싱글턴을 ..
단순히 정적 메서드와 정적 필드만을 담은 클래스가 필요할 때가 있다 ex) java.lang.Math, java.util.Arrays 기본 타입 값, 배열 관련 메서드들이 모여있음 ex) java.util.Collections 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(혹은 팩터리)를 모아놓을 수 있음 final 클래스와 관련한 메서드들을 모아놓을 수 있음 final 클래스는 상속이 불가능하므로 하위 클래스에 메서드를 넣는 건 불가능 인스턴스화를 막는 방법 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 사용하려고 설계된 것이 아니다 생성자를 명시해주지 않으면 컴파일러가 자동으로 생성자를 만들어주므로 의도치 않게 인스턴스화 가능할 수 있음 유틸리티 클래스를 추상 클래스로 만드는 것으로..
싱글턴(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말함 ex) 함수와 같은 무상태 객체, 설계상 유일해야 하는 시스템 컴포넌트 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기 어려움 타입을 인터페이스로 정의해서 만든 싱글턴이 아니면 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없음 생성 방법 1 public static 멤버를 final 필드로 두는 방법 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } public void leaveTheBuilding() { ... } } private 생성자는 Elvis.INSTANCE 를 초기..
정적 팩터리와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 단점이 있다 대안 1: 점층적 생성자 패턴(telescoping constructor pattern) 점층적 생성자 패턴(telescoping constructor pattern)을 사용해서 해결할 수 있지만, 매개변수 개수가 더 늘어나면 클라이언트 코드를 작성하거나 가독성이 떨어진다는 한계가 있음 ex) 원하는 매개변수를 모두 포함한 생성자 중에서 가장 짧은 것을 선택해야함 Nutritionfacts cocaCola = new NutritionFacts(240, 8, 100, 0, 35, 27); public class NutritionFacts { private final int servingSize; // (ml, 1회 제공..