반응형
1. Nulls와 Optionals
Bad Practice: 메서드에서 바로 null을 리턴하는 건 NPE를 유발할 수 있습니다.
public String getString() {
return null;
}
Good Practice: null에 대한 명확한 핸들링과 에러 방지를 위해 Optional을 사용합니다.
public Optional<String> getString() {
return Optional.empty();
}
2. String.valueOf()로 String 변환
Bad Practice: + 연산자를 사용해 문자열을 합칩니다.
double d = 3.14525;
String s = "" + d;
Good Practice: 내장 메서드를 활용합니다.
double d = 3.14245;
String s = String.valueOf(d);
3. array를 복사할 때 Arrays.copyOf()
Bad Practice: 정석적으로 array를 복사합니다.
int[] sourceArray = {1,2,3,4,5};
int[] targetArray = new int[sourceArray.length];
for (int i = 0; i< sourceArray.length; i++) {
targetArray[i] = sourceArray[i];
}
Good Practice: Arrays.copyOf() 메서드를 사용합니다.
int[] sourceArray = {1,2,3,4,5};
int[] targetArray = Arrays.copyOf(sourceArray, sourceArray.length);
4. 컬렉션이 비어있는지 체크하기 위해 isEmpty()
Bad Practice: length()나 size()로 string이나 컬렉션이 비어있는지 체크합니다.
String text = "Hello, World!";
if(text.length() == 0) {
// Do something
}
Good Practice: isEmpty()로 string이나 컬렉션이 비어있는지 체크합니다.
String text = "Hello, World!";
if(text.isEmpty()) {
// Do something
}
5. Concurrent Modification Exception 방지
Bad Practice: 리스트를 순회하고 있는 동안 요소를 제거하여 ConcurrentModificationException을 일으킵니다.
List<String> words = new ArrayList<>();
words.add("A");
words.add("B");
words.add("C");
for(String word : words) {
if (word.equals("A")) {
words.remove(word);
}
}
Good Practice: iterator remove 메서드나 removeIf() 메서드를 사용합니다.
List<String> words = new ArrayList<>();
words.add("A");
words.add("B");
words.add("C");
Iterator<String> iterator = words.iterator();
while (iterator.hasNext()) {
String word = iterator.next();
if (word.equals("A")) {
iterator.remove(); // Use iterator's remove method to safely remove elements
}
}
System.out.println(words); // Output: [B, C]
6. 정규표현식 사전 컴파일
Bad Practice: 런타임 시에 정규표현식을 컴파일합니다.
String text = "Hello, World!";
if(text.matches("Hello.*")) {
System.out.println("Matches!");
}
String replaced = text.replaceAll("\\s", "");
Good Practice: 정규표현식을 사전컴파일하고 재사용합니다.
final Pattern PATTERN1 = Pattern.compile("Hello.*");
final Pattern PATTERN2 = Pattern.compile("\\s");
String text = "Hello, World!";
if(PATTERN1.matcher(text).matches()) {
System.out.println("Matches!");
}
String replaced = PATTERN2.matcher(text).replaceAll("");
출처
https://levelup.gitconnected.com/15-11-mistakes-every-java-developer-must-avoid-today-ccd7e681a970
반응형
'레퍼런스' 카테고리의 다른 글
[Medium] 모든 엔지니어가 필요한 15개의 시간 절약 사이트 (0) | 2024.06.06 |
---|---|
[Medium] 자바 개발자가 피해야 하는 11가지 실수 (2) (0) | 2024.05.22 |
[Medium] 300개 이상의 리트코드 문제를 해결한 방법 (0) | 2024.04.24 |
[Medium] 개발 세계에서 인기 있는 API 아키텍처 스타일 (0) | 2024.04.17 |
[Medium] 2024 버클리즈 Java SpringBoot 인터뷰 질문 (3) (0) | 2024.04.10 |