제약 관련 질문
[질문 템플릿]
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
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문에 대한 답변을 드리겠습니다. 코드의 안정성과 가독성을 위해 중복된 조건 검사를 수행하는 것은 흔한 프로그래밍 관행 중 하나입니다. 주어진 예시에서는, run 메소드에서는 scheduler의 남은 태스크가 있는지를 전체적으로 확인하고 있습니다. 이는 전체 태스크 처리의 외부 루프 조건으로 작용합니다. 하지만, processNextTask 메소드 내부에서 태스크의 존재 여부를 확인하는 것은 해당 메소드가 독립적으로 호출되어 사용될 경우를 대비한 것일 수 있습니다.
즉, processNextTask는 다른 맥락에서 개별적으로 호출될 수 있으며, 이런 경우에도 안정적으로 함수가 실행될 수 있도록 하기 위한 추가 검사를 포함하는 것이 일반적입니다. 이는 특히 큰 프로젝트나 여러 사람이 협업하는 경우, 예기치 않은 상황에서 메소드의 안정적 실행을 보장하는 데 도움이 됩니다.
결국 이런 방식은 코드를 더 안전하게 만들고, 다른 개발자가 코드를 이해하기 쉽게 만드는 장점이 있습니다. 또한, 특정 메소드가 다른 곳에서 어떻게 사용될지, 또는 미래에 어떻게 변할지 예측하기 어렵기 때문에, 이런 식의 방어적 프로그래밍은 오류를 방지하는 데 중요한 역할을 할 수 있습니다.
내부 메서드에서의 추가적인 조건 검사는 다음과 같은 이유로 필요할 수 있습니다:
- 메소드가 공개적으로 노출되어 외부에서 독립적으로 호출될 가능성이 있는 경우
- 코드 유지보수 과정에서 메소드 호출 구조가 변경되어 run 메소드의 조건 검사만으로는 충분하지 않을 경우
- 멀티스레드 환경에서 경쟁 조건(race condition) 또는 다른 타이밍 이슈로 인해 tasks의 상태가 예상과 다르게 변경될 가능성이 있는 경우
이처럼, 개발 과정에서의 여러 가능성을 고려하여 내부 메서드에서 추가적인 제약을 거는 것은 좋은 습관입니다.
제네릭 타입 매개변수 제한과 관련한 문의입니다.
0
78
3
강의가 좀 버겁다 느껴질 때 학습방법 문의
1
130
4
제네릭 반환값 및 파라미터 선언 방식의 변화 <T> T
0
58
1
new T()가 안 되는 니유
0
97
1
안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.
0
98
2
자바 로드맵 선택 질문
0
111
2
실전 자바 중급 - 2편 후 추천 강의
0
175
2
실프로젝트에서 Java25버전 사용
0
116
1
Arrays.sort
0
67
1
블로그 작성 시, 저작권 문제에 대하여
0
165
1
중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.
0
94
3
pop()과 poll()의 차이
0
94
1
특정 index의 노드 조회하기 질문
0
66
2
List.of() 비어있는 불변 리스트 생성
0
81
2
문제2: 개 타입 반환
0
54
2
[리뷰] 중급2편까지 겨우 완강 했습니다.
0
111
2
문제와 풀이1 Ex2와 Ex3
0
65
2
노드 삭제시 노드 null값으로 초기화
0
76
2
강의영상에 대한 질문
0
57
1
타입 매개변수 제한
0
59
1
compareTo
0
68
1
직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다
0
98
3
섹션 8-58 equals and hashcode 에서 코드가 다르게 생성됨
0
69
2
퀴즈 오류 관련 문의
0
109
1





