🔥 모듈이란?

339자
5분

Swift 프로그래밍 언어로 코드를 작성할 때 모듈(Module)이라는 개념을 알아둘 필요가 있어요. 여러분이 만든 프로그램 코드를 Swift는 모듈 단위로 묶어서 관리해요.

모듈은 마치 책꽂이와 비슷해요. 책꽂이 안에는 여러 권의 책들이 꽂혀 있는 것처럼, 모듈 안에는 서로 관련있는 코드들이 잘 정리되어 담겨 있어요. 그리고 책꽂이마다 책을 꽂는 규칙이 있는 것처럼, 모듈도 어떤 코드는 모듈 밖에서도 사용할 수 있게 하고, 어떤 코드는 모듈 안에서만 사용하도록 정할 수 있어요.

여러분이 만든 프로그램은 단 하나의 모듈로 구성될 수도 있고, 여러 개의 모듈을 가져와서 조립하는 형태일 수도 있어요. 다른 모듈을 가져와 사용하는 것을 의존성(Dependency)이라고 해요. 운영체제에서 기본으로 제공하는 모듈 외에는 대부분 코드를 따로 다운로드 받아서 빌드해야 사용할 수 있답니다.

만약 사진 공유 앱과 날씨 예보 앱을 만든다고 가정해 볼게요. 두 앱 모두 인터넷에서 데이터를 가져와야 하는 공통점이 있어요. 이럴 때 네트워크 요청을 담당하는 코드를 별도의 모듈로 분리하면, 두 앱에서 모두 그 모듈을 가져다 쓸 수 있겠죠? 나중에 더 좋은 네트워크 모듈이 나오면 손쉽게 교체할 수도 있고요. 이렇게 모듈화를 잘 활용하면, 여러분은 앱의 핵심 기능에만 집중할 수 있답니다.

모듈은 많으면 많을수록 좋아요. Swift 패키지 매니저(Swift Package Manager)는 앱과 라이브러리를 여러 모듈로 쪼개는 것을 굉장히 쉽게 만들어 줘요.

그럼 Swift 패키지 매니저가 여러분의 코드를 어떻게 컴파일하는지 살펴볼까요? 패키지 매니저는 소스 코드가 파일 시스템에 어떻게 배치되어 있는지를 보고 컴파일 방법을 결정해요. 물론 이 규칙을 무시하고 원하는 대로 커스터마이징할 수도 있어요. 가장 단순한 프로젝트 구조는 이렇습니다.

foo/Package.swift
foo/Sources/main.swift
text

Package.swift는 패키지에 대한 정보가 담긴 파일이에요. 자세한 내용은 뒤에서 다룰 거예요.

foo 디렉토리에서 아래 명령어를 실행하면:

swift build
text

Swift 패키지 매니저는 foo라는 이름의 실행 파일을 하나 만들어 낼 거예요.

패키지 매니저 입장에서는 모든 것이 패키지예요. 그래서 항상 Package.swift 파일이 있어야 해요. 그렇다고 여러분이 만든 코드를 반드시 다른 사람들에게 공개해야 하는 건 아니에요. 여러분만의 앱을 개발할 때도 얼마든지 패키지 매니저를 활용할 수 있답니다. 그러다가 언젠가 코드를 공개하고 싶어졌을 때는, 별도의 수정 없이 바로 배포할 수 있는 상태가 되는 거죠. Swift 패키지 매니저는 코드 공유 방식에 구애받지 않아요. 개인 프로젝트는 물론, 팀이나 회사 내에서, 전 세계 개발자들과 함께 얼마든지 코드를 공유할 수 있습니다.

참고로 Swift 패키지 매니저 자신의 소스 코드도 위에서 설명한 규칙을 그대로 따르고 있어요.