이펙티브자바

· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 65. 리플렉션보다는 인터페이스를 사용하라 리플렉션 리플렉션 기능을 이용하면 프로그램에서 임의의 클래스에 접근할 수 있다. Class 객체가 주어지면 그 클래스의 생성자, 메서드, 필드에 해당하는 Constructor, Method, Field 인스턴스를 가져올 수 있고, 이 인스턴스들로 그 클래스의 멤버 이름, 필드 타입, 메서드 시그니처 등을 가져올 수 있다. Constructor, Method, Field 인스턴스를 이용해 실제 생성자, 메서드, 필드를 조작할 수 있다. 드물긴 하지만, 리플렉션은 런타임에 존재하지 않을 수도 있는 다른 클래스, 메서드, 필드와의 의존성을 관리할 때 적합하다. (외부 ..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 64. 객체는 인터페이스를 사용해 참조하라 아이템 51에서 매개변수 타입으로 클래스가 아니라 인터페이스를 사용하라고 했는데, 이 조언을 “객체는 클래스가 아닌 인터페이스로 참조하라”로 확장할 수 있다. 적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. 객체의 실제 클래스를 사용해야 할 상황은 오직 생성자로 생성할 때 뿐이다. ex 1) Set 인터페이스를 구현한 LinkedHashSet 변수를 선언하는 나쁜 예 LinkedHashSet sonSet = new LinkedHashSet(); ex 2) Set 인터페이스를 구현한 LinkedHashSet 변..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 63. 문자열 연결은 느리니 주의하라 문자열 연결 연산자(+) 여러 문자열을 하나로 합쳐주는 편리한 수단 한 줄짜리 출력값을 혹은 작고 크기가 고정된 객체의 문자열 표현을 만들 때는 괜찮지만, 본격적으로 사용하면 성능 저하가 발생할 수 있다. 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n제곱에 비례한다. 문자열은 불변이기 때문에 두 문자열을 연결할 경우, 양 쪽의 내용을 모두 복사해야하기 때문이다. ex 1) 문자열 연결을 잘못 사용한 예 public String statement() { String result = ""; for (int i=0; i
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 62. 다른 타입이 적절하다면 문자열 사용을 피하라 문자열 텍스트를 표현하도록 설계된 클래스 문자열은 워낙 많이 사용되고 잘 지원되어 의도하지 않은 용도로 쓰이는 경우도 있다. 문자열 사용 유의점 다른 값 타입을 대신하기에 적합하지 않다. 데이터가 수치형이라면, int/float 등 적당한 수치 타입으로 변환해야 하고, 예/아니오와 같은 데이터라면, boolean으로 변환해야 한다. 열거 타입을 대신하기에 적합하지 않다. 아이템 34에서 다룬 내용처럼, 상수를 열거할 때에는 문자열보다 열거 타입이 훨씬 좋다. 혼한 타입을 대신하기에 적합하지 않다. 여러 요소가 혼합된 데이터를 하나의 문자열로 표현하는 것은..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 61. 박싱된 기본 타입보다는 기본 타입을 사용하라 자바의 데이터타입 기본 타입 int, dobule, boolean 등 참조 타입 String, List 등 박싱된 기본 타입 (기본 타입에 대응하는 참조타입) Integer(int 박싱), Double(double 박싱), Boolean(boolean 박싱) 등 기본 타입 vs 박싱된 기본 타입 기본 타입은 값만 가지는데 비해, 박싱된 기본 타입은 값에 더해 식별성 이란 속성을 갖는다. 즉, 박싱된 기본 타입의 두 인스턴스가 값은 같으나 다르다고 식별될 수 있다. 기본 타입의 값은 언제나 유효하나, 박싱된 기본 타입은 유효하지 않은 값(null)을 가질 ..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 60. 정확한 답이 필요하다면 float와 double은 피하라 float, double 과학과 공한 계산용으로 설계된 데이터 타입이다. 이진 부동소수점 연산에 쓰이며, 넓은 범위의 수를 빠르게 정밀한 근사치로 계산하도록 설계되었다. 정확한 결과가 필요한 금융 관련 계산과는 어울리지 않는다. 1.03 - 0.42의 결과를 0.6100000000001을 출력한다. ex 1) 금융 계산 시에 부동소수 타입을 사용한 잘못된 예 public static void main(String[] args) { double funds = 1.00; int itemsBought = 0; for (double price = 0..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 59. 라이브러리를 익히고 사용하라 ex 1) 무작위 정수를 생성하는 좋지 않은 예 static Random rnd = new Random(); static int random(int n) { return Math.abs(rnd.nextInt()) % n; } 흔하지만, 문제가 있는 소스이다. 첫 번째, n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복된다. 두 번째, n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다. (n 값이 크면 이 현상은 더 두드러진다.) random 메서드는 지정한 범위를 벗어나는 수가 종종 튀어나올 수 있다. rnd.nextInt()가..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 58. 전통적인 for 문보다는 for-each 문을 사용하라 ex 1) for 문으로 컬렉션 순회하는 예 for (Iterator i = c.iterator(); i.hasNext(); ) { Element e = i.next(); ... } ex 2) for 문으로 배열을 순회하는 예 int[] a = {0,1,2,3,4}; for (int i = 0; i < a.length; i++) { ... } 이렇게, for문을 사용하게 되면 반복자와 인덱스 변수가 필요하다. 이처럼 쓰이는 요소 종류가 늘어나면 오류가 생길 가능성이 넓어진다. 혹시라도 잘못된 변수를 사용했을 때 컴파일러가 잡아주리라는 보장도 없..
멍목
'이펙티브자바' 태그의 글 목록 (4 Page)