자바 공부

· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 67. 최적화는 신중히 하라 최적화 관련 격언 (맹목적인 어리석음을 포함해) 그 어떤 핑계보다 효율성이라는 이름 아래 행해진 컴퓨팅 죄악이 더 많다. - 윌리엄 울프 자그마한 효율성은 모두 잊자. 섣부른 최적화가 만악의 근원이다. - 도널드 크누스 최적화 할 때는 다음의 두 규칙을 따르라. 첫 번째, 하지마라. 두 번째, (전문가 한정) 아직 하지 마라, 다시 말해 완전히 명백하고 최적화되지 않은 해법을 찾을 때까지 하지마라. - M.A 잭슨 이 격언들은 자바가 탄생하기 20년 전에 나온 것으로, 최적화의 어두운 진실을 알려준다. 최적화는 좋은 결과보다 해로운 결과로 이어지기 쉽고, 섣불리 진행하면 그럴 ..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 66. 네이티브 메서드는 신중히 사용하라 자바 네이티브 인터페이스(Java Native Interface, JNI) 자바 프로그램이 네이티브 메서드를 호출하는 기술 네이티브 메서드란? C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 의미함 네이티브 메서드의 주요 쓰임 레지스트리 같은 플랫폼 특화 기능을 사용한다. 네이티브 코드로 작성된 기존 라이브러리를 사용한다. 성능 개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성한다. 자바가 발전해가면서 하부 플랫폼의 기능들을 점차 흡수해 네이티브 메서드를 사용할 필요가 점점 줄고 있다. 성능을 개선할 목적으로 네이티브 메서드..
· 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()가..
멍목
'자바 공부' 태그의 글 목록 (4 Page)