"Strings"에서 기본 자료형으로 변환할 때는 Parse가 쓰여야 합니다.

기본 자료형 값을 추출하기 위해, 문자열에서 boxed type을 쓰는 것 보다 parse 메소드를 사용하세요. 그게 더 명확하고 효율적입니다. 규칙을 어긴 코드 String myNum = "12.2"; float f = (new Float(myNum)).floatValue(); // 규칙을 어긴 코드; Float을 만들고 버립니다. 규칙을 준수한 해결책 String myNum = "12.2"; float f = Float.parseFloat(myNum); If you like SONARKUBE, don’t forget to give me a star. :star2: 원문으로 바로가기

더보기

"Garbage Collector"실행은 JVM에 의해서만 제어되어야 합니다.

System.gc() 또는 Runtime.getRuntime().gc() 를 호출하는 것은 다음과 같은 간단한 이유로 나쁜 생각입니다. 해당 동작이 공급 업체, 버전, 그리고 옵션에 의존적이기 때문에 JVM 내부에서 실행되는 것에 대해 정확하게 알 수 있는 방법이 없습니다. 호출 도중 전체 어플리케이션이 정지됩니까? -XX:DisableExplicitGC 옵션이 활성화 되어있습니까? JVM이 단순히 호출을 무시했습니까? System.gc()와 마찬가지로, runFinalization()을 호출하여 종료 보류중인 객체의 종료 메서드를 강제로 실행시킬 이유는 없습니다. 어플리케이션이 예측불가능한 함...

더보기

상수는 인터페이스에 정의되지 않아야 합니다.

Effective Java의 저자 Joshua Bloch에 따르면 상수 인터페이스 패턴은 잘못된 인터페이스 사용법입니다. 클래스가 내부적으로 상수를 사용하는 것은 구현 상세 사항입니다. 상수 인터페이스를 구현하는것은 세부 구현 정보가 클래스의 API로 노출됩니다. 클래스가 상수 인터페이스를 구현하는 것은 사용자에게는 영향이 없습니다. 사실 그것은 그들을 혼란스럽게 할 수 있습니다. 더 나쁜점으로는, 그것이 약속처럼 표현될 수 있습니다. 이후 릴리즈에서 해당 클래스는 더 이상 상수를 사용할 필요가 없도록 수정되더라도, 이진 호환성을 보장하기 위해 여전히 해당 인터페이스를 구현해야 합니다. 최종적으로 클래스...

더보기

래퍼 클래스가 "toString"이나 "compareTo"을 호출하기 위해 사용되어선 안됩니다.

String 변환을 하기 위해서나 compareTo 메소드만을 사용하기 위해서 기본 자료형의 래퍼 클래스를 임시로 사용하는 것은 비효율적입니다. 이런 방법 보다 기본 자료형의 래퍼 클래스에 존재하는 static 메소드인 toString 또는 compare 메소드를 사용해야 합니다. 규칙을 어긴 코드 new Integer(myInteger).toString(); // 규칙을 어긴 코드 Integer.valueOf(myInt).compareTo(0); // 규칙을 어긴 코드 규칙을 준수한 해결책 Integer.toString(myInteger); // 규칙을 준수한 해결책 Integer.co...

더보기

Synchronized 클래스인 Vector, Hashtable, Stack, StringBuffer를 사용하면 안 됩니다.

초창기 자바 API의 클래스들 중 하나인 Vector, Hashtable, StringBuffer 같은 클래스들은 thread-safe라는 목적을 달성하기 위해 sychronized하게 설계되었습니다. 하지만 불행히도 이러한 sychronized 컬랙션을 단일 스레드에서 사용한다면 경우에도 성능에 큰 문제를 끼칩니다. unsychronized한 대체품을 사용하는 것이 낫습니다. 권고하지 않음 권고 Vector ArrayList or LinkedList Stack Deque ...

더보기

같은 집합을 여러번 반복하는 것보다 하나로 합치는게 낫습니다.

같은 데이터 집합을 여러 번 반복하는 것은, 데이터의 크기에 상관없이 List이든, Set이든, 하나의 단일 반복문으로 합치는 것이 더 효율적으로 만드는데 도움이 될 수 있습니다. 규칙을 어긴 코드 public void doSomethingToAList(List<String> strings) { for (String str : strings) { doStep1(str); } for (String str : strings) { // 규칙을 어긴 코드 doStep2(str); } } 규칙을 준수한 해결책 public void doSomethingToAList(List&...

더보기

객체를 만드는 목적이 `getClass()`밖에 없다면 객체를 만들지 마세요.

객체를 만드는 목적이 getClass()를 이용하는 것이 다라면, 메모리와 사이클을 낭비하는 것입니다. 그 대신 훨씬 간단한 .class를 사용하세요. 규칙을 어긴 코드 MyObject myOb = new MyObject(); // 규칙을 어긴 코드 Class c = myOb.getClass(); 규칙을 준수한 해결책 Class c = MyObject.class; If you like SONARKUBE, don’t forget to give me a star. :star2: 원문으로 바로가기

더보기

Enum 값을 키 값으로 갖는 Map은 EnumMap을 사용하는게 좋습니다.

Map의 모든 키값이 Enum 값이라면 EnumMap을 대체해서 사용할 수 있습니다. 이 자료형은 간단한 배열을 기반으로한 자료구조를 사용하고 있기 때문에, 다른 집합들에 비해 훨씬 효율적입니다. 규칙을 어긴 코드 public class MyClass { public enum COLOR { RED, GREEN, BLUE, ORANGE; } public void mapMood() { Map<COLOR, String> moodMap = new HashMap<COLOR, String> (); } } 규칙을 준수한 해결책 public class MyClass ...

더보기