해결된 질문
작성
·
166
·
수정됨
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요?
[질문 내용]
private static void run(TaskScheduler scheduler) {
while (scheduler.getRemainingTasksSize() > 0) {
scheduler.processNextTask();
}
}
여기에서 while (scheduler.getRemainingTasksSize() > 0)로 이미 task의 여부를 판단할 수 있는 조건 처리가 있는데
public void processNextTask() {
Task processTask = tasks.poll();
if (processTask != null) {
processTask.execute();
}
}
내부 실행 메서드에서도 한번 더 task가 있는지 null 체크를 했습니다.
제가 풀었을 때는 이미 제약이 걸렸다고 생각하여
null 체크까지는 해주지 않고 풀어서 질문 남깁니다.
이미 이전에 비슷한 제약이 걸려있는데,
내부 메서드에서도 한번 더 제약을 거는 이유가 궁금합니다.
아니면 다른 예외가 발생할 수 있는 케이스가 있는건가요?
답변 2
2
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문에 대한 답변을 드리겠습니다. 코드의 안정성과 가독성을 위해 중복된 조건 검사를 수행하는 것은 흔한 프로그래밍 관행 중 하나입니다. 주어진 예시에서는, run
메소드에서는 scheduler
의 남은 태스크가 있는지를 전체적으로 확인하고 있습니다. 이는 전체 태스크 처리의 외부 루프 조건으로 작용합니다. 하지만, processNextTask
메소드 내부에서 태스크의 존재 여부를 확인하는 것은 해당 메소드가 독립적으로 호출되어 사용될 경우를 대비한 것일 수 있습니다.
즉, processNextTask
는 다른 맥락에서 개별적으로 호출될 수 있으며, 이런 경우에도 안정적으로 함수가 실행될 수 있도록 하기 위한 추가 검사를 포함하는 것이 일반적입니다. 이는 특히 큰 프로젝트나 여러 사람이 협업하는 경우, 예기치 않은 상황에서 메소드의 안정적 실행을 보장하는 데 도움이 됩니다.
결국 이런 방식은 코드를 더 안전하게 만들고, 다른 개발자가 코드를 이해하기 쉽게 만드는 장점이 있습니다. 또한, 특정 메소드가 다른 곳에서 어떻게 사용될지, 또는 미래에 어떻게 변할지 예측하기 어렵기 때문에, 이런 식의 방어적 프로그래밍은 오류를 방지하는 데 중요한 역할을 할 수 있습니다.
내부 메서드에서의 추가적인 조건 검사는 다음과 같은 이유로 필요할 수 있습니다:
- 메소드가 공개적으로 노출되어 외부에서 독립적으로 호출될 가능성이 있는 경우
- 코드 유지보수 과정에서 메소드 호출 구조가 변경되어 run
메소드의 조건 검사만으로는 충분하지 않을 경우
- 멀티스레드 환경에서 경쟁 조건(race condition) 또는 다른 타이밍 이슈로 인해 tasks
의 상태가 예상과 다르게 변경될 가능성이 있는 경우
이처럼, 개발 과정에서의 여러 가능성을 고려하여 내부 메서드에서 추가적인 제약을 거는 것은 좋은 습관입니다.