no swim no life

CODE complete, 17: 특이한 제어 구조들 본문

work/fundamental

CODE complete, 17: 특이한 제어 구조들

달려간다 2009. 5. 9. 20:28

여러 곳에서 리턴하는 루틴

  • return, exit 문은 프로그램이 원하는 순간에 루틴으로 부터 빠져나갈 수 있는 제어 구조
  • 보다 읽기 쉬운 코드를 만들기 위해서 return을 사용
  • 어떤 루틴에서 답을 알고 있을 때 정리작업 후 곧바로 호출 루틴으로 리턴
  • 복잡한 오류 처리를 단순화하기 위해서 보호절을 사용
  • 정상적인 작업을 수행하기 전에 많은 오류 조건들을 검사해야 하는 코드

재귀적 용법

  • 재귀적 용법에서는 한 루틴이 문제의 작은 부분을 해결하고 그 문제를 더 작은 부분으로 나눈 다음, 더 작은 부분의 각각을 해결하기 위해서 자신을 호출
  • 작은 문제의 그룹인 경우에는 간단하고 훌륭한 해결책이 될 수 있다
  • 재귀적 용법의 예
    • 미로 해결
  • 재귀 호출 사용 팁
    • 재귀 호출이 중단되는지 확인
    • 무한 재귀 호출을 막기 위해서 안전한 카운터를 사용
    • 한 루틴으로 재귀 호출을 제한
    • 스택을 감시 - 재귀 호출은 스택 공간을 얼마나 차지하게 될지 보장할 수 없다
    • 팩토리얼이나 피보나치 수열을 계산하기 위해서 재귀적 용법을 사용하지 않는다
    • 사용하기 전에 다른 대안을 고려

goto 문

  • 사용을 반대하는 의견
    • 코드의 형식을 정리하기 어렵다
    • Java와 같은 현대적인 언어들은 goto를 지원하지 않는다
    • 컴파일러가 최적화를 할 수 없다
  • 사용을 찬성하는 의견
    • 적절한 위치에서 사용하면 코드의 중복을 없앨 수 있다
    • 지난 10년 동안 goto에 대한 연구는 goto가 해롭다는 것을 증명하지 못했다
  • goto 문을 대체 하는 법
    • 중첩된 if문 사용 - 중첩 수준 문제
    • 상태  변수를 사용 - 개발자의 이해도 문제
    • try/finally 사용 - 모든 언어에서 사용할 수 없음

어떤 기법이든지 모든 코드에서 일관성 있게 적용된다면 문제없다.
 

goto 문의 사용

  • 구조적인 제어 구현을 지원하지 않는 언어에서는 구조를 흉내내기 위해 goto를 사용
  • goto 문과 동일한 구현을 사용할 수 있을 때에는 goto 문을 사용하지 않는다
  • 효율성을 높이기 위해 사용된 goto 문의 성능을 측정하라
  • 한 루틴에 하나의 goto 레이블만 사용
  • goto 문이 앞으로 전진만 하도록 한다
  • 모든 goto 레이블이 사용되었는지 확인
  • goto 문으로 인하여 접근 되지 않는 코드가 만들어지지 않았는지 확인
  • goto 문 하나에 매달리다가 전체를 망칠 수도 있다.
Comments