Sub / Function

CUBLOC2에서 서브루틴(Sub)과 함수(Function)는 코드를 구조화하는 핵심 요소입니다. 두 방식의 가장 큰 차이점은 반환값(Return Value)의 유무입니다.

1. Sub (서브루틴)

  • 특정 작업을 수행하지만, 호출한 곳으로 값을 돌려주지 않습니다.
  • 주로 상태 변경, 출력, 하드웨어 제어 등 '동작' 자체에 목적이 있을 때 사용합니다.
' Sub 정의 (인자가 있는 경우)
Sub PrintStatus(Value As Integer)
    Debug "현재 상태: ", Dec Value
End Sub
 
' Sub 정의 (인자가 없는 경우)
Sub SayHello()
    Debug "안녕하세요!"
End Sub
 
' Sub 호출
PrintStatus(100)
SayHello()      ' 인자가 없어도 괄호를 붙여 호출합니다.

2. Function (함수)

  • 특정 계산이나 처리를 수행한 후 그 결과를 호출한 곳으로 반환합니다.
  • 반환할 데이터 타입을 선언해야 하며, 함수 이름에 값을 대입하여 반환값을 지정합니다.
' Function 정의 (정수형 반환)
Function Add(A As Integer, B As Integer) As Integer
    Add = A + B  ' 함수 이름에 값을 대입하여 반환
End Function
 
' Function 정의 (인자 없이 값만 반환하는 경우)
Function GetVersion() As Single
    GetVersion = 1.0
End Function
 
' Function 호출
Dim Result As Integer
Result = Add(10, 20)
Debug "버전: ", Fp GetVersion()

3. 루틴 종료 (Exit Sub / Exit Function)

  • 루틴을 끝까지 실행하지 않고, 특정 조건에서 즉시 종료하고 빠져나올 때 사용합니다.
Sub CheckLimit(Value As Integer)
    If Value > 100 Then
        Debug "범위 초과로 중단합니다."
        Exit Sub
    End If
 
    Debug "정상 범위입니다: ", Dec Value
End Sub

인자(Argument)에 대하여

1. 인자란?

  • 서브루틴이나 함수를 실행할 때 넘겨주는 데이터를 인자라고 합니다.
  • 예: PrintStatus(100)에서 100이 바로 인자입니다.

2. 값 복사 방식

  • 모든 인자는 값을 그대로 복사해서 전달합니다.
  • 루틴 내부에서 값을 변경해도 원본 변수에는 영향을 주지 않습니다.

3. 원본 데이터를 수정하려면

  • 기본적으로 원본 변수 직접 수정은 지원하지 않습니다.
  • 다음 방법을 사용합니다.
    • 1차원 배열 활용
    • 전역 변수 활용

사용 예시

Dim A As Integer = 10
Test(A)
 
Do
Loop
 
Sub Test(Value As Integer)
    Value = 20  ' 원본 A는 변하지 않음
End Sub

← CUBLOC2 목차로 돌아가기