🕊️ [Medium] 자바 개발자가 피해야 하는 11가지 실수 (2)

7. 검색 전 데이터 존재 여부를 확인하지 않기

Bad Practice: 객체를 가져오기 전 map에 id가 있는지 미리 확인합니다. 존재하지 않는다면 null 값을 반환하기 때문에 미리 체크하는 것은 불필요합니다.

public static String findNameById(Map<Integer, String> idNameMap, int id) {
	if(idNameMap.containsKey(id)) {
    	return idNameMap.get(id);
    } else {
    	return "Unknown";
    }
}

Good Practice: 즉시 map에서 가져온 후 null인지 아닌지 체크하여 존재 여부를 확인합니다.

public static String findNameById(Map<Integer, String> idNameMap, int id) {
	String name = idNameMap.get(id);
	if(name != null) {
    	return idNameMap.get(id);
    } else {
    	return "Unknown";
    }
}

 

8. 배열의 효율적인 변환

Bad Practice: 

- 리스트의 사이즈가 먼저 계산된 후 새로운 배열이 생성됩니다.

- 큰 컬렉션일 수록 성능에 영향을 미칠 수 있습니다.

List<String> stringList = new ArrayList<>();
stringList.add("apple");
stringList.add("banana");
stringList.add("orange");

String[] array = stringList.toArray(new String[stringList.size()]);

Good Practice:

- 빈 배열과 함께 toArray 메서드가 호출됩니다.

- 리스트의 크기를 계산할 필요가 없으며 toArray 메서드가 내부적으로 배열 크기를 조정할 수 있으므로 성능이 향상되고 코드가 깨끗해집니다.

List<String> stringList = new ArrayList<>();
stringList.add("apple");
stringList.add("banana");
stringList.add("orange");

String[] array = stringList.toArray(new String[0]);

 

9. 기본 메서드 사용

Bad Practice: logError와 같은 새로운 메서드를 인터페이스에 추가해야 하는 경우 모든 구현 클래스를 수정해야 하므로 코드 관리 문제가 발생할 수 있습니다. 

interface Logger {
	void log(String message);
}

class FileLogger implements Logger {
	@Override
    public void log(String message) {
    	System.out.println("Logging to file: " + message);
    }
}

class ConsoleLogger implements Logger {
	@Override
    public void log(String message) {
    	System.out.println("Logging to file: " + message);
	}
}

Good Practice: Logger 인터페이스가 기본 메서드를 정의하여 이 메서드는 로그 오류에 대한 기본 구현을 제공합니다. 구현 클래스는 수정할 필요 없이 이 기본 구현을 자동으로 상속합니다.

interface Logger {
	default void log(String message) {
    	System.out.println("Logging to file: " + message);
    }
}

class FileLogger implements Logger {
	@Override
    public void log(String message);
}

class ConsoleLogger implements Logger {
	@Override
    public void log(String message);
}

 

10. Date/Time API 사용

Bad Practice: 레거시 Date 클래스를 사용합니다.

- 이 클래스는 변형 가능성, 메서드 명확성 부족 등 다양한 문제가 있습니다.

- getYear(), getMonth()와 같은 이 클래스의 대부분의 메서드는 사용되지 않습니다.

import java.util.Date;

public class DateUtil {
	public static void main(String[] args) {
    	Date currentDate = new Date();
        System.out.println("Current date: " + currentDate);
	}
}

Good Practice: Date/Time API를 사용합니다.

import java.time.LocalDate;

public class DateUtil {
	public static void main(String[] args) {
    	LocalDate currentDate = LocalDate.now();
        System.out.println("Current date: " + currentDate);
	}
}

 

11. 제네릭 사용

Bad Pracice: 다른 타입의 데이터가 리스트에 혼합되어 저장됩니다. 런타임 에러를 유발할 수 있습니다.

ArrayList list = new ArrayList();
list.add(10);
list.add("Hello");

Good Practice: 타입 안정성을 보장하는 제네릭을 사용합니다.

ArrayList list = new ArrayList<>();
list.add(10);
// list.add("Hello"); // Compile-time error: incompatible types


번역: [https://ducktopia.tistory.com/125]

출처

15 + 11 Mistakes Every Java Developer MUST avoid TODAY

Medium

15 + 11 Mistakes Every Java Developer MUST avoid TODAY

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 5월 22일 오후 12:37

 • 

저장 236조회 12,496

댓글 3

함께 읽은 게시물

🌎 해외에서 일하면 뭐가 좋을까요❓

외국어를 사용해서? 돈을 더 많이 벌어서? 새로운 기회가 많아서? 글로벌 경력을 쌓을 수 있어서?

... 더 보기

여러분 PostgreSQL 프로시저는 Python, JavaScript은 물론 Perl, Java, Lua 등도 사용할 수 있답니다~* 대부분 구식🤭 MySQL만 쓰셔서 모르시겠지만.. (도망간다)


서버엔지니어의 시대적 고민

... 더 보기

< 서비스를 중독성 있게 만드는 결정적 원리 >

1. 진통제이면서 비타민이어야 한다.

... 더 보기

Longest Common Subsequence 자바스크립트 풀이

... 더 보기

Longest Common Subsequence | 알고달레

알고달레

Longest Common Subsequence | 알고달레

한때 천만원에 거래되었던 Manus, Bedrock 무료 오픈소스로 공개

... 더 보기

LinkedIn

lnkd.in

LinkedIn

 • 

저장 19 • 조회 1,594