| name | code-quality |
| description | 코드 품질 가이드, 클린 코드 원칙, 리팩토링 패턴 |
Code Quality Guide
클린 코드 원칙
1. 의미 있는 이름
int d = getCurrentDate();
List<User> arr = users.stream().filter(u -> u.a > 18).toList();
int currentDate = getCurrentDate();
List<User> adultUsers = users.stream().filter(user -> user.age > 18).toList();
2. 함수는 작게, 한 가지 일만
public void processUser(User user) {
if (user.getEmail() == null) {
throw new IllegalArgumentException("Email required");
}
user.setEmail(user.getEmail().toLowerCase());
userRepository.save(user);
emailService.sendWelcome(user);
}
public User createUser(UserRequest request) {
User user = validateAndNormalize(request);
User savedUser = userRepository.save(user);
emailService.sendWelcome(savedUser);
return savedUser;
}
3. 주석보다 코드로 표현
if (user.getAge() >= 18) { ... }
if (isAdult(user)) { ... }
private boolean isAdult(User user) {
final int ADULT_AGE = 18;
return user.getAge() >= ADULT_AGE;
}
Reactive Streams 특화 코드 품질
상태 관리
private boolean cancelled = false;
private long requested = 0;
private final AtomicBoolean cancelled = new AtomicBoolean(false);
private final AtomicLong requested = new AtomicLong(0);
규약 주석
@Override
public void onSubscribe(Subscription s) {
if (this.subscription != null) {
s.cancel();
return;
}
this.subscription = s;
}
시그널 순서 검증
private void signalNext(T item) {
if (state.get() != State.ACTIVE) {
return;
}
subscriber.onNext(item);
}
SOLID 원칙
Single Responsibility
class PublisherWithLogging<T> implements Publisher<T> {
void subscribe(Subscriber<T> s) { ... }
void log(String message) { ... }
}
class SimplePublisher<T> implements Publisher<T> { ... }
class LoggingSubscriber<T> implements Subscriber<T> { ... }
Open/Closed
Publisher<Integer> result = source
.map(x -> x * 2)
.filter(x -> x > 10)
.take(5);
코드 스멜 체크리스트
| 스멜 | 증상 | Reactive에서의 해결 |
|---|
| Long Method | 50줄 이상 | Operator로 분리 |
| Duplicate Code | 중복 로직 | 공통 Operator 추출 |
| Magic Numbers | 의미 없는 숫자 | 상수로 정의 |
| Mutable State | 변경 가능한 상태 | Atomic 또는 Immutable |
관련 스킬
testing: 테스트 작성 전략
debugging: 에러 추적 및 디버깅
reactive-spec: Reactive Streams 규약