멤버와 메소드 (한눈에)
멤버 = 클래스 안의 변수 (저장소)
메소드 = 클래스 안의 함수 (보통 그 저장소를 읽거나 바꾸는 일)
멤버 변수 vs 로컬 변수
- 멤버 변수: 클래스 안, 메소드 밖에 선언. 객체가 있는 동안 유지되고, 여러 메소드에서 쓸 수 있음.
- 로컬 변수: 메소드 안에서만 선언. 그 메소드가 실행되는 동안만 존재.
이름·위치 컨벤션과 단계별 확장은 멤버 변수와 로컬 변수 문서를 보세요.
왜 클래스에 넣나요?
관련된 저장소(멤버) 와 그걸 다루는 함수(메소드) 를 한 덩어리로 두면, 의미가 분명해지고 나중에 코드를 읽기 쉬워집니다.
public class Player
{
public int score; // 멤버 (저장소)
public void AddScore(int points) // 메소드 (score를 다루는 함수)
{
score += points;
}
}
📚 각 단계에서 조금씩 익히기
이 개념은 한 번에 외우지 말고, 아래 단계별 학습을 하면서 조금씩 익히면 됩니다.
| 단계 | 이번 단계에서 익히는 것 |
|---|---|
| 1단계 | 변수 = 값을 넣어 두는 저장소 |
| 2단계 | 함수 = 할 일을 묶어 둔 것 |
| 4단계 | 저장소를 다루는 함수 = MoveLeft()가 position을 바꾸는 것처럼, 어떤 변수를 바꾸는 함수 |
| 5단계 | 메소드 = 클래스 안에 들어간 함수 (이름만 다름) |
| 6~7단계 | 멤버 = 클래스 안에 들어간 변수. 클래스 = 멤버 + 메소드를 묶어 둔 것 |
각 단계 문서 끝의 💡 이번 단계에서 익히는 개념을 읽어 보세요.
🛠️ 실습: 메소드만 → 멤버 + 메소드 단계별로 느끼기
목표: 먼저 “메소드 = 클래스 안의 함수”만 쓰고, 그다음 “저장소(멤버) + 그걸 다루는 함수(메소드)” 짝을 단계별로 느껴 봅니다.
실습 단계
| 단계 | 할 일 | 구분 |
|---|---|---|
| 1단계 | 메소드만 (저장소 없이, 할 일만 묶은 함수) | 메소드 = 클래스 안의 함수 |
| 2단계 | 멤버 변수 + 메소드 (저장소와 그걸 다루는 함수) | 멤버 + 메소드 = 짝으로 쓰기 |
이 실습 전용 씬 만들기 (환경 설정)
먼저 이 실습 전용 씬을 만든 뒤 아래 순서로 진행합니다. (자세한 씬 만드는 방법은 개념 실습 테스트 환경 가이드의 씬 만드는 방법 참고.)
이 실습만 할 전용 씬이 없으면 아래 순서로 한 번만 만듭니다. (이미 ConceptTest_MemberMethod 씬이 있으면 File → Open Scene으로 열고 아래 실습만 이어서 하세요.)
- File → New Scene → Basic (Built-in) 또는 Empty → Create
- File → Save As → 저장 위치: Assets/Scenes → 파일 이름: ConceptTest_MemberMethod → Save
- 아래 실습은 모두 이 씬에서 진행합니다.
실습 1단계: 메소드만 (저장소 없이)
목표: 클래스 안에 들어간 함수(메소드) 만 써 봅니다. 아직 “저장소(멤버 변수)”는 쓰지 않습니다.
- 스크립트 생성: 이름
MemberMethodTest - 아래 코드로 1단계만 작성 후 Play
using UnityEngine;
public class MemberMethodTest : MonoBehaviour
{
// 메소드 = 클래스 안의 함수 (할 일을 묶어 둔 것)
void SayHello()
{
Debug.Log("안녕!");
}
void PrintNumber(int num)
{
Debug.Log("숫자: " + num);
}
void Start()
{
SayHello(); // 메소드 호출
PrintNumber(100); // 메소드 호출 (인자 전달)
}
}
- Play → Console 확인: “안녕!”, “숫자: 100” 출력.
- 정리:
SayHello(),PrintNumber()는 메소드입니다. 클래스 안에 들어간 함수이고, 지금은 “저장소를 바꾸는” 역할은 없고 할 일만 합니다.
실습 2단계: 멤버 변수 + 메소드 (저장소와 그걸 다루는 함수)
목표: 멤버 변수(저장소) 와 그걸 바꾸는 메소드가 짝인 걸 느껴 봅니다.
- 같은 스크립트를 아래처럼 멤버 변수 + 메소드를 같이 쓰도록 바꿉니다.
using UnityEngine;
public class MemberMethodTest : MonoBehaviour
{
// 멤버 변수 (저장소): 클래스 안, 메소드 밖
private int myScore = 0;
// 메소드: 이 저장소(myScore)를 다루는 함수
void AddScore(int points)
{
myScore += points;
}
void Start()
{
Debug.Log("처음 점수: " + myScore); // 0
AddScore(50); // 메소드로 저장소를 바꿈
Debug.Log("AddScore(50) 후: " + myScore); // 50
AddScore(30);
Debug.Log("AddScore(30) 후: " + myScore); // 80
}
}
- Play → Console 확인: 0 → 50 → 80 순서로 출력.
-
정리:
myScore는 멤버 변수(저장소),AddScore()는 그 저장소를 바꾸는 메소드입니다. “저장소 + 그걸 다루는 함수”가 짝입니다. -
직접 해보기:
void SubtractScore(int points) { myScore -= points; }메소드를 추가하고, Start에서SubtractScore(10);호출 후 점수를 출력해 보세요. - 이어서: 로컬 vs 멤버 변수 차이를 더 느끼려면 멤버 변수와 로컬 변수 실습 1·2·3단계를 진행하세요.