200===Dev Language/Java

자바 코드를 더 프로페셔널하게 작성하는 팁 💡

블로글러 2024. 10. 30. 23:18

안녕하세요! 오늘은 자바 코드를 더 전문가답게 작성하는 방법을 알아볼게요.

1. 의미 있는 이름 짓기 🏷️

Bad ❌

List<String> l = new ArrayList<>();
void p(String s) { ... }
int d = 7;

Good ✨

List<String> userEmails = new ArrayList<>();
void processPayment(String orderId) { ... }
int daysInWeek = 7;

이름만 봐도 무슨 의미인지 알 수 있죠?

  • 변수는 명사로
  • 메서드는 동사로
  • 약어 사용은 최소화

2. 불변성(Immutability) 활용하기 🔒

Bad ❌

public class User {
    private String name;
    public void setName(String name) { this.name = name; }
}

Good ✨

public class User {
    private final String name;
    public User(String name) { this.name = name; }
}

불변 객체의 장점:

  • 스레드 안전성 보장
  • 예측 가능한 동작
  • 버그 발생 가능성 감소

3. Optional 적극 활용 🎁

Bad ❌

User findUser(String id) {
    User user = userRepository.findById(id);
    if (user == null) {
        throw new RuntimeException("User not found");
    }
    return user;
}

Good ✨

Optional<User> findUser(String id) {
    return Optional.ofNullable(userRepository.findById(id))
        .orElseThrow(() -> new UserNotFoundException(id));
}

4. 스트림 API 활용 🌊

Bad ❌

List<String> getAdultNames(List<User> users) {
    List<String> result = new ArrayList<>();
    for (User user : users) {
        if (user.getAge() >= 18) {
            result.add(user.getName());
        }
    }
    return result;
}

Good ✨

List<String> getAdultNames(List<User> users) {
    return users.stream()
        .filter(user -> user.getAge() >= 18)
        .map(User::getName)
        .collect(Collectors.toList());
}

5. 예외 처리 개선 🎯

Bad ❌

try {
    // something
} catch (Exception e) {
    e.printStackTrace();
}

Good ✨

try {
    // something
} catch (SpecificException e) {
    log.error("Failed to process: {}", e.getMessage(), e);
    throw new BusinessException("Could not complete operation", e);
}

6. 빌더 패턴 사용 🏗️

Bad ❌

User user = new User();
user.setName("John");
user.setAge(25);
user.setEmail("john@example.com");

Good ✨

User user = User.builder()
    .name("John")
    .age(25)
    .email("john@example.com")
    .build();

7. 상수 관리 📌

Bad ❌

if (status.equals("ACTIVE")) { ... }

Good ✨

public enum UserStatus {
    ACTIVE, INACTIVE, SUSPENDED
}

if (status == UserStatus.ACTIVE) { ... }

실제 활용 예시 📱

@Slf4j
@Service
public class UserService {
    private final UserRepository userRepository;

    public List<UserDto> getActiveAdults() {
        return userRepository.findAll().stream()
            .filter(user -> user.getAge() >= 18)
            .filter(user -> user.getStatus() == UserStatus.ACTIVE)
            .map(this::convertToDto)
            .collect(Collectors.toUnmodifiableList());
    }

    private UserDto convertToDto(User user) {
        return UserDto.builder()
            .id(user.getId())
            .name(user.getName())
            .email(user.getEmail())
            .build();
    }
}

마치며 🎁

코드는 한 번 작성하고 여러 번 읽힌다는 점을 기억하세요!
위의 팁들을 활용하면 더 읽기 쉽고, 유지보수하기 좋은 코드를 작성할 수 있습니다.


더 궁금하신 점이 있다면 댓글로 남겨주세요! 😊

728x90