728x90
반응형
실무에 바로 적용 가능한 자바 꿀팁: 코드 예제와 함께 깊이 있게 파헤치기
자바(Java)는 여전히 전 세계에서 가장 널리 쓰이는 객체지향 프로그래밍 언어 중 하나다. 하지만 자바가 아무리 안정적이고 강력하더라도, 매일 반복되는 업무 속에서 코드를 효율적이고 깔끔하게 작성하는 방법을 고민하지 않으면 유지보수 지옥에 빠지기 십상이다. 오늘은 자바를 더 생산적이고 우아하게 다루기 위한 실전 꿀팁들을 소개한다.
1. Optional 클래스를 적극적으로 활용하자
NullPointerException은 자바 개발자들의 영원한 숙제다. 이를 피하기 위해 Java 8부터 등장한 Optional 클래스를 적극적으로 활용하자.
예제:
public class User {
private String email;
public Optional<String> getEmail() {
return Optional.ofNullable(email);
}
}
사용 예:
User user = getUser();
String email = user.getEmail().orElse("이메일 없음");
포인트:
- Optional은 메서드 체이닝에도 매우 유용하다.
- 다만 무조건 Optional을 필드에 쓰는 것은 오히려 퍼포먼스를 해칠 수 있음. 리턴값에만 사용하는 것이 일반적.
2. try-with-resources로 자원 자동 관리
자바 7 이상에서는 try-with-resources 문법을 사용하여 자원을 자동으로 해제할 수 있다.
예제:
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
장점:
- finally 블록 없이도 자원이 자동으로 해제됨.
- 코드를 훨씬 깔끔하게 유지할 수 있다.
3. record를 활용한 간결한 데이터 구조 표현 (Java 14 이상)
Java 14부터는 record를 사용해 DTO 같은 클래스 구조를 간결하게 정의할 수 있다.
예제:
public record Person(String name, int age) {}
사용 예:
Person p = new Person("홍길동", 30);
System.out.println(p.name()); // 홍길동
장점:
- equals, hashCode, toString 자동 생성.
- DTO, VO, 이벤트 모델 등에 매우 유용함.
4. 스트림(Stream)을 사용한 데이터 처리
자바의 Stream API는 대량 데이터 처리에 탁월한 가독성과 성능을 제공한다.
예제:
List<String> names = List.of("Kim", "Lee", "Park", "Choi");
List<String> filtered = names.stream()
.filter(name -> name.startsWith("K"))
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(filtered); // [KIM]
팁:
- peek()를 활용하면 디버깅에도 매우 유용하다.
- 성능을 위해 parallelStream()도 고려할 수 있지만 상황에 따라 주의해야 함.
5. Lombok으로 코드 줄이기
Lombok은 자바 코드에서 반복되는 getter, setter, toString, equals, hashCode 등을 자동으로 생성해준다.
예제:
import lombok.Data;
@Data
public class Book {
private String title;
private String author;
}
주의사항:
- 빌드 툴이나 IDE에서 lombok 플러그인이 설치되어 있어야 함.
- 디버깅 시 가시성이 떨어질 수 있으므로 팀 합의가 중요함.
6. 커스텀 어노테이션을 활용한 코드 정리
자바에서는 어노테이션을 직접 정의할 수 있으며, 반복되는 패턴을 간결하게 만들 수 있다.
예제:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LogExecutionTime {}
AOP와 함께 사용하면 다음과 같이 활용 가능:
@LogExecutionTime
public void process() {
// 실행 시간 측정이 필요한 로직
}
7. LocalDate와 DateTimeFormatter 사용
java.time 패키지를 활용하면 날짜 관련 연산이 훨씬 안전하고 명확하다.
예제:
LocalDate today = LocalDate.now();
LocalDate nextWeek = today.plusWeeks(1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
System.out.println("다음 주 날짜: " + nextWeek.format(formatter));
8. 예외 처리의 정석: 커스텀 예외 만들기
기본 예외만 쓰지 말고, 도메인 맞춤형 커스텀 예외를 만들어라.
public class InsufficientBalanceException extends RuntimeException {
public InsufficientBalanceException(String message) {
super(message);
}
}
사용 예:
if (balance < amount) {
throw new InsufficientBalanceException("잔액 부족");
}
장점:
- 에러 코드 관리가 명확해지고 로깅/트래킹도 쉬워진다.
728x90
반응형
'Programming' 카테고리의 다른 글
자바 스프링 실무 꿀팁 모음 – 실전 예제 중심으로 배우는 생산성 향상 기술들 (0) | 2025.04.14 |
---|---|
일론 머스크의 코딩 공부법 (0) | 2025.04.10 |
세계에서 인기 있는 프로그래밍 언어 TOP 5 (0) | 2025.04.09 |