반응형

JAVA

    규칙 58 복구가능 상태에는 점검지정 예외를 사용하고, 프로그래밍 오류에는 실행시점 예외를 이용하라.

    자바에는 몇 가지에 throwable을 제공한다. 점검지정 예외 (checked error) 컴파일 시점에 예외가 발생하는 부분으로 컴파일 시에 에러를 처리하는 코드를 삽입하지 않으면 컴파일이 되지 않는다. 12345678910public void ioOperation(boolean isResourceAvailable) { try { if (!isResourceAvailable) { throw new IOException(); } } catch(IOException e) { // Handle caught exceptions. }} Colored by Color Scriptercs unchecked error 컴파일 시점에 체크되지 않는 에러 실생시점 예외(runtime exception)와 오류(erro..

    규칙 57 예외는 예외적 상황에만 사용하라.

    예외는 잘 사용하면 프로그램의 가독성, 안전성, 유지보수성을 모두 향상시킬 수 있다. 그러나 제대로 사용하지 않으면 반대 효과를 낼 수있다. 다음의 예를 보자. 12345678910111213141516171819202122232425262728public class Main { public static void main(String args[]) { int i = 0; Test[] data = new Test[] {new Test("t1"), new Test("t2")}; try { while(true) { System.out.println(data[i++].getData()); } } catch (ArrayIndexOutOfBoundsException ex) { } } static class Test..

    규칙 56 - 일반적으로 통용되는 작명 관습을 따르라

    자바의 작명관습은 두 가지 범주로 나눌 수 있다. 철자. -> 패키지, 클래스, 인터페이스, 메서드, 필드 그리고 자료형 변수에 관한 것 -> 아주 그럴듯한 이유가 없이 이 규칙을 어겨서는 안 된다. 1). 패키지 -> 마침표를 구분점으로 사용하는 계층적 이름 이어야 한다. -> 각각의 컴포넌트는 알파벳 소문자로 구성하고, 숫자는 거의 사용하면 안된다. -> 패키지 시작은 회사 조직의 도메인으로 시작한다. com.wedul -> 패키지명 컴포넌트는 짧아야 하며, 8자리 이하여야 한다. -> 약어를 사용하여 의미를 충분히 전달할 수 있어야한다. 2). 클래스, 인터페이스, Enum -> 하나이상의 단어로 구성된다. -> 각 첫 글자는 대문자로 시작해야 하며 널리 사용 되는 약어를 제외하고는 약어를 사용해서..

    규칙 55 - 신중하게 최적화하라

    모든 프로그래머가 알아둬야 하는 최적화에 관련된 격언이 있다. 1. 맹목적인 어리석음을 비롯한 다른 어떤 이유보다도, 효율성이라는 이름으로 저질러지는 죄악이 더 많다. 2. 97%는 효율성을 잊어버려라. 섣부른 최적화는 모든 악의 근원이다. 그리고 프로그램을 작성하면서 기준을 삼아야 할 내용에 대해 소개한다. [기준] 빠른 프로그램을 만들려고 처음부터 노력하지말고, 좋은 프로그램을 만들려 노력하라. -> 좋은 구조를 가진 프로그램은 빠른게 변경하는데 어렵지 않다. -> 정보은닉의 원칙을 지키는 것이 좋은 구조를 갖는것에 첫 번째 항목이다. 설계를 할 떄는 성능을 제약할 가능성이 있는 결정들을 피하라. -> 특히 통신 API, 프로토콜 정의서는 변경하기 어렵기 때문에, 신중하게 코딩해야한다. API를 설계..

    규칙 54 - 네이티브 메서드는 신중하게 사용하라.

    자바의 네이티브 인터페이스 (JNI)는 C, C++ 등의 네이티브 프로그래밍 언어로 작성된 네이티브 메서드를 호출할 때 사용한다. 네이티브 메서드가 수행하는 계산은 네이티브 언어로 실행되며, 자바언어로 전달된다. 네이티브 기능에 경우 기존에 자바가 많은 발전이 있기전에 기존에 만들어져있는 기능등을 사용하기 위해서 자주 사용되었다. 하지만 자바가 발전하면서 대부분의 기능들이 자바에서 문제없이 사용이 가능하게 되었다. 네이티브 메서드를 사용하는 것 보다, 자바로 새로 구현된 기능을 사용하는 것이 성능이 더 빠르다. 그 이유는 자바에서 사용하는 JVM 속도가 훨씬 개선되어, 1.3 이후부터는 네이티브 메서드를 사용할 필요가 없다. 또한 네이티브 메서드에서 가장 심각한 문제는 안전하지 않기 때문에, 메모리 훼손..

    규칙 53 - 리플렉션 대신 인터페이스를 이용하라

    자바에서 제공하는 리필렉션 기능을 이용하면 메모리에 로드된 클래스 정보를 바탕으로 필드 정보를 가져오거나, 메서드를 실행시키고 객체를 만드는 등 다양하게 조작을 할 수 있다. 하지만 여기서 이런 리플렉션 기능에는 단점이 존재한다. 1. 컴파일 시점에 자료형을 검사하면서 얻을 수 있는 예외 처리에 대한 이점을 포기해야한다. 또한 접근할 수 없는 메서드를 호출하게 되는 경우에는 오류를 발생시킬 수 있다. 2. 리플렉션 기능을 이용하면 코드가 가독성이 떨어진다. 3. 리플렉션을 통한 메서드 호출은 일반적인 방식 보다 속도가 2 ~ 50배 정도 늦어진다. 사실 리플렉션은 컴포넌트 기반 응용 프로그램 저작 도구를 위해 개발 되었기 때문에, 일반적인 프로그램은 프로그램 실행 중에 리플렉션을 통해 객체를 이용하려 하..

    규칙 52 - 객체를 참조할 때는 그 인터페이스를 사용하라.

    규칙 40에서 클래스 대신 인터페이스로 자료형을 사용하는 것에 대해 이야기 했었다. 더 나아가 객체를 참조할 때 인터페이스를 사용하는 것이 좋은 이유에 대해 설명하겠다. 예를 들어 Vector 클래스를 예로 들어보자. 참고로 Vector는 List 인터페이스를 구현해서 제작되었다 // List 인터페이스를 참조 List a = new Vector(); // Vector 클래스를 참조 Vector b = new Vector();위의 경우를 보면 하나는 List 인터페이스를 하나는 Vector 클래스를 참조하였다. 여기서 만약 위에 객체를 Vector가 아닌 ArrayList로 바꾸려고 한다면, 인터페이스를 참조한 위에 경우는 바로 변경이 가능하지만 아래의 경우에는 변경이 불가능하다. 즉, 인터페이스를 사용..

    규칙 51 - 문자열 연결 시 성능에 주의하라

    문자열 연결시에 + 를 사용하여 연결하면 편리하고 좋다. 한줄 정도나 몇 개 정도의 객체를 문자열로 변환할 때는 사용해도 무관하다. 하지만 연결하는 것이 많으면 성능에 문제가 발생한다. n개의 문자열에 연결 연산자를 반복 적용해서 연결하는 데 소요되는 시간은 n의 제곱에 비례한다. -> 왜냐하면, 문자열은 변경불가능한 객체이기 때문에 새로 만들기위해서 두 개의 문자열을 붙힐 때 기준에 문자열을 모두 복사한다. 만족스런 성능을 위해서는 stringBuilder나 동기화가 적용된 StringBuffer를 사용하라. 출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(2014.9.1), 규칙50 인용.

    규칙 50 - 객체화된 기본 자료형 대신 기본 자료형을 이용하라.

    기본적으로 문자열 형태를 많이쓰기 때문에 숫자, 불리언 값 들도 문자열로 받은 경우에는 그대로 가지고 있는 경우가 많다. 하지만 문자열로 가지고 있어야 하는 것은 본래 문자열인 데이터만 그렇게 가지고 있어야 하고 자신에 맞는 데이터 타입으로 바꾸어서 가지고 있어야 한다. 이는 당연한 지침인데 잘 지켜지지 않는다.(나도 마찬가지다..) 더 좋은 자료형이 있거나 만들수 있을 때는 객체를 문자열로 표현하는 것을 피하는 것이 좋다. 왜냐하면 제대로 쓰지 못할 경우 문자열은 다른 자료형에 비해 다루기 성가시고, 유연성도 떨어지며, 느리고 오류 발생 가능성도 높기 때문이다. 출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(2014.9.1), 규칙50 인용.

    규칙 49 - 객체화된 기본 자료형 대신 기본 자료형을 이용하라.

    자바에는 기본 자료형인 int, double, boolean등이 있고, 객체화된 기본 자료형인 Integer, Double, Boolean등이 있다. 자바 1.5부터 autoboxing과 auto-unboxing이 되면서 두개의 차이를 희미하게 했다. 하지만 이 두가지 자료형의 차이점이 3가지가 있다. 1. 기본자료형은 값만 가지지만 객체화된 기본자료형은 값 이외에 identity을 가진다. -> 그렇기 때문에 객체화된 기본자료형은 값이 같더라도 서로 다른 identity일 수 있다. 2. 기본 자료형은 완전한 값이지만 객체화된 기본자료형은 null이라는 값이 하나 더 있다. 3. 기본자료형이 시간이나 공간 요구량 측면에서 더욱 효율적이다. 결론은 자동 객체화를 통해 편하게 사용할 수 있지만, 객체화된 ..

반응형