[C#] 지역변수와 전역변수

2023. 12. 26. 14:06카테고리 없음

 

지난 트라이(Trie) 자료구조의 개념[C#] TextBox keyPress 이벤트에 이어서  "문장자동완성" 기능을 테스트해보면서 짚고 넘어가야 할 것들을 하나씩 남기려고 한다.

오늘은 C#의 지역변수와 전역변수에 대해 알아보자.


C, C++ 등 에서 지역변수와 전역변수의 정의는 다음과 같다.(ISSAC.Min님 블로그 참조)

  • 지역변수(Local Variable): 함수 내부에서 생성되어 스택(Stack)에 저장되며 선언된 함수 내부에서 사용되고 함수가 종료되면 소멸됨
  • 전역변수(Global Variable): 프로그램이 시작될 때 생성되어 데이터(Data)에 저장되며 프로그램 전체에서 사용 가능하며 프로그램이 종료되면 소멸됨

C#도 크게 다르지 않다.(더북(The Book) 블로그 참조)

  • 지역변수(Local Variable): 함수 레벨에서 선언된 변수
  • 전역변수(Global Variable): 클래스와 같은 레벨에서 선언된 변수, 필드(Feild)라고도 함
  • 동일한 이름으로 변수를 전역 변수와 함수 내의 지역 변수로 선언할 수 있음
  • 우선순위는 지역 변수에 있음.
  • 전역변수, 필드는 언더스코어(_) 또는 m_ 접두사를 붙이는 경향이 있음.

간단한 테스트 코드를 살펴보자.

 

개발툴은 Visual Studio 2022를 사용하였다.

간단한 텍스트파일(.txt)을 준비하자
예전 헝가리언? 표기법이 살아?있는 변수 선언

 

함수 내부나 클래스 내부에 선언하는 지역변수(Local Variable)는 그냥 사용하면된다. 어려울 것 없다.

 

디버그 시작(F5)이나 디버그 하지 않고 시작(Ctrl+F5)으로 결과를 확인해 보자.

[메뉴]에서는 "디버그"에 있다.

 

호드를 위하여!

 

텍스트 파일(.txt)의 데이터가 제대로 출력됨을 확인할 수 있다.


지역변수(Local Variable)로 선언한 라인을 그대로 클래스 밖으로 옮겨보자.

 

CS0236 error 발생!

 

에러가 발생했다. 찾아가자! 우리 Microsoft Learn!

MS Learn! CS0236 Error.

 

음.. 정확히는 모르겠지만, 클래스 또는 함수 밖에서 초기화를 해주어 발생하는 문제라고 하는 것 같다.

 

생성자 안에서 초기화를 해주란다.

 

하여, 코드를 아래와 같이 바꿔주었다.

CS0236 Error가 해결되었다.

 

록타르 오가르(Lok'tar ogar)!

 

깔끔하게 실행되는 것을 확인할 수 있다.

 

근데... 처음에 선언한 strPath 아래에 표시된 하얀색 점선이 눈에 거슬린다.

 

해당 코드에 마우스를 위치시키고 "Alt+Enter" 또는 "Ctrl+."을 눌러보자.(키패드의 ".(Del)" 아니다.)

VS2022의 친절한? 권고사항

 

'해당 코드를 이렇게 바꾸면 좋을 거다'라고 VS2022에서 친절하게? 권고사항을 일러준다.

읽기 전용 한정자 추가

 

해당 변수에 값을 한번 할당하고 계속 사용할 것이면, readonly읽기 전용 한정자를 선언하여 수정을 방지하던가,

접근성 한정자 추가

 

private로 접근한정자를 추가하여 접근을 막아버리라 한다.

 

여기서는 전자의 성격이므로 readonly로 선언해 보았다.

음... 없어졌다... 속이 후련하다!
실행 역시 깔끔하게 된다.

 

문제 표시 안 함 또는 구성

 

문제 표시 안 함 또는 구성 옵션도 있으나 이것을 여기서 생략하고 넘어가겠다.

 

 readonly나 private 같은 접근한정자는 변수나 함수, 클래스의 성격에 맞게 선언해 주면 될 것 같다.

 

접근한정자는 추후에 남기도록 하겠다.

 

 

다음에 할 것? 들

  • 텍스트(.txt 든 뭐든)에 있는 단어 데이터 읽어오기(여전히  ing)
  • 트라이(Trie) 함수 구현, Insert, Find 
  • 사전(Data) 내용, ListView에 전시
  • 검색 결과 ListBox에 전시