코딩초보 Python Modules 모듈 개념 잡기

이전 클래스 설명

python 공식 설명 :

https://docs.python.org/3/tutorial/modules.html

Python Modules 파이썬 모듈이란

Python Modules 모듈

파이썬 모듈은 파이썬 코드를 구성하고 재사용하기 위한 단위입니다. 모듈은 함수, 클래스, 변수 등의 코드를 담고 있는 파일로, 관련된 코드를 논리적으로 그룹화하여 코드의 구조와 가독성을 개선하고 재사용성을 높이는 역할을 합니다.

모듈의 특징과 장점:

  1. 재사용성: 모듈을 사용하여 코드를 논리적으로 분리하고, 다른 프로젝트나 파일에서 쉽게 재사용할 수 있습니다. 필요한 기능을 모듈로 작성하여 다른 프로젝트에서 가져와 사용할 수 있습니다.
  2. 네임스페이스 관리: 모듈은 네임스페이스를 제공하여 변수, 함수, 클래스 등의 이름 충돌을 방지하고, 코드의 구분을 용이하게 합니다.
  3. 모듈화된 프로그래밍: 큰 프로젝트를 모듈로 분할하여 작은 부분으로 나누어 개발하고 관리할 수 있습니다. 각 모듈은 독립적으로 작동하며, 코드 수정 및 유지보수가 용이합니다.
  4. 패키지와 계층 구조: 모듈을 패키지 안에 구성하여 계층적인 구조를 만들 수 있습니다. 이렇게 하면 비슷한 기능을 가진 모듈들을 논리적으로 그룹화하여 코드의 구조를 개선할 수 있습니다.

파이썬 모듈을 작성하려면 .py 확장자를 가진 파일을 생성하고, 그 안에 함수, 클래스, 변수 등을 작성하면 됩니다. 다른 파이썬 파일에서 import 문을 사용하여 모듈을 불러와 사용할 수 있습니다. 모듈은 파이썬 프로그래밍에서 코드의 구조화와 재사용성을 높이는 핵심 개념 중 하나입니다.

모듈예시

파이썬 모듈은 함수, 클래스 및 변수와 같은 관련된 코드를 논리적으로 그룹화하는 방법입니다. 모듈은 코드의 재사용성을 높이고 코드를 조직화하여 유지 관리를 용이하게 해줍니다. 각각의 파이썬 파일은 하나의 모듈로 간주됩니다.

예를 들어, 여러 함수와 변수가 있는 math_operations.py 모듈을 생성해보겠습니다:

# math_operations.py 파일

# math_operations.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

PI = 3.14159

# main.py 파일

# main.py
import math_operations

result = math_operations.add(5, 3)
print(result)

pi_value = math_operations.PI
print("The value of pi is:", pi_value)

클래스가 정의된 모듈

클래스가 정의된 모듈을 불러와서 해당 클래스를 사용하려면, 모듈 내의 클래스를 가져오는 작업이 필요합니다. 이를 위해 import 문을 사용합니다. 아래는 클래스가 정의된 모듈을 가져와서 해당 클래스를 사용하는 방법을 보여주는 예시입니다.

예를 들어, my_module.py라는 파일에 다음과 같이 클래스가 정의되어 있다고 가정해 봅시다:

# my_module.py 파일

# my_module.py
class MyClass:
    def __init__(self, value):
        self.value = value

    def print_value(self):
        print("Value:", self.value)

# main.py 파일

이제 이 모듈을 다른 파일에서 가져와서 MyClass 클래스를 사용할 수 있습니다:

# main.py
import my_module

obj = my_module.MyClass(42)
obj.print_value()

위의 코드에서 import my_modulemy_module.py 파일을 불러옵니다. 그리고 my_module.MyClass를 사용하여 해당 모듈 내에서 정의한 MyClass 클래스를 사용합니다.

모듈분리하는 기준

