- if 문으로 해보려다가 계속 안 돼서.. 아마 {} 쓰기 귀찮아서 그냥 했다가 조건 안맞았던듯.
- 결국 gpt 한테 물어봤고 switch 문의 존재에 대해 깨달음. 왜.. 항상 switch 문은 기억이 안날까???
[Java]
String condition = ineq + eq;
switch (condition) {
case ">=":
return n >= m ? 1 : 0;
case "<=":
return n <= m ? 1 : 0;
case ">!":
return n > m ? 1 : 0;
case "<!":
return n < m ? 1 : 0;
default:
return 0;
}
가독성과 확장성이 좋지만 각 조건에서 유사한 코드가 반복됨.
Map<String, BiFunction<Integer, Integer, Boolean>> functions = Map.of(
">=", (a, b) -> a >= b,
"<=", (a, b) -> a <= b,
">!", (a, b) -> a > b,
"<!", (a, b) -> a < b
);
return functions.get(ineq + eq).apply(n, m) ? 1 : 0;
비교 함수를 Map에 저장하여 코드가 깔끔하고 확장성이 좋음. Map을 사용하여 조건이 유효한지 쉽게 확인 가능.
BiFunction<Integer, Integer, Boolean> function = functions.get(ineq + eq);
if (function == null) {
throw new IllegalArgumentException("Invalid condition: " + ineq + eq);
}
유효하지 않은 조건에 대한 처리를 포함하면 완벽.
https://developer-talk.tistory.com/716#google_vignette
boolean answer = false;
if (ineq.equals(">") && eq.equals("="))
answer = n >= m;
else if (ineq.equals("<") && eq.equals("="))
answer = n <= m;
else if (ineq.equals(">") && eq.equals("!"))
answer = n > m;
else
answer = n < m;
return answer ? 1 : 0;
직관성과 가독성이 좋으나 확장성 부족. 코드가 중복됨.
return (">".equals(ineq) ? n > m : n < m) || ("=".equals(eq) ? n == m : false) ? 1 : 0;
간결하지만 가독성과 확장성이 부족함. 조건이 추가될 경우 논리적 오류 발생 가능성 높음.