네임스페이스(namespace)는 스코프(scope)를 구현하는 하나의 방식입니다. 파이썬에서는 패키지, 모듈, 클래스, 함수, 메서드 각각이 고유한 "네임스페이스"를 가지며, 변수 이름은 이 네임스페이스 안에서 해석(resolve)됩니다.
함수, 모듈 또는 패키지가 평가되기 시작하면(즉, 실행이 시작되면) 네임스페이스가 생성됩니다. 이를 일종의 "실행 컨텍스트"라고 생각하면 이해하기 쉽습니다. 실행이 끝나면 해당 네임스페이스와 그 안의 변수들도 함께 소멸합니다. 만약 찾으려는 이름이 지역 네임스페이스에 없다면, 전역 네임스페이스(global namespace)에서 이름을 찾게 됩니다.
모듈(Module)이란?
파이썬에는 정의(definitions)를 하나의 파일에 작성해 두고, 이를 스크립트나 인터프리터의 대화형(interactive) 환경에서 재사용할 수 있는 방법이 있습니다. 이렇게 정의를 담고 있는 파일을 모듈(module)이라고 부르며, 모듈에 정의된 내용은 import 키워드를 통해 다른 모듈이나 메인(main) 모듈로 가져올 수 있습니다.
즉, 파이썬 모듈이란 재사용 가능한 코드를 캡슐화하는 하나의 꾸러미에 불과합니다. 모듈들은 __init__.py 파일이 들어 있는 폴더(디렉터리)에 위치하며, 함수뿐 아니라 클래스도 함께 포함할 수 있습니다.
클래스(Class)란?
반면 클래스는 애플리케이션의 메인 코드 안에서 직접 정의할 수도 있고, 애플리케이션이 임포트한 모듈 내부에 정의할 수도 있습니다. 클래스는 객체 지향 프로그래밍(OOP)의 핵심 요소로, 속성(properties)과 메서드(methods)를 포함할 수 있습니다.
모듈과 클래스의 핵심 차이
클래스는 여러 개의 인스턴스(instance)를 생성할 수 있지만, 모듈은 인스턴스를 만들 수 없다는 점이 가장 큰 차이입니다. 이러한 특성 때문에 모듈은 흔히 정적 클래스(static class)나 싱글턴(singleton)과 유사한 개념으로 비교되곤 합니다.