no swim no life
CODE complete, 17: 특이한 제어 구조들 본문
여러 곳에서 리턴하는 루틴
- return, exit 문은 프로그램이 원하는 순간에 루틴으로 부터 빠져나갈 수 있는 제어 구조
- 보다 읽기 쉬운 코드를 만들기 위해서 return을 사용
- 어떤 루틴에서 답을 알고 있을 때 정리작업 후 곧바로 호출 루틴으로 리턴
- 복잡한 오류 처리를 단순화하기 위해서 보호절을 사용
- 정상적인 작업을 수행하기 전에 많은 오류 조건들을 검사해야 하는 코드
재귀적 용법
- 재귀적 용법에서는 한 루틴이 문제의 작은 부분을 해결하고 그 문제를 더 작은 부분으로 나눈 다음, 더 작은 부분의 각각을 해결하기 위해서 자신을 호출
- 작은 문제의 그룹인 경우에는 간단하고 훌륭한 해결책이 될 수 있다
- 재귀적 용법의 예
- 미로 해결
- 재귀 호출 사용 팁
- 재귀 호출이 중단되는지 확인
- 무한 재귀 호출을 막기 위해서 안전한 카운터를 사용
- 한 루틴으로 재귀 호출을 제한
- 스택을 감시 - 재귀 호출은 스택 공간을 얼마나 차지하게 될지 보장할 수 없다
- 팩토리얼이나 피보나치 수열을 계산하기 위해서 재귀적 용법을 사용하지 않는다
- 사용하기 전에 다른 대안을 고려
goto 문
- 사용을 반대하는 의견
- 코드의 형식을 정리하기 어렵다
- Java와 같은 현대적인 언어들은 goto를 지원하지 않는다
- 컴파일러가 최적화를 할 수 없다
- 사용을 찬성하는 의견
- 적절한 위치에서 사용하면 코드의 중복을 없앨 수 있다
- 지난 10년 동안 goto에 대한 연구는 goto가 해롭다는 것을 증명하지 못했다
- goto 문을 대체 하는 법
- 중첩된 if문 사용 - 중첩 수준 문제
- 상태 변수를 사용 - 개발자의 이해도 문제
- try/finally 사용 - 모든 언어에서 사용할 수 없음
어떤 기법이든지 모든 코드에서 일관성 있게 적용된다면 문제없다.
goto 문의 사용
- 구조적인 제어 구현을 지원하지 않는 언어에서는 구조를 흉내내기 위해 goto를 사용
- goto 문과 동일한 구현을 사용할 수 있을 때에는 goto 문을 사용하지 않는다
- 효율성을 높이기 위해 사용된 goto 문의 성능을 측정하라
- 한 루틴에 하나의 goto 레이블만 사용
- goto 문이 앞으로 전진만 하도록 한다
- 모든 goto 레이블이 사용되었는지 확인
- goto 문으로 인하여 접근 되지 않는 코드가 만들어지지 않았는지 확인
- goto 문 하나에 매달리다가 전체를 망칠 수도 있다.
'work > fundamental' 카테고리의 다른 글
CODE complete, 18: 테이블을 활용하는 방법 (0) | 2009.05.09 |
---|---|
CODE complete, 16: 루프 제어 (0) | 2009.03.12 |
CODE complete, 14: 직선형 코드 구성하기, 15: 조건문 사용 (0) | 2009.02.17 |
Comments