일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Switch Expressions
- 익명 클래스
- public 필드
- 접근지시자
- 제네릭 타입
- 제네릭 와일드 카드
- 함수형 인터페이스
- Java
- 람다식
- 로컬 클래스
- 상속
- 바운디드 타입
- auto.create.topics.enable
- 프리미티브 타입
- 자바할래
- System.in
- 항해99
- 정렬
- github api
- 합병 정렬
- 자바스터디
- Effective JAVA
- raw 타입
- System.err
- annotation processor
- 스파르타코딩클럽
- 브릿지 메소드
- Study Halle
- junit 5
- System.out
- Today
- Total
목록Book/이펙티브 자바 (69)
코딩하는 털보
package me.rockintuna.effectivejava.item;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.util.Set;/*리플렉션보다는 인터페이스를 활용하라 */public class Item65 { /* 리플렉션으로 하고자 하는 것 - 클래스의 생성자, 메서드, 필드에 접근 및 조작 단점 - 컴파일타임의 검사를 하지 못함 - 코드가 지저분해지고 장황해짐 - 성능 저하 리플렉션은 아주 제한된 형태로만 사용해야 그 단점을 피하고 이점만 취할 수 있다. 컴파일 타임에 이용할 수 없는 클래스를 사용하는 프로그램에서..
package me.rockintuna.effectivejava.item;import java.util.HashMap;import java.util.Map;/*객체는 인터페이스를 사용해 참조하라 */public class Item64 { /* 적합한 인터페이스가 있다면 매개변수, 반환값, 변수, 필드를 클래스가 아닌 인터페이스 타입으로 선언하자. */ public static void main(String[] args) { //프로그램이 훨씬 유연해진다. Map set = new HashMap(); //ConcuurentHashMap으로 구현체를 바꿔야하는 경우 생성자만 바꾸면 된다.// Map set = new Conc..
package me.rockintuna.effectivejava.item;import org.springframework.util.StopWatch;/*문자열 연결은 느리니 주의하라 */public class Item63 { public static void main(String[] args) { //문자열 연결 String comb = "abc" + "def"; /* 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다. (O(N^2)) 문자열은 불변이기 때문에 연결되는 문자열 모두를 복사해야 한다. 성능적으로 매우 좋지 못하므로 연결을 자주 시키거나 여러 문자열을 연결해야 한다면 문자..
package me.rockintuna.effectivejava.item;/*다른 타입이 적절하다면 문자열 사용을 피하라 */public class Item62 { /* 문자열을 쓰면 안되는 사례 */ /* 1. 문자열은 다른 값 타입을 대신하기에 적합하지 않다. 입력 받을 데이터가 수치형이라면 -> int, float, BigInteger "예 / 아니오" 같은 질문의 답이라면 -> enum, boolean 2. 문자열은 열거 타입을 대신하기에 적합하지 않다. 상수를 열거할 때는 enum이 String보다 월등히 낫다. 3. 문자열은 혼합 타입을 대신하기에 적합하지 않다. */ private String key; String co..
package me.rockintuna.effectivejava.item;import java.util.Comparator;/*박싱된 기본 타입보다는 기본 타입을 사용하라 */public class Item61 { /* 기본 타입과 박싱된 기본 타입의 차이 1. 기본 타입은 값만 가지고 있으나 박싱된 기본 타입은 값에 더해 식별성이라는 속성을 가진다. "식별성", 박싱된 기본 타입의 두 인스턴스는 값이 같아도 서로 다르다고 식별될 수 있다. 2. 박싱된 기본 타입은 유효하지 않은 값 (null)을 가질 수 있다 3. 기본 타입이 박싱된 기본 타입보다 시간과 메모리 사용면에서 효율적이다. JAVA에서는 오토박싱과 오토언박싱 기능을 통해 기본 타입과 박싱된 기본 타입을 ..
package me.rockintuna.effectivejava.item;import java.math.BigDecimal;/*정확한 답이 필요하다면 float와 double은 피하라 */public class Item60 { /* float과 double은 과학/공학 계산용으로 이진 부동소수점 연산에 쓰이며 넓은 범위의 수를 정밀한 근사치로 계산하도록 설계되어있다. 따라서 정확한 결과가 필요할 때는 사용하면 안된다. */ public static void main(String[] args) { System.out.println(1.03 - 0.42); //결과는 0.61이 아닌 0.6100000000000001 System.out...
package me.rockintuna.effectivejava.item;import java.util.Random;import java.util.SplittableRandom;import java.util.concurrent.ThreadLocalRandom;/*라이브러리를 익히고 사용하라 */public class Item59 { static Random random = new Random(); static int random(int n) { return Math.abs(random.nextInt()) % n; } /* 이 코드의 문제 1. n이 2의 제곱수면 같은 수열이 반복된다. 2. n이 2의 제곱수가 아니면 몇몇 숫자가 더 자주 반환된다. ..
package me.rockintuna.effectivejava.item;import java.util.Iterator;import java.util.List;/*전통적인 for 문보다는 for-each 문을 사용하라 */public class Item58 { public static void main(String[] args) { List list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); //전통적인 배열 순회 for문 for (int i = 0; i iterator = list.iterator(); iterator.hasNext();) { Integer next = iterator.next(); ..
package me.rockintuna.effectivejava.item;import java.util.Iterator;import java.util.List;/*지역변수의 범위를 최소화하라 */public class Item57 { /* 지역변수 범위가 최소화되었을 때 장점 - 가독성 - 유지보수성 - 오류 방지 지역변수 범위를 줄이는 방법 - 가장 처음 쓰일 때 선언하기 - 선언과 동시에 초기화하기 (try-catch 예외) - 메서드를 작게 유지하고 한 가지 기능에 집중하기 컬렉션을 순회할 때 while보다 for문을 권장 - for문은 반복 변수의 범위가 반복문 몸체와 괄호 안으로 제한된다. - 따라서 while보다 for문을 쓰는 ..
package me.rockintuna.effectivejava.item;import java.util.*;import java.util.stream.Stream;/*옵셔널 반환은 신중히 하라 */public class Item55 { /* 메서드에서 특정 조건에서 값을 반환할 수 없는 경우 선택지 - 예외 : 진짜 예외적일때만 사용해야 함 - null : null 처리 코드를 작성해야함 (안하면 나중에 오류 발생 가능) - Optional 보통은 T를 반환하지만 특정 조건에서 아무것도 반환하지 않아야 하는 메서드는 T 대신 Optional를 반환하도록 하면 된다. => 예외보다 유연하고 null보다 오류 가능성이 적음 */ public Option..