안녕하세요! 오늘은 자바 코드를 더 전문가답게 작성하는 방법을 알아볼게요.
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
'200===Dev Language > Java' 카테고리의 다른 글
Java의 함수형 인터페이스 완벽 가이드 🎯 (0) | 2024.10.30 |
---|---|
자바 8과 자바 18의 주요 차이점 (0) | 2024.06.27 |
JVM Garbage Collection (0) | 2024.06.08 |
JVM Introduced (0) | 2024.06.08 |
Convert LinkedHashMap to String with Separator (0) | 2024.06.04 |