✅ 클래스 변수 vs 인스턴스 변수 vs ClassVar 완벽 정리

2025. 5. 27. 13:34·기술블로그-Fastapi편

✅ 클래스 변수 vs 인스턴스 변수 vs ClassVar 완벽 정리

1. 🎯 개념 요약

항목 클래스 변수 (Class Variable) 인스턴스 변수 (Instance Variable) ClassVar

정의 위치 클래스 안, 메서드 밖 메서드 내부 (self. 사용) 클래스 안에서 타입 힌트로 사용
값 공유 여부 ✅ 모든 인스턴스에서 공유 ❌ 인스턴스마다 별도로 존재 ✅ 클래스 전체 공유 (명시 목적)
수정 시 영향 전체 인스턴스에 영향 해당 인스턴스에만 영향 타입 검사기용 (실행에는 영향 없음)
주 사용 목적 공통 설정값, 상수 등 개별 속성 저장 정적 타입 분석 정확도 향상

2. 📌 코드 예시 비교

✅ 클래스 변수

class Dog:
    species = "Canine"  # 클래스 변수

    def __init__(self, name):
        self.name = name  # 인스턴스 변수

✅ 인스턴스 변수

a = Dog("바둑이")
b = Dog("멍멍이")

print(a.name)  # 바둑이
print(b.name)  # 멍멍이

✅ 클래스 변수는 공유됨

print(a.species)  # Canine
Dog.species = "강아지"
print(b.species)  # 강아지 ← 클래스 변수는 전체 공유

3. ✅ ClassVar란?

from typing import ClassVar

class Dog:
    species: ClassVar[str] = "Canine"  # 명시적 클래스 변수

    def __init__(self, name: str):
        self.name = name
  • ClassVar는 타입 힌트용 키워드로, 이건 인스턴스 변수가 아니다! 라는 의도를 분명히 전달합니다.
  • 런타임엔 영향이 없고, mypy/pyright 같은 정적 분석기에서만 검사합니다.

4. 🧠 요약 정리

질문 답변

클래스 변수는 어디서 정의? 클래스 본문 내 (함수 밖)
인스턴스 변수는 어디서 정의? __init__ 등 메서드 내 self. 사용
ClassVar는 왜 쓰나요? 정적 분석기에게 클래스 변수임을 명확히 알려주기 위해
런타임에서 강제되나요? ❌ 아니요. 타입 검사기에만 사용됨

🔚 마무리 팁

  • 공통값은 클래스 변수로, 개별값은 인스턴스 변수로 구분해서 사용하세요.
  • ClassVar는 협업 시 변수의 역할을 명확히 구분해주는 의사소통 도구입니다.
  • 정적 분석기를 사용한다면 ClassVar를 적극 활용해보세요!

'기술블로그-Fastapi편' 카테고리의 다른 글

✅ 왜 Base62 인코딩을 사용하는가?  (0) 2025.05.27
✅ Base62의 encode() 메서드 완전 정리  (0) 2025.05.27
✅ Python의 Final 키워드 완벽 정리  (0) 2025.05.27
✅ Python / FastAPI Annotated + Field 문법 정리: 실행에 영향이 있을까?  (0) 2025.05.27
✅ FastAPI 접속 주소 정리: 0.0.0.0 vs 127.0.0.1  (0) 2025.05.27
'기술블로그-Fastapi편' 카테고리의 다른 글
  • ✅ 왜 Base62 인코딩을 사용하는가?
  • ✅ Base62의 encode() 메서드 완전 정리
  • ✅ Python의 Final 키워드 완벽 정리
  • ✅ Python / FastAPI Annotated + Field 문법 정리: 실행에 영향이 있을까?
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (702)
      • Python (32)
      • 프로젝트 (43)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (40)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (4)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
✅ 클래스 변수 vs 인스턴스 변수 vs ClassVar 완벽 정리
상단으로

티스토리툴바