728x90
반응형

Java 80

[Effective Java] 아이템 66. 네이티브 메서드는 신중히 사용하라, 아이템 67. 최적화는 신중히 하라, 아이템 68. 일반적으로 통용되는 명명 규칙을 따르라.

🎯 아이템 66. 네이티브 메서드는 신중히 사용하라. 네이티브 메서드를 사용하려거든 한번 더 생각하라. 네이티브 메서드가 성능을 개선해주는 일은 많지 않다. 저수준 자원이나 네이티브 라이브러리를 사용해야만 해서 어쩔 수 없더라도 네이티브 코드는 최소한만 사용하고 철저히 테스트하라. 네이티브 코드 안에 숨은 단 하나의 버그가 여러분 애플리케이션 전체를 훼손할 수도 있다. 🎯 아이템 67. 최적화는 신중히 하라. 빠른 프로그램을 작성하려 안달하지 말자. 좋은 프로그램을 작성하다 보면 성능은 따라오게 마련이다. 1️⃣ 성능을 제한하는 설계를 피하라. 완성 후 변경하기가 가장 어려운 설계 요소는 바로 컴포넌트끼리, 혹은 외부 시스템과의 소통 방식이다. 이런 설계 요소들은 완성 후에는 변경하기 어렵거나 불가능할 ..

Java 2023.03.30

[Effective Java] 아이템 65. 리플렉션보다는 인터페이스를 사용하라.

🎯 아이템 65. 리플렉션보다는 인터페이스를 사용하라. 리플렉션은 복잡한 특수 시스템을 개발할 때 필요한 강력한 기능이지만, 단점도 많다. 컴파일타임에는 알 수 없는 클래스를 사용하는 프로그램을 작성한다면 리플렉션을 사용해야 할 것이다. 단, 되도록 객체 생성에만 사용하고, 생성한 객체를 이용할 때는 적절한 인터페이스나 컴파일타임에 알 수 있는 상위 클래스로 형변환해 사용해야 한다. @Before(VO_SETTING_EXPRESSION) public void setVO(JoinPoint joinPoint) { Object[] objects = joinPoint.getArgs(); if(SecurityContextHolder.getContext().getAuthentication()!= null) { In..

Java 2023.03.29

[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
728x90
반응형