Language/Java

Language/Java

[effective java] 아이템 69. 예외는 진짜 예외 상황에만 사용하라.

예시 1 코드 1 - 예외 처리를 제어 흐름 방식으로 사용 // 예외를 완전히 잘못 사용한 예 - 훨씬 느리다. try { // 성능이 2배 정도 느리다 int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e) { } 배열의 원소를 순회하는데, 무한루프를 돌다가 배열의 끝에 도달해 ArrayIndexOutOfBoundsException이 발생하면 끝을 내는 코드이다. 코드 2 - 표준적인 관용구 // 표준적인 관용구로 작성한 예 for (Mountain m : range) m.climb(); 코드 1의 문제점 예외 처리는 비용이 많이 드는 작업이다. 예외는 코드의 정상적인 실행 흐름을 제어하기 위한 수단이 아..

Language/Java

[effective java] 아이템 68. 일반적으로 통용되는 명명 규칙을 따르라.

자바 언어의 명명 규칙 크게 철자와 문법 두 가지로 나뉜다. 철자 규칙 특별한 이유가 없는 한 반드시 따라야 한다. 지키지 않을 경우 API는 사용하기 어렵고, 유지보수하기 어렵다. 가독성이 떨어진다. 패키지와 모듈 이름 각 요소를 점(.)으로 구분하여 계층적으로 짓는다. 조직 외부에서도 사용될 수 있다면, 조직의 웹 도메인 이름을 역순으로 사용한다. 웹 도메인 이름은 전세계적으로 유일하므로 패키지 이름의 충돌을 피할 수 있다. ex. com.google 예외적으로 표준 라이브러리와 선택적 패키지들은 java와 javax로 시작한다. 각 요소는 8자 이하의 짧은 단어 혹은 약어를 추천한다. ex. utilities보다는 util처럼 의미가 통하는 약어를 사용하는 것도 좋다. ex. 여러 단어로 구성된 이..

Language/Java

[effective java] 아이템 67. 최적화는 신중히 하라.

빠른 프로그램보다는 좋은 프로그램을 작성하라. : 아키텍처 수준에서의 성능 최적화를 위해 가독성이 좋고, 재사용성이 높고 수정이 용이한 코드를 작성하라. 프로그램의 아키텍처가 잘 설계되어 있으면, 개별 구성 요소의 성능 문제는 대체로 구성 요소 내부의 개별적인 최적화를 통해 해결할 수 있다. 즉, 정보 은닉 또는 캡슐화 원칙을 따르므로 각 요소를 독립적으로 설계하고 개선할 수 있게 만든다. 반면, 성능 문제가 아키텍처 수준에서 발생하는 경우, 일반적으로 전체 시스템을 변경해야 하며 이는 대규모의 재설계와 많은 리소스가 필요하다. 결론적으로, 좋은 프로그램을 작성하는 것이 중요하며, 이를 통해 개별 구성 요소를 독립적으로 최적화할 수 있는 유연성을 얻을 수 있다. 또한, 아키텍처 수준에서의 성능 최적화가 ..

Language/Java

[effective java] 아이템 66. 네이티브 메서드는 신중히 사용하라.

핵심 정리 네이티브 메소드는 메모리 관리, 성능, 이식성, 디버깅 등에서 문제를 일으킬 수 있으므로, 정말 꼭 필요한 경우에만 사용하자. ❔ 자바 네이티브 인터페이스(Java Native Interface, JNI) 더보기 JVM이 C, C++, 어셈블리와 같은 다른 프로그래밍 언어로 작성된 애플리케이션과 상호작용하는 데 사용하는 프로그래밍 프레임워크이다. JNI는 자바 코드가 네이티브 메소드를 호출하고, 네이티브 코드(즉, C/C++ 등의 언어로 작성된 코드)가 JVM 내에서 실행되는 자바 객체를 호출하는 기능을 제공한다. 네이티브 메소드의 전통적인 주요 쓰임새 레지스트리 같은 플랫폼 특화 기능 특정 플랫폼에만 특화된 기능을 사용하기 위해 네이티브 메소드를 사용할 수 있다. ex. 윈도우에만 제공하는 ..

