멤버변수, 지역변수, 전역변수 개념정리

DevBison·2025년 8월 13일

1. 멤버변수 (Member Variable)

  • 위치: 클래스(또는 구조체) 안에 선언

  • 수명: 객체가 생성될 때 메모리에 할당되고, 객체가 소멸될 때 해제됨

  • 접근 범위: 접근 지정자(public, protected, private)에 따라 달라짐

  • 특징

    • 객체마다 개별적으로 존재 (인스턴스 변수)
    • static을 붙이면 모든 객체가 공유 (정적 멤버변수)
  • 예시

    class Player {
    public:
        int Health; // 멤버변수
    };
    
    Player p1;
    p1.Health = 100;

2. 지역변수 (Local Variable)

  • 위치: 함수나 블록({}) 안에 선언

  • 수명: 해당 블록 실행 시 생성, 블록 종료 시 해제

  • 접근 범위: 선언된 블록 내부에서만 사용 가능

  • 특징

    • 메모리에 잠깐 존재 (스택 메모리)
    • 같은 이름의 지역변수가 있으면 바깥 변수(전역/멤버)를 가림(Shadowing)
  • 예시

    void Test() {
        int x = 10; // 지역변수
        x++;
    } // 여기서 x는 사라짐

3. 전역변수 (Global Variable)

  • 위치: 모든 함수·클래스 바깥에 선언

  • 수명: 프로그램 시작 시 생성, 종료 시 해제

  • 접근 범위: 선언된 파일 전체(다른 파일에서 extern으로 참조 가능)

  • 특징

    • 어디서든 접근 가능하지만, 남발 시 유지보수 어려움
    • 멀티스레드 환경에서 동기화 문제 발생 가능
  • 예시

    int Score = 0; // 전역변수
    
    void AddScore() {
        Score += 10; // 어디서든 접근 가능
    }

4. 비교 표

구분선언 위치수명접근 범위메모리 위치
멤버변수클래스 내부객체 생성~소멸접근 지정자에 따라힙/스택/데이터 영역
지역변수함수·블록 내부블록 시작~종료블록 내부스택
전역변수모든 함수·클래스 밖프로그램 시작~종료전역데이터 영역

5. 추가 팁

  • 지역변수 우선 사용: 예측 가능하고 버그 방지
  • 전역변수 최소화: 필요하면 static으로 파일 한정
  • 멤버변수 초기화: 생성자에서 확실히 초기화
profile
응애 개발자

0개의 댓글