인프런 커뮤니티 질문&답변

kyk님의 프로필 이미지
kyk

작성한 질문수

김영한의 실전 자바 - 중급 2편

문제와 풀이4 - Queue

제약 관련 질문

해결된 질문

작성

·

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

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. kyk님

processNextTask() 메서드는 여러곳에서 사용될 수 있다고 생각해보시면 이해가 되실거에요 🙂

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 대한 답변을 드리겠습니다. 코드의 안정성과 가독성을 위해 중복된 조건 검사를 수행하는 것은 흔한 프로그래밍 관행 중 하나입니다. 주어진 예시에서는, run 메소드에서는 scheduler의 남은 태스크가 있는지를 전체적으로 확인하고 있습니다. 이는 전체 태스크 처리의 외부 루프 조건으로 작용합니다. 하지만, processNextTask 메소드 내부에서 태스크의 존재 여부를 확인하는 것은 해당 메소드가 독립적으로 호출되어 사용될 경우를 대비한 것일 수 있습니다.

즉, processNextTask는 다른 맥락에서 개별적으로 호출될 수 있으며, 이런 경우에도 안정적으로 함수가 실행될 수 있도록 하기 위한 추가 검사를 포함하는 것이 일반적입니다. 이는 특히 큰 프로젝트나 여러 사람이 협업하는 경우, 예기치 않은 상황에서 메소드의 안정적 실행을 보장하는 데 도움이 됩니다.

결국 이런 방식은 코드를 더 안전하게 만들고, 다른 개발자가 코드를 이해하기 쉽게 만드는 장점이 있습니다. 또한, 특정 메소드가 다른 곳에서 어떻게 사용될지, 또는 미래에 어떻게 변할지 예측하기 어렵기 때문에, 이런 식의 방어적 프로그래밍은 오류를 방지하는 데 중요한 역할을 할 수 있습니다.

내부 메서드에서의 추가적인 조건 검사는 다음과 같은 이유로 필요할 수 있습니다:
- 메소드가 공개적으로 노출되어 외부에서 독립적으로 호출될 가능성이 있는 경우
- 코드 유지보수 과정에서 메소드 호출 구조가 변경되어 run 메소드의 조건 검사만으로는 충분하지 않을 경우
- 멀티스레드 환경에서 경쟁 조건(race condition) 또는 다른 타이밍 이슈로 인해 tasks의 상태가 예상과 다르게 변경될 가능성이 있는 경우

이처럼, 개발 과정에서의 여러 가능성을 고려하여 내부 메서드에서 추가적인 제약을 거는 것은 좋은 습관입니다.

kyk님의 프로필 이미지
kyk

작성한 질문수

질문하기