본문 바로가기
Research/Programming

변수사용에 관하여...

by sunnyan 2003. 11. 26.
728x90
http://comeng.andong.ac.kr/%7Esoftware/report/edie/ch10.htm 10 변수 사용시 일반적으로 주의할 사항

10 변수 사용시 일반적으로 주의할 사항

 

범위(scope)

지속도(persistence)

결합시간(binding time)

데이터 구조(data structure) 제어구조(control structure) 관계

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

전역변수(global variables)

 

 

10.1 범위(scope)

범위 변수의 유명도, 어떤 변수가 프로그램 전체에 얼마나 알려져 있는가를 측정하는 방법이다.

범위를 최소화 하라.

변수 참조부(reference) 변수를 가까운 곳에 놓아라.

 

 

10.2 지속도(persistence)

지속도 변수의 생존기간을 나타내는 용어다.

 

변수들이 가질 있는 지속도의 종류.

  • 특정 블록에서만 생존하는 변수.
  • 허락된 동안만 생존하는 변수.
  • 프로그램의 끝까지 생존하는변수.
  • 영원히 생존하는 변수.

 

 

10.3 결합시간 (binding time)

결합 시간이란, 변수에 값이 대입되는 시간을 뜻한다.

결합 시간은 가능한 늦추는 것이 이롭다. 일반적으로 결합 시간을 늦출수록, 코드의 융통성이 크다.

  • 코드 작성시에 변수에 값을 대입하는 코드    (바람직하지 않다)

TestID = 47;

  • 컴파일할 변수에 값을 대입하는 코드      (앞의 경우보다 훨씬 낫다)

#define MAX_ID 47

TestID = MAX_ID;

  • 프로그램을 실행할 변수에 값을 대입하는 코드     (문자값의 경우보다 판독성과 융통성이 좋다)

1. TestID = MaxID;

    2. TestID = ReadFileMaxID();

    3. TestID = GetMaxIDFromUser();

 

 

104. 데이터 구조와 제어 구조의 관계

잭슨의 가지 종류의 데이터 제어 구조의 관계

순차적 데이터는, 프로그램의 순차적 문장과 대응된다.

선택적 데이터는, 프로그램의 선택문과 대응된다.

반복형 데이터는, 프로그램의 for, repeat, while 루프 구조에 대응된다.

 

 

10.5 변수를 가지 목적으로만 사용하는 방법

변수를 가지 목적에만 사용하자.

숨겨진 의미가 있는 변수를 피하라.

선언된 변수가 모두 사용되는가 확인하라.

 

 

10.6 전역 변수 (global variable)

전역 변수를 사용하는 것이 지역변수를 사용하는 것보다 위험하다.

 

  • 전역 데이터와 관련된 일반적인 문제점들

전역 데이터의 값을 부주의하게 변경한 경우.  

(어떤 곳에서 전역 변수의 값을 바꾸어 놓고는, 다른 곳에서는 바뀌지않은 것으로 착각할 있다)

전역 변수에 의한별명문제.  

(같은 변수를 서로 다른 이름으로 호출하는 것을 말한다)

전역 데이터와 관련된 다중 진입 코드(re-entrant code) 문제점.  

(전역 데이터가 루틴들 사이에서만 공유되지 않고 같은 프로그램의 다른 복사본과도 공유될 가능성을 갖는다는 문제가 있다)

전역 데이터 때문에, 코드를 다시 사용할 없게 되는 문제점.  

(다시 사용하기를 원하는 모듈이 전역 데이터를 읽거나 쓴다면,   모듈을 프로그램에 단순하게 집어넣을 수가 없다. 경우, 프로그램 또는 이식할 모듈을 수정하여, 서로 호환성을 갖도록 보장해 주어야만 한다.  가장 바람직한 방법은,  이식할 모듈이 전역 데이터를 사용하지 않도록 수정하는 것이다)

프로그램의 모듈화와 능동적 유지 관리성(intellectual manageability) 방해하는 전역 데이터(전역 데이터는 프로그램의 모듈화를 방해한다. 만약 전역 데이터를 사용한다면 루틴에  집중할 없다.  지금 다루는 루틴과 함께 전역 데이터를 사용하는 다른 루틴들도 염두에 두어야 하기 때문이다)

  • 전역 변수를 사용하는 이유

전역값의 보존.

이름 붙은 상수(named constant) 대용품으로.  

(이름 붙은 상수(macro) 지원해주지 않는 언어에서 전역 변수를 대용품으로 있다)

매우 자주 사용되는 데이터의 합리화.  

(같은 변수를 자주 사용하는 경우)

통과 데이터의 제거.

 

  • 전역 데이터에 의한 위험을 줄이는 방법

일단 모든 변수들을 지역 변수로 선언하고, 필요한 것만 전역 변수로 전환하라.

전역 변수와 모듈 변수를 구분하라.

전역 변수의 용도를 쉽게 있도록, 변수의 명명 규칙(naming convention) 정하라.

여러분이 사용한 전역 변수들의 목록을 작성하라.

여러분이 포트란을 사용하고 있다면, 이름 붙은 COMMON(labeled COMMON) 사용하라.

전역 변수로 접근하는 것을 조절할 있도록, 로킹(locking) 사용하라.

거대 변수 모든 데이터를 집어넣고는 프로그램의 구석구석으로 보내는 방법으로, 전역 변수를 사용하지 않는 것처럼 꾸미지 말라.

 

  • 전역 변수를 대신하는 접근 루틴(access routine) 사용

전역 변수를 어떻게 사용하든지 간에, 접근 루틴을 사용하면 똑같은 작업을 잘할 있다.  접근 루틴은추상적 데이터형정보 숨기기 근간을 이루고 있다.

 

접근 루틴의 장점

  • 데이터를 집중적으로 제어할 있다.
  • 모든 변수 참조부들을 완벽하게 보호할 있다.
  • 정보 숨기기 이득을 저절로 얻게 된다.
  • 접근루틴은 추상적 데이터 형으로 쉽게 전환할 있다.

 

전역 변수를 대신한 접근 루틴의 사용법

 

데이터를 사용하는 모든 루틴들은, 반드시 접근 루틴을 통해서 데이터에 접근해야 한다.

모든 전역 변수를 단순히 같은 그릇에 담아서는 안된다.

접근 루틴에 추상화(abstraction)개념을 도입하라.

  • 복잡한 데이터를 직접 사용한 경우

    node = node.next

    node = node.next

    node = node.next

 

    Event = EventQueue[ QueueFront ]

    Event = EventQueue[ QueueBack ]

  • 복잡한 데이터를 접근 루틴을 통하여 사용한 경우

node = NearesrNeighbor( node )

node = NextEmployee( node )

node = NextRateLevel( node )

 

Event = HighestPriorityEvent()

Event = LowestPriorityEvent()

추상화 접근 루틴이 일반적인 데이터 구조보다 우리에게 훨씬 많은 정보를 준다.

데이터에 접근하는 방법의 추상화 수준을 일정하게 유지하라.

  • 복잡한 데이터를 일관성 없이 사용한 경우

    Event = EventQueue[ QueueFront ]

Event = EventQueue[ QueueBack ]

AddEvent(Event)

EventCount = EventCount ? 1

  • 복잡한 데이터를 일관성 있게 사용한 경우

Event = HighestPriorityEvent()

Event = LowestPriorityEvent()

AddEvent(Event)

RemoveEvent(Event)

접근 루틴은 전역 변수의 문제점을 해소하고 코드에 보다 많은 융통성을 부여한다.

728x90