Language/Java

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

핵심 정리 리플렉션은 동적인 프로그래밍을 지원하는 강력한 기능이지만, 단점이 많다. 따라서 객체 생성에만 사용하고, 생성한 객체를 이용할 때는 적절한 인터페이스나 컴파일타임에 알 수 있는 상위 클래스로 형변환해 사용해야 한다. 리플렉션(java.lang.reflect) 개념 자바에서 동적인 프로그래밍을 가능하게 해주는 강력한 기능이다. 프로그램이 실행 중에 자신의 구조를 동적으로 탐색하거나 조작하는 능력이다. 프로그램이 자신을 조사하고 수정할 수 있게 하는 기능이며, 이는 컴파일 시점에는 알 수 없는 클래스나 메소드에 대해 런타임에 동적으로 접근하는 것을 가능하게 한다. 클래스의 정보를 가져올 수 있다. 자바의 Class 객체를 통해 임의의 클래스에 접근할 수 있다. Class 객체는 해당 클래스의 메타..

Language/Java

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

핵심 정리 유연성을 위해 구체 클래스가 아닌 인터페이스 타입을 사용하자. 매개변수, 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. 예시 1 // 좋은 예. 인터페이스를 타입으로 사용했다. Set sonSet = new LinkedHashSet(); // 쉽게 구현 클래스를 교체할 수 있다. Set sonSet = new HashSet(); 예시 2 // 나쁜 예. 클래스를 타입으로 사용했다. LinkedHashSet sonSet = new LinkedHashSet(); 주의해야 할 점 : 원래의 클래스가 특정 메소드를 제공하고, 그 메소드를 사용하는 코드가 있다면, 새로운 클래스도 반드시 그 메소드를 제공해야 한다. 예시: LinkedHashSet은 순서를 가지는 반면, HashSet는 순서..

Language/Java

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

핵심 정리 문자열 변경이 잦은 경우 String(불변) 대신 StringBuilder(가변)를 사용하자. 문자열 연결 연산자(+)의 성능 문제 : 문자열 연결 연산자(+)로 문자열 n개를 잇는 시간은 n^2에 비례한다. 문자열은 불변 클래스이므로 두 문자열을 복사해야 하므로 성능 저하가 발생한다. 예시 1 // 문자열 연결을 잘못 사용한 예 - 느리다! public String statement() { String result = ""; for (int i = 0; i < numItems(); i++) { result += lineForItem(i); // 문자열 연결 } return result; } 변화가 잦을 경우 String 대신 StringBuilder를 사용하자. 예시 2 // StringBu..

Language/Java

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

핵심 정리 핵심은 데이터의 성격에 맞는 적절한 데이터 타입을 사용하라는 것이다. 적절한 데이터 타입이 없다면, 새로운 데이터 타입을 작성하는 것도 좋은 방법이다. 문자열(String) 사용에 대한 주의점 : 문자열을 다른 데이터 타입의 대용으로 사용하지 마라. 문자열은 다양한 데이터를 표현하는 데 편리하지만, 데이터가 원래 다른 타입(수치, 객체 등)일 경우에는 해당 타입을 직접 사용하는 것이 좋다. 예를 들어, 파일, 네트워크, 사용자 입력으로부터 데이터를 받을 때, 이 데이터가 숫자나 다른 타입(수치, 객체 등)일 경우에는 해당 타입을 직접 사용하는 것이 좋다. 즉, 숫자를 입력 받는 경우에는 문자열 대신 int, float, BigInteger와 같은 적절한 수치형 타입으로 변환해야 하며, 사용자 ..

JOYERIM
'Language/Java' 카테고리의 글 목록 (3 Page)