객체 지향 프로그래밍(OOP)이란?
OOP(Object-Oriented Programming, 객체 지향 프로그래밍)는 프로그래밍 방법론의 심장이라 불리는 패러다임으로, 다형성(polymorphism), 캡슐화(encapsulation), 데이터 은닉(data hiding), 데이터 추상화(data abstraction), 상속(inheritance), 모듈화(modularity) 등 다양한 핵심 개념을 포함합니다.
OOP는 데이터를 최우선으로 고려하며, 데이터와 연관된 함수를 통해 인터페이스를 제공합니다. 객체(object)는 스스로 완결된(self-sufficient) 엔티티로서, 필요한 변수와 관련 함수를 모두 함께 지니고 있습니다. 객체가 가진 특성(변수)과 기능(메서드)을 통칭하여 속성(attribute)이라고 부릅니다.
모듈화(Modularity)란 무엇인가?
모듈화란 코드를 여러 개의 모듈로 나누어 각각 먼저 작성한 후, 이를 연결하고 최종적으로 결합해 하나의 완성된 프로젝트를 만드는 작업을 말합니다. 모듈화는 코드의 재사용성을 보장하고 중복을 최소화하는 데 매우 효과적입니다.
파이썬에서 모듈(module)이란 파이썬 정의문과 메서드, 문장들이 담긴 하나의 파일을 의미합니다. 모듈 이름은 파일 이름에서 확장자 ".py"를 제거한 것입니다. 예를 들어 파일 이름이 prime.py라면 모듈 이름은 prime이 됩니다.
그럼 직접 모듈을 만들어 보겠습니다. 아래 코드를 prime.py 파일로 저장합니다.
예제
def isPrimenot(n):
# 특수 케이스 처리
if n <= 1:
print("False")
return
if n <= 3:
print("True")
return
if n % 2 == 0 or n % 3 == 0:
print("False")
return
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
print("False")
return
i += 6
print("True")
명령줄에서 모듈을 임포트해 실행하면 다음과 같은 결과를 확인할 수 있습니다.
명령줄 실행 결과
>>> import prime >>> prime.isPrimenot(3) True >>> prime.isPrimenot(8) False
모듈의 함수에 짧은 지역 이름을 할당해 두면 더욱 편리하게 호출할 수도 있습니다.
명령줄 실행 결과
>>> import prime >>> p = prime.isPrimenot >>> p(8) False
또한 여러 모듈을 동시에 임포트하여 명령줄에서 함께 활용하는 것도 가능합니다.
명령줄 실행 결과
>>> import prime >>> import math >>> p = prime.isPrimenot >>> p(math.log(2, math.pow(2, 8))) False
이처럼 한 번 작성해 둔 코드를 반복해서 작성할 필요 없이 여러 곳에서 재사용할 수 있습니다. 즉, 모듈화는 코드 재사용성을 높이고 모듈 간 의존성을 최소화하는 데 큰 역할을 합니다.
팁: 각 모듈은 하나의 인터프리터 세션에서 딱 한 번만 임포트됩니다. 따라서 모듈의 내용을 수정한 뒤 변경 사항을 반영하려면 인터프리터를 다시 시작해야 합니다.
인터프리터를 재시작하지 않고도 아래 문장을 실행해 모듈을 다시 불러올 수 있습니다. 참고로 Python 3에서는 내장 reload() 함수가 제거되었으므로 importlib 모듈을 사용해야 합니다.
>>> import importlib >>> importlib.reload(prime)
결론
이번 글에서는 Python 3.x 환경에서 코드 재사용성과 모듈화의 개념을 살펴보았습니다. 모듈을 잘 활용하면 중복 없이 깔끔하고 유지보수가 쉬운 코드를 작성할 수 있으며, 프로젝트 전체의 구조 또한 한층 체계적으로 관리할 수 있습니다.