모듈을 분리하는 기준이나 팁은 프로젝트의 규모와 구조, 그리고 코드의 목적에 따라 다양할 수 있습니다. 모듈을 어떻게 분리할지 결정할 때는 프로젝트의 목적과 요구사항을 고려하며, 위의 기준과 팁을 참고하여 최적의 구조를 만들어 나가는 것이 중요합니다.

  1. 단일 책임 원칙(Single Responsibility Principle): 모듈은 하나의 기능 또는 역할을 가져야 합니다. 모듈이 한 가지 역할만 수행하도록 유지하여 코드를 더 간결하고 이해하기 쉽게 만들 수 있습니다.
  2. 응집도(Cohesion): 모듈 내부의 요소들이 서로 연관되고 관련된 작업을 수행하는 것을 의미합니다. 모듈이 높은 응집도를 갖도록 설계하면 유지보수와 확장이 용이해집니다.
  3. 결합도(Coupling): 모듈 간의 의존성을 최소화하고 느슨한 결합을 유지하는 것이 중요합니다. 하나의 모듈 변경이 다른 모듈에 영향을 미치는 것을 최소화하여 코드를 더 견고하게 만듭니다.
  4. 분리된 관심사(Separation of Concerns): 비슷한 유형의 기능이나 관심사를 가진 코드를 한 모듈에 묶어 분리합니다. 이렇게 하면 각 모듈은 특정 작업을 담당하고, 코드를 이해하거나 수정하기가 더 쉬워집니다.
  5. 재사용 가능한 모듈: 비슷한 기능을 여러 프로젝트에서 재사용할 수 있는 모듈을 따로 분리하여 개발합니다. 이렇게 하면 코드의 중복을 피하고 효율적인 개발이 가능해집니다.
  6. 계층 구조(Layering): 코드를 여러 계층으로 나누어 구조화할 수 있습니다. 예를 들어, 데이터 액세스, 비즈니스 로직, 프레젠테이션 계층 등으로 나누어 개발하면 코드의 관리와 확장성을 향상시킬 수 있습니다.
  7. 모듈 이름: 모듈의 이름은 해당 모듈이 어떤 기능을 수행하는지 명확하게 표현해야 합니다. 의미 있는 이름을 선택하여 코드를 이해하기 쉽게 만듭니다.
  8. 테스트 용이성: 모듈을 분리할 때 테스트하기 쉽도록 설계합니다. 모듈이 작고 단순하면 테스트도 더 간편하게 진행할 수 있습니다.

if __name__ == “__main__” 이건 뭐야

if __name__ == "__main__"은 파이썬 스크립트 파일이 직접 실행될 때 코드 블록을 실행하는 조건문입니다. 이 조건문을 사용하여 스크립트 파일이 모듈로서 불러올 때는 특정 코드 블록이 실행되지 않도록 할 수 있습니다.

파이썬 스크립트는 두 가지 주요 방식으로 실행될 수 있습니다:

  1. 직접 실행: 스크립트 파일을 직접 실행할 때 스크립트 내의 코드가 실행됩니다.
  2. 모듈로 불러옴: 다른 파이썬 스크립트나 모듈에서 해당 스크립트를 import하여 사용할 때, 스크립트 내의 코드가 실행되지 않습니다.

따라서, if __name__ == "__main__": 구문을 사용하여 스크립트 파일이 직접 실행될 때만 특정 코드 블록을 실행하게 할 수 있습니다. 이것은 스크립트를 모듈로 불러와서 재사용할 때 원하지 않는 코드 실행을 방지하는 데 도움이 됩니다.

예를 들어, 다음과 같은 코드를 가정해봅시다:

def main():
    print("This is the main function.")

if __name__ == "__main__":
    main()

위 코드에서 main() 함수는 if __name__ == "__main__": 블록 내에서 실행됩니다. 이렇게 하면 스크립트 파일이 직접 실행될 때만 main() 함수가 호출되고, 다른 스크립트에서 모듈로서 불러와 사용될 때는 main() 함수가 호출되지 않습니다.

복잡한 모듈들을 지도를 만들자 ( 모듈 시각화)

파이썬 코드의 복잡한 모듈 간 관계를 시각화하기 위해 여러 도구와 라이브러리를 활용할 수 있습니다. 아래에 몇 가지 예시를 제시하겠습니다:

  1. pydeps: 파이썬 코드의 의존성을 분석하여 그래프 형태로 시각화해주는 도구입니다. pydeps는 모듈 간의 종속성을 그래프로 나타내고, 이를 통해 복잡한 구조를 시각적으로 이해할 수 있도록 도와줍니다.
  2. Pyreverse (pylint): pylint는 파이썬 코드의 정적 분석 도구로, pyreverse라는 기능을 통해 코드의 클래스, 패키지, 모듈 간의 관계를 UML 다이어그램으로 시각화할 수 있습니다.

이러한 도구들은 파이썬 코드의 복잡한 모듈 간 관계를 분석하고 시각화하는 데 사용될 수 있습니다. 어떤 도구를 선택할지는 프로젝트의 요구사항과 개발자의 선호도에 따라 다를 수 있습니다.

댓글 남기기

%d 블로거가 이것을 좋아합니다: