안녕하세요. 지난 번 포스팅에서 3개의 회사 제품에서 공통으로 쓰이는 코드를 하나로 묶어서 관리하는 패키지를 만들기로 한 배경을 설명 드렸습니다. 이번 포스팅에서는 본격적으로 Swift로 패키지 만들기는 방법을 소개 해보록 하겠습니다.
일단 Xcode에서 File-New-Package를 선택해서 새로운 패키지를 만듭니다.
처음에 패키지를 만들면 가장 상단에 아래와 같은 내용을 가진 Package.swift 파일을 볼 수 있습니다. 설명은 아래 코드에 간단하게 주석을 달아두었습니다.
// swift-tools-version: 5.8
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "SamplePackage", //👉 패키지의 이름
products: [ //👉 패키지의 내용이 정의되는 부분 (여러 개 가능)
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "SamplePackage", //👉 라이브러리의 이름 (= import할 때 쓸 이름)
targets: ["SamplePackage"]) //👉 라이브러이의 빌드 타겟
],
dependencies: [ //👉 해당 패키지가 의존하는 코드
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [ //👉 타겟을 정의하는 곳
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "SamplePackage",
dependencies: []),
.testTarget(
name: "SamplePackageTests",
dependencies: ["SamplePackage"]),
]
)
위 코드에서 products에는 해당 패키지가 바깥으로 보여줄 프로덕트들을 정의하는데요. 기본적은 library 말고도 executable과 plugin의 2종류가 더 있습니다.
현재 알아야할 필요한 것은 library 뿐이지만 나머지 2개에 대해서도 간단하게 설명하고 넘어가도록 하겠습니다.
저도 좀 헷갈리는 개념이었는데요. 자세한 것은 별도의 포스팅에서 소개하도록 하겠습니다.
처음에 패키지를 작성하면 아래와 같은 예제 코드가 있습니다. 일반적은 어플리케이션과는 다르게 public이라는 접근제한자 (Access Modifier)가 눈에 띄는데요. 이 접근 제한자에 대해서는 다음 포스팅에서 자세하게 알아보도록 하고 일단 아래 예제 코드를 하나하나 설명해보도록 하겠습니다.
public struct SamplePackage {
public private(set) var text = "Hello, World!"
public init() {
}
}
다음 포스팅에서는 본격적으로 모듈화의 필수 개념인 접근 제한자에 대해서 알아보도록 하겠습니다!