Members - Question and Answer


Static변수는 필요 없는것 같은데요!!



아래 구문은 uno-excel-programming본문(5회)중의
STACTIC변수와 순환문을 설명하기 위한 예문이였다
그런데 메일이 왔다
Static iX As Integer
를 Static으로 할 필요가 없는 것 같은데요
그냥
Dim iX As Integer
로 해도 되겠는데요

사람이 관념이라는 것이 참 무섭다
이것은 Static변수를 설명하려고 하였을 것이라는 관념에 사로잡혀
Static변수에 대하여 장황하게 설명하는 메일을 보냈다
그런데 또 메일이 왔다
그런데요..Static의 의미는 아는데요..그것이..

그래서 또 설명을 해서 보냈다
나도 끈질기지만 질문을 하는 분도 끈질기다
이러..저러 몇번을 보내고 받다가..
어느날 아침..
가만..내가 뭐 잘못했나???
그리고 이제서야 자세히 열어서 살펴 본다!!
아차차!! 내가 잘못했군!!!
별의미없는 Static변수의 예문을 만들어 올려놓았던것이다
왜 이런 짓을 했지??

참으로 이런 끈질긴 분들은 고맙다
우선 문제의식이 충만하고
하나를 알아도 제대로 알아야 하고
좋은 기운을 받는 기회가 되고 좋은 기운을 나누는 기회가 된다

구문의 문제가 아니라
나에게는 사람이 쉽게 관념에 빠진다는 것을
다시 한번 생각하게 하는 일이 였으니까..
고마운 일이다..땡큐!!

Sub calculateBonus_1() Dim iAmount As String, iBonus As Long Static iX As Integer Dim iLimit As Integer iLimit = 3 Do iX = iX + 1 iAmount = InputBox("한달 급여를 입력하세요 " & iX) Loop While Not IsNumeric(iAmount) And iX < iLimit If IsNumeric(iAmount) Then iBonus = iAmount * 0.8 Else MsgBox iX & "회의 입력기회가 주어집니다" iX = 0 Exit Sub End If iX = 0 MsgBox "보너스는 " & iBonus & "원 입니다" End Sub

위의 구문은 Static변수은 아무 의미가 없다
그냥 프로시져를 한번 호출하여 진행하는 것이니 Static..즉 변수값을 다시 프로시져를 호출할때까지
유지할 필요가 없는것이다
그냥 Dim으로 처리하면 되는 변수다
거참...왜 이렇게 했을까??
화일은 수정하지 않고 그대로 두었다
어느 분이 또 문제의식을 갖고 달려들기를 기대하면서..

위의 것을 제대로 Static으로서의 역활을 하려면
아래와 같이 하는 것이 의미가 있는 셈이다

Sub calculateBonus_2() Dim iAmount As String, iBonus As Long Static iX As Integer Const iLimit As Integer = 3 If iX = 3 Then MsgBox iX & "회 동안 정상입력하지 않으면 중단됩니다" Exit Sub End If iX = iX + 1 iAmount = InputBox("한달 급여를 입력하세요 " & iX) If IsNumeric(iAmount) Then iBonus = iAmount * 0.8 MsgBox "보너스는 " & iBonus & "원 입니다" Else MsgBox "숫자를 입력하세요" End If End Sub

위의 것은 프로시져를 3번 호출하는 것이다
잘못입력하면 4번째에서는 더이상 작업을 안하겠다고
거부하게 되겠지..
어떤 변수가 값을 유지하고 있어야 할것이고
그런 요구에 따라서 그런 기능을 갖고 있는 것이
Static변수의 의미다
Static변수와 깉은 기능으로 활용하고 싶다면
Procedure 외부에 선언하는 외부변수를 사용하면 되고
그러니 Stactic변수는 프로시져내부에 있지만(지역변수)
외부에 선언된 변수(전역변수)와 같은 의미를 갖고 있는 셈이다

잘못된 것 있으면 가차없이 또 질문하시기를...!!