본문 바로가기
excel VBA

엑셀 Property 프로시저

by 퍼포먼스마케팅코더 2023. 8. 30.
반응형

Property 프로시저

Property 프로시저는 개체 속성을 정의한다. 종류는 다음과 같다.

  • Property Let 프로시저 : 선언한 데이터 변수에 값을 할당한다.
  • Property Get 프로시저 : Let, Set에서 할당된 데이터 형식 변수의 값이나 개체 변수에 속성값을 읽는다.
  • Property Set 프로시저 : 선언한 개체 변수의 속성에 값을 할당한다. 개체 변수는 Object 변수와 Variant 변수가 있다.

Get 프로시저 사용법이다.

[Public | Private | Friend] [Static] Property Get name[(arglist)] [As type]
   [statements]
   [name = expression]
   [Exit Property]
   [statements]
   [name = expression]
End Property
  • statements는 실행문이다.
  • name = expression에서 name은 Get 옆에 있는 name과 반드시 동일해야 한다. expression은 name에 값을 할당한다.
  • Exit Property는 프로시저를 종료한다.

Let 프로시저 사용법이다.

[Public | Private | Friend] [Static] Property Let name([arglist,] value)
   [statements]
   [Exit Property]
   [statements]
End Property
  • statements는 실행문이다.
  • Exit Property는 프로시저를 종료한다.

Set 프로시저 사용법이다.

[Public | Private | Friend] [Static] Property Set name([arglist,] value)
   [statements]
   [Exit Property]
   [statements]
End Property
  • statements는 실행문이다.
  • Exit Property는 프로시저를 종료한다.

프로시저는 다른 곳에서 접근을 제한하는(access modifier) 키워드가 있다.

  • Private : 같은 모듈 안에서만 접근이 가능하다.
  • Public : 모든 곳에서 접근이 가능하다.
  • Friend : 프로젝트 안에서 접근이 가능하다. 이 키워드는 클래스 모듈에서만 사용할 수 있다.
  • Static : 프로시저 실행은 그 안의 변수값이 매번 초기화되어 계산되지만 이 키워드는 최근 값을 기억하여 계산에 반영한다.
Function updateSales(ByVal thisSale As Decimal) As Decimal
   Static totalSales As Decimal = 0
   totalSales += thisSale
   Return totalSales
End Function

위 보기에서 사용한 totalSales 변수는 Static 제한자로 선언하여 처음 updateSales 함수 실행시 초기값이 0이 된다. 매번 이 함수를 실행하면 최근에 저장된 totalSales 값이 계산한다.

Property 프로시저와 접근 제한자 관계를 설명하려면 클래스 모듈 개념이 필요하다. 그 내용은 클래스 모듈을 모듈에서 개체 변수로 선언하여 사용한다. 다른 곳에서 사용할 수 있게 프로그래밍한 것을 클래스라 하고 클래스를 변수로 선언하면 개체라고 부른다.

# 파일명 : Person.cls 클래스 모듈로 사용
Private myName As String
Private myIncome As Integer

Public Property Get Name() As String
   Name = myName
End Property

Public Property Let Name(vName As String)
   myName = vName
End Property

Public Property Get Income() As Integer
   Income = myIncome
End Property

Public Property Let Income(vIncome As Integer)
   myIncome = vIncome
End Property

Public Function Grade() As String
   Dim strGrade As String
   If myIncome >= 1000 Then
      strGrade = "상류층"
   ElseIf myIncome >= 600 Then
      strGrade = "중산층"
   Else: strGrade = "서민층"
   End If
   Grade = strGrade
End Function

위 보기에서 1 – 2 줄 변수는 Private 접근 제한자로 선언하여 이 클래스 내에서만 접근이 가능하다. 8 줄은 인수 vName 값을 같은 클래스 변수 myName에 배정한다. 같은 클래스에 있기에 Private 접근 제한자로 선언한 변수도 접근하여 값을 변경한다. 15 줄도 myIncome 변수에 동일한 방법으로 접근한다. 이렇게 Property Let 프로시저는 이미 선언한 변수에 값을 배정한다.

반면 Property Get 프로시저는 할당된 값을 가져온다. 5 줄은 Private 접근 제한자로 선언한 myName 변수에 저장된 값을 가져온다. 12 줄도 myIncome에 할당된 값을 가져온다.

18 – 27 줄은 15 줄을 실행하여 myIncome 변수에 할당된 값이 1000 이상이면 상류층, 600 이상이면 중산층, 그 이외는 서민층으로 판정하는 Function 프로시저이다.

위 보기의 클래스 모듈에 구현한 Property 프로시저는 다른 모듈에서 접근해야 되므로 Public 접근 제한자로 선언한다. 위 보기는 모듈에서 클래스를 개체 변수로 선언하였다.

Sub runPerson()
   Dim p As Person
   Set p = New Person
   p.Name = "홍길동"
   p.Income = 1200
   MsgBox "이름은 " & p.Name & " 소득계층은 " & p.Grade
End Sub

2 줄은 Person 클래스를 p 개체로 만든다. 3 줄은 선언한 p 개체를 초기화한다. 개체 변수 선언은 Set 문을 사용하고 클래스 이름 앞에 New 키워드를 붙인다. 4 줄은 p 개체 Name 속성에 홍길동을 배정한다. 5 줄도 p 개체 Income 속성에 1200을 배정한다. 6 줄에서 p 개체에 저장된 값을 MsgBox로 출력한다.

반응형

'excel VBA' 카테고리의 다른 글

Excel VBA 커스텀 리본 메뉴 구성 방법  (0) 2023.11.16
엑셀 VBA 컴파일 오류 경고 끄기  (0) 2023.09.05
Function 프로시저  (0) 2023.08.30
Sub 프로시저  (0) 2023.08.30
엑셀 vba 제어문  (0) 2023.08.30

댓글