Python

Python / 24.02.28

JHDeveloper 2024. 2. 28. 13:28

# 정적 변수
# - 클래스 내에서 클래스 전체에 걸쳐 공유되는 변수
# - 모든 인스턴스에서 공통으로 사용
# => 하나의 인스턴스에서 해당 변수를 변경하면 다른 모든 인스턴스에서도 변경된 값 볼 수 있음













# 지역 변수, 전역 변수 차이 (변수의 범위(scope)), 인스턴스 변수

#1. 지역 변수
# - 함수 내에서 정의되거나 할당된 변수
# - 함수 내에서만 접근 가능
# - 함수가 호출될 때 생성되고, 함수의 실행이 종료될 때 파괴
# - 함수 내에서만 사용되는 데이터를 저장하는 데 유용

def example_function():
    # 함수 내에서 정의된 지역변수
    local_var = "This is a local variable"
   
example_function()
print(local_var)
# 함수 외부에서는 접근할 수 없음
# print(local_var)  # 오류 발생: NameError: name 'local_var' is not defined




#2. 전역 변수
# - 모든 함수 외부에서 정의된 변수
# - 프로그램 전체에서 접근 가능
# - 프로그램이 실행될 때 생성되고, 프로그램이 종료될 때까지 유지
# - 프로그램 내 여러 함수에서 공유되는 데이터를 저장하는 데 유용

global_var = "This is a global variable"

def example_function():
    # 전역변수를 함수 내부에서 사용
    print(global_var)


example_function()  # 출력: This is a global variable
print(global_var)   # 출력: This is a global variable

#* 함수 내부에서 global 키워드를 사용하여 수정 가능
# 그러나 전역변수를 함수 내부에서 수정하는 것은 코드를 이해하기 어렵게 만들 수 있으므로
# 피하는 것이 좋음. (함수가 많아지고 코드가 커질수록 변수의 범위를 추적하기 어려워져서)
# => 지역변수를 사용하여 함수 간 의존성을 최소화하는 것이 권장



#3. 인스턴스 변수(Instance Variables)
# - 클래스의 각 인스턴스마다 고유한 데이터를 저장하는 데 사용되는 변수
# - 클래스로부터 생성된 각 객체(instance)마다 서로 다른 값을 가질 수 있음
# - 클래스의 메서드 내부나 클래스의 생성자(constructor)에서 self 키워드를 사용하여 정의
# - self = 현재 인스턴스

class Car:
    def __init__(self, brand, model):
        # 인스턴스 변수 정의
        self.brand = brand
        self.model = model

    def display_info(self):
        # 인스턴스 변수에 접근하여 정보 출력
        print("Brand:", self.brand)
        print("Model:", self.model)

# Car 클래스의 인스턴스 생성
car1 = Car("Toyota", "Camry")
car2 = Car("Tesla", "Model S")

# 각 인스턴스의 정보 출력
car1.display_info()
car2.display_info()







variation = 1

def change_variation():
    print(variation)
    variation = 2 #전역변수와 이름이 같게 할 수 없음
    global variation
    variation = 2
    print(variation)

change_variation()
print(variation)

# 그냥 호출 시에는 전역 변수를 바로 사용해도 되지만, 변경을 하려면
# 함수 내에서 global 변수이름 이렇게 먼저 선언하고 변경해야 함.

# 파이썬에서는 전역변수와 지역변수의 이름이 같으면 오류가 발생

 

 

느낀점

1) 예전에 그렇게 배웠던 개념인데 아직도 헷갈리더라....

2) 애들한테 가르쳐주는데 코드가 작성 안되서 엄청 당황했음...

3) 하지만 침착하게 극복....