728x90
반응형

Effective Java 67

[Effective Java] 아이템 64. 객체는 인터페이스를 사용해 참조하라.

🎯 아이템 64. 객체는 인터페이스를 사용해 참조하라. 적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. /* 할인 정책 인터페이스 */ public interface DiscountPolicy { int discount(Member member, int price); } /* 정액 할인 클래스 */ public class FixDiscountPolicy implements DiscountPolicy{ private int discountFixAmount = 1000; // 1000원 할인 @Override public int discount(Member member, int price) { ... } } /* 정률 할인 클래스 */ public cl..

Java 2023.03.29

[Effective Java] 아이템 63. 문자열 연결은 느리니 주의하라.

🎯 아이템 63. 문자열 연결은 느리니 주의하라. 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다. 문자열 연결을 잘못 사용한 예 - 느리다! public String statement(){ String result = ""; for(int i = 0; i < numItems(); i++) result += lineForItem(i); return result; } 품목이 많을 경우 이 메서드는 심각하게 느려질 수 있다. 성능을 포기하고 싶지 않다면 String 대신 StringBuilder를 사용하자. StringBuilder를 사용하면 문자열 연결 성능이 크게 개선된다. public String statement2(){ StringBuilder b = new StringBuilder..

Java 2023.03.28

[Effective Java] 아이템 62. 다른 타입이 적절하다면 문자열 사용을 피하라.

🎯 아이템 62. 다른 타입이 적절하다면 문자열 사용을 피하라. 1️⃣ 문자열은 다른 값 타입을 대신하기에 적합하지 않다. 받는 데이터가 수치형이라면 int, float, BigInteger 등 적당한 수치 타입으로 변한해야한다. &#39;예/아니오&#39; 질문의 답이라면 적절한 열거 타입이나 boolean으로 변환해야 한다. 2️⃣ 문자열은 열거 타입을 대신하기에 적합하지 않다. 3️⃣ 문자열은 혼합 타입을 대신하기에 적합하지 않다. 혼합 타입을 문자열로 처리한 부적절한 예 String compoundKey = className + "#" + i.next(); 4️⃣ 문자열은 권한을 표현하기에 적합하지 않다. @Entity public class Member { @Id private Long id; ..

Java 2023.03.28

[Effective Java] 아이템 60. 정확한 답이 필요하다면 float와 double은 피하라, 박싱된 기본 타입보다는 기본 타입을 사용하라.

🎯 아이템 60. 정확한 답이 필요하다면 float와 double은 피하라. float와 double 타입은 과학과 공학 계산용으로 설계되었다. 이진 부동소수점 연산에 쓰이며,넓은 범위의 수를 빠르게 정밀한 &#39;근사치&#39;로 계산하도록 세심하게 설계되었다. 따라서, 정확한 결과가 필요할 때는 사용하면 안 된다. float와 double 타입은 특히 금융 관련 계산과는 맞지 않는다. 따라서, 금융 계산에는 BigDecimal, int 혹은 long을 사용해야 한다. 🎯 아이템 61. 박싱된 기본 타입보다는 기본 타입을 사용하라. 기본 타입 vs 박싱된 기본 타입 1️⃣ 기본 타입은 값만 가지고 있으나, 박싱된 기본 타입은 값에 더해 식별성이란 속성을 갖는다. public class Main { p..

Java 2023.03.27

[Effective Java] 아이템 59. 라이브러리를 익히고 사용하라.

🎯 아이템 59. 라이브러리를 익히고 사용하라. “바퀴를 다시 발명하지 마라 (Don’t reinvent the wheel)” 아주 특변한 나만의 기능이 아니라면 누군가 이미 라이브러리 형태로 구현해놓았을 가능성이 크다. 표준 라이브러리를 사용하면 좋은 이점 코드를 작성한 전문가의 지식과 여러분보다 앞서 사용한 다른 프로그래머들의 경험을 활용할 수 있다. 핵심적인 일과 크게 관련 없는 문제를 해결하느라 시간을 허비하지 않아도 된다는 것이다. 노력하지 않아도 성능이 지속해서 개선된다는 점이다. 기능이 점점 더 많아진다. 작성한 코드가 많은 사람에게 낯익은 코드가 된다. 참고 자료 Joshua Bloch, 『Effective Java 3/E』, 개앞맵시 옮김, 프로그래밍인사이트(2018) http://www..

Java 2023.03.26

[Effective Java] 아이템 58. 전통적인 for 문보다는 for-each 문을 사용하라.

🎯 아이템 58. 전통적인 for 문보다는 for-each 문을 사용하라. 전통적인 for문과 비교했을 때 for-each문은 명료하고, 유연하고, 버그를 예방해준다. 성능 저하도 없다. 가능한 모든 곳에서 for문이 아닌 for-each문을 사용하자. 하지만 안타깝게도 for-each문을 사용할 수 없는 상황이 세 가지 존재한다. 1️⃣ 파괴적인 필터링 컬렉션을 순회하면서 선택된 원소를 제거해야 한다면 반복자의 remove 메서드를 호출해야한다. 자바8부터는 Collection의 removeIf 메서드를 사용해 컬렉션을 명시적으로 순회하는 일을 피할 수 있다. 2️⃣ 변형 리스트나 배열을 순회하면서 그 원소의 값 일부 혹은 전체를 교체해야 한다면 리스트의 반복자나 배열의 인덱스를 사용해야한다. 3️⃣ ..

Java 2023.03.26
728x90
반응형