변수 선언을 쉽게 하는 방법

  • 암시적 변수선언을 지원하는 언어를 사용하더라도 사용하지 않는다.
  • 모든 변수를 선언한다.
  • 명명 규약을 사용한다.
  • 변수의 이름을 검사한다.

 

변수초기화에 대한 지침.

부적절한 초기화와 관련된 문제는 예상치 못한 초기값을 변수가 포함하고 있는 것에서 생긴다.

  • 변수에 값을 할당한 적이 없다
  • 변수에 있는 값이 더 이상 유효하지 않다
  • 변수의 일부에는 값을 할당하고 나머지 부분에는 값을 할당하지 않았다.
  • etc

 

초기화문제를 피하기 위한 지침들

  • 변수가 선언될때 초기화한다.
  • 변수가 처음 사용되는 곳에 근접한 위치에서 초기화한다. - VB처럼 선언할때 초기화하는 기능을 지원하지 않는 언어에서는 처음 사용하는 곳 근처에서 초기화해준다.근접성원리(관련 작업을 함께 유지한다) : 동일한 원리는 코드를 기술하는 주석을 코드와 가까운 위치에 두고, 루프의 근처와 가까운 위치에 두고, 직선형 코드에서 명령문을 그룹화하는 등 여러가지 영역들에 적용된다.
  • 이상적으로 , 각 변수가 처음 사용되는 곳에 근접한 위치에서 변수를 초기화하고 정의한다.
  • 가능하다면 final이나 const를 사용한다.- 변수를 자바에서의 final이나 c++에서의 const로 선언함으로써 변수가 초기화된 후에 다른 값으로 할당되는 것을 막을수 있다. final과 const키워드는 클래스 상수와 입력만 가능한 매개변수, 초기화된 후로 변경되지 않아야 하는 지역 변수를 정의하는데 유용하다.
  • 카운터와 누산기를 특히 주의한다. - j,k,k, sum 변수들은 종종 카운터와 누산기로 사용된다. 일반적인 오류는 카운터나 누산기를 다음 번 재사용 전에 초기화하는 것을 잊지 않는다.
  • 클래스 멤버데이터를 생성자에서 초기화한다
  • 다시 초기화를 해야 할 필요가 있는지 검사한다
  • 일단 명뎡된 상수를 초기화하고 실행코드로 변수를 초기화한다
  • 모든 변수들을 자동으로 초기화해주는 컴파일러 설정을 사용한다
  • 컴파일러의 경고 메시지를 활용한다
  • 입력매개변수의 타당성을 검사한다.
  • 부적절한 포인터를 검사하기 위해서 메모리 접근 도구를 사용한다
  • 프로그램 시작할때 작업 메모리를 초기화한다.

 

범위

변수에 대한 참조를 지역화하라 - 언제나 변수에 대한 참조들을 가까운 곳에 함께 두어 변수에 대한 참조를 지역화하는 것이 좋다. 변수에 대한 참조를 지역화한다는 개념은 별도의 설명이나 증명이 필요가 없지만, 형식적인 측정에 적합한 개념이다. 변수에 대한 참조를 가까이 유지하면, 여러분이 작성한 코드를 보는 사람이 한번에 한 섹션에 집중할수 있다. 만약 참조가 멀리 떨어져 있다면, 코드를 읽는 사람이 프로그램 주위를 이리저리 옮겨 다녀야 한다. 따라서 변수에 대한 참조를 가까이 유지하는 것은 프로그램의 가독성을 향상시키는데 좋은 방법이다.

 

변수의 수명을 가능한 한 짧게 유지한다. - 수명이란 변수가 처음 참조되는 곳에서 마지막으로 참조되는데까지를 말한다. 수명이 짧을수록 부정확한(부주의한) 변수변경을 막을수 있다. 또한, 코드에 대한 정확한 그림을 제공한다. 짧은 수명은 초기화 오류가 발생할 가능성을 줄여준다. 가독성도 높여준다.

 

범위를 최소화하기 위한 일반적인 지침

  • 루프에서 사용되는 변수는 루프를 포함하고 있는 루틴의 시작에서가 아니라 루프 바로 앞에서 초기화한다.
  • 변수를 사용하기 전까지 변수에 값을 할당하지 않는다.
  • 연관된 명령문들을 그룹화한다.
  • 연관된 명령문 그룹을 별도의 루틴으로 나눈다
  • 처음에는 가시도를 최대한 제한하고 필요한 경우에만 변수의 범위를 늘린다.

 

지속성

변수는 다음의 경우에 지속성을 가진다

  • 특정한 코드 블록이나 루틴에서만 살아남는 경우
  • 허용한 동안 살아남는 경우
  • 프로그램이 종료할때까지 살아남는 경우
  • 영원히 살아남는 경우 - 프로그램이 실행중이 아닐 때 DB에 저장한 값을 포함한 경우.
  •  

    문제는 변수가 실제 사용되는 것보다 지속성이 길 경우이다. 변수의 값이 정상적인 수명이 끝난 후에 사용하려면 잘못된 값이 들어있을 확률이 높다. 이런 문제를 피하기 위한 지침이 다음에 있다.

  • 중요한 변수가 적절한 값을 갖는지 검사하기 위해서 프로그램에 디버그 코드나 assertion을 사용한다
  • 변수를 사용하고 난 후에 변수에 "부적절한"값을 넣는다. 예를 들어 포인터라면 null을 설정해주는 것도 좋다
  • 데이터가 지속적이지 않다고 가정하는 코드를 작성한다.
  • 모든 데이터를 사용하기 바로 직전에 선언하고 초기화하는 습관을 들인다.

 

데이터 형과 제어 구조간의 관계

  • 순차적인 테이더는 프로그램의 순차적 명령문으로 변환한다.
  • 선택적 데이터는 프로그램의 if와 case명령문으로 변환한다.
  • 반복적 데이터는 프로그램에서 for, repeat, while loop구조로 변환한다

 

변수를 한 목적으로만 사용하는 방법

  • 각 변수를 한가지 목적만을 위해서 사용하라 - 다른 목적으로 변수를 사용하는 경우에 서로 관련이 없는 코드가 관련이 있어보이고 오류의 소지가 있다.
  • 숨겨진 의미를 갖는 변수를 피하라. 아래와 같이 변수를 남용하는 것을 hybrid coupling이라고 한다.

    • ex customerId변수는 고객번호를 표현한다. 하지만 이 값이 500,000보다 크면 연체된 계정의 수를 구하기 위해서 500,000을 뺀다
    • bytesWritten변수는 출력파일에 쓰여진 바이트 수이다. 하지만 이 값이 음수이면 출력 파일에 사용된 디스크 드라이브 수를 가르킨다.
  • 선언된 모든 변수가 사용되는지 확인하라. - 참조되지 않는 변수는 높은 오류 발생률과 상관관계가 있다.

 

요점정리

  • 데이턴 선언은 오류가 발생하기 쉽다. 따라서 예상치 못한 초기 값으로 인해서 발생하는 문제를 피하기 위하여 초기화기법들을 사용한다
  • 각 변수의 범위를 최소화하고, 변수에 대한 참조를 가까이 유지한다. 루틴이나 클래스로 제한하고 전역데이터를 피한다
  • 같은 변수를 사용하는 명령문은 가능한한 가깝게 유지한다
  • 각 변수를 한가지 목적을 위해서만 사용한다

이 글은 스프링노트에서 작성되었습니다.

by 무위자연 2008. 1. 19. 17:05