일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ALU
- MMU
- page
- interrupt
- addressing mode
- 가독성
- 클린 코드
- osi 7
- network
- 공인 IP
- 리펙토링
- TCP
- 코드 컴플릿
- private ip
- Public IP
- physical address
- refactoring
- 명령어
- Clean code
- register
- 사설 IP
- L3 Router
- cache
- CPU
- ack
- float
- Sector
- Code complete
- floating point
- L2 switch
- Today
- Total
Software Lab
null 인자는 함수 외부에서 처리 본문
drawLine(Point start, Point end){ // define func
if(start == null || end == null)
return;
....
....
}
drawLine(start, end) // call func
<함수 내부 null 처리>
drawLine(Point start, Point end){ // define func
....
....
}
if(start != null && end != null)
drawLine(start, end) // call func
<함수 외부 null 처리>
<함수 내부 null 처리>는 오동작이 발생할 수 있다.
<함수 내부 null 처리>는 함수 외부에서 매번 null 처리 코드를 작성할 필요가 없다. 그리고 만약 인자가 null인 경우 죽지 않으므로 안전하게 동작한다고 착각할 수 있다. 그런데 죽지 않는다고 문제가 없는 것인가?
null 인자로 drawLine 함수를 호출해보자. 프로그램은 죽지 않겠지만 Line은 그려지지 않을 것이다. 함수가 호출은 되었는데 그 동작이 되지 않았다? 그것은 오동작이라고 볼 수 있다.
반면 <함수 외부 null 처리>에서 실수로 외부에서 null 처리하지 않아(만약 8번 줄이 없으면), null 인자로 함수가 호출된다면 프로그램은 죽을 것이다. null 인자로 함수가 호출되면 죽는 게 오히려 정상 동작이라고 볼 수 있다.
null 인자로 인해 프로그램이 오동작하는 것보다 죽는 편이 문제의 원인을 더 빨리 찾는다. 다시 말하면 죽었을 때보다 오 동작이 발생했을 때, 그 문제의 원인을 찾는 비용이 더 많이 든다.
그 외에도 중복 코드 발생 여부와 함수 호출 오버헤드에서도 차이가 있다. 두 방식을 요약하면 아래와 같다.
<함수 내부 null 처리>
- 함수 호출마다, null 처리 코드 신경 쓸 필요 없음
- 함수 호출 오버헤드가 있기 때문에 속도가 느림
- 인자가 null이라면 프로그램 오 동작함
<함수 외부 null 처리>
- 함수 호출마다, null 처리 코드 작성 번거로움
- 함수 호출 오버헤드가 없기 때문에 속도가 빠름
- 인자가 null이라면 프로그램 죽음
많은 framework나 lib(가령 stdio의 strstr)의 함수들도 null 인자로 호출되면 프로그램이 죽게 되어있다. 특수한 경우가 아니라면 <함수 외부 null 처리> 방식으로 개발해야 하는 것이 맞다. 반대로 특수한 경우, 즉 오동작 하더라도 죽지 않는 것이 더 중요하다고 판단 된다면 <함수 내부 null 처리> 방식을 사용하면 되겠다.
'코드 리펙토링' 카테고리의 다른 글
필수 변수는 생성자 함수를 통하여 (0) | 2022.06.28 |
---|---|
try 블록 범위 (0) | 2022.06.28 |
Collection을 활용한 코드 개선 #3 - 게시글 (0) | 2022.06.24 |
Collection을 활용한 코드 개선 #2 - 비행기 이동 (0) | 2022.06.24 |
Collection을 활용한 코드 개선 #1 - 과일 명 리턴 (0) | 2022.06.24 |