if (check1()) {
if (check2()) {
....
}
}
if (!check1()) {
return; <--- 필요
}
if (!check1()) {
}
...
🤔기존 if 문의 반대 조건을 확인하게 하고 if문을 충족한다면 통과 그렇지 않다면 조기에 return하는 방법을 사용하면 보다 깔끔하게 코드를 작성 할 수 있습니다. (return을 하지 않는다면 아래 코드들이 사용 되므로 return을 해주셔야 합니다. for문 안이라면 break 또는 continue를 사용하시면 됩니다.)
if (!name.status || name.length < 0) {
}
if (isEmptyName()) {
}
boolean isEmptyName() {
return !name.status || name.length < 0
}
🫠기존에는 !, <등을 사용하여 해당 조건이 아닌 경우를 확인하게 하였는데 긍정문에 비해 부정문은 한눈에 파악하기 힘들다는 단점이 있습니다.
이를 isEmptyName()이라는 메소드로 추출하여 사용한다면 메소드의 이름만으로 이 함수가 name이 비어있는지를 체크하는 로직이라는 것을 알 수 있습니다.
JavaScript를 기준으로 작성하였습니다.
if (errorValue.code === 1) {
console.log(errorValue.message);
}
😑사용자 정의 객체를 활용하면 다양한 에러 상황에 유연하게 대처할 수 있습니다. 개발자가 직접 에러 메시지나 에러 코드를 설정할 수 있기 때문에, 특정한 조건에 맞는 사용자 정의 로직을 적용하기 용이합니다.
단점: 하지만 위의 예시처럼, 에러를 판별하기 위한 추가적인 if문이 필요하게 됩니다. 이로 인해 코드가 복잡해질 수 있습니다.
const errorValue = new Error("error!!!");
error.code = 1;
throw error;
😎Error
객체를 직접 생성하여 throw
키워드를 사용하면, 에러 처리 로직이 더 간결해집니다. 이 방법을 사용하면, 기존에 존재하는 에러 처리 방식을 이용하면서도 사용자 정의 정보(예: code)를 추가할 수 있습니다.
장점: 코드가 간결해지고, 표준 Error
객체를 활용하여 일관된 에러 처리가 가능합니다.
🤓기존에는 사용자의 유형에 따라 로직을 분기하는 if-else if 문을 사용하고 있습니다. 이는 가독성도 떨어뜨리고 유지보수에도 어려움을 줍니다. 대안으로 팩토리 메소드 패턴을 사용하여 이 문제를 해결할 수 있습니다.
if (enter(user, "student")) {
// 학생 로직
} else if (enter(user, "parent")) {
// 부모 로직
} else if (enter(user, "teacher")) {
// 교사 로직
}
public class UserFactory {
public static UserBehavior create(String type) {
if ("student".equals(type)) {
return new StudentBehavior();
} else if ("parent".equals(type)) {
return new ParentBehavior();
} else if ("teacher".equals(type)) {
return new TeacherBehavior();
} else {
throw new IllegalArgumentException("Invalid user type");
}
}
}
// 위 클래스 또한 더 좋게 리팩토링 할 수 있으나 여기서는
// 이러한 컨셉이구나라고 생각하시면 될 것 같습니다.
UserFactory user = UserFactory.create(userType);
user.enter();
팩토리 메소드를 추가함으로써 if~else 로직을 지우고 본 코드에는 팩토리 클래스 하나만 남길 수 있게 되었습니다.
😭이에 대한 답변은 상황에 따라 다를 수 있습니다. 예를 들어, 시간이 부족한 상황에서 코드를 파악해야 할 경우, 수정 전 코드를 보면 if-else 구문 안에 있는 로직까지 전부 확인하면서 파악을 해야 했다면, 수정 후 코드에서는 로직을 신경 쓸 필요 없이 "user를 만드는 로직이구나"라고만 파악을 하면 되기에 더 빠르게 코드를 파악할 수 있습니다. 필요한 경우 해당 로직을 들어가서 확인하면 되기에 전보다 더 나은 코드라고 할 수 있습니다.