1. 패키지 파일 시작하기 @Work

SteadySlower·2023년 10월 22일
0

iOS Development

목록 보기
34/38

안녕하세요. 지난 번 포스팅에서 3개의 회사 제품에서 공통으로 쓰이는 코드를 하나로 묶어서 관리하는 패키지를 만들기로 한 배경을 설명 드렸습니다. 이번 포스팅에서는 본격적으로 Swift로 패키지 만들기는 방법을 소개 해보록 하겠습니다.

패키지 파일 만들기

일단 Xcode에서 File-New-Package를 선택해서 새로운 패키지를 만듭니다.

Package.swift 파일 살펴보기

처음에 패키지를 만들면 가장 상단에 아래와 같은 내용을 가진 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"]),
    ]
)

참고) product의 종류

위 코드에서 products에는 해당 패키지가 바깥으로 보여줄 프로덕트들을 정의하는데요. 기본적은 library 말고도 executable과 plugin의 2종류가 더 있습니다.

현재 알아야할 필요한 것은 library 뿐이지만 나머지 2개에 대해서도 간단하게 설명하고 넘어가도록 하겠습니다.

  • library는 다른 프로젝트에서 사용할 수 있는 코드를 의미합니다. 개발자는 library의 코드를 자신의 프로그램 개발에 사용할 수 있습니다.
  • executable은 하나의 완전히 독립된 프로그램을 의미합니다.
  • plugin은 프로그램의 핵심 코드를 수정할 필요 없이 특정 기능을 수행할 수 있는 프로그램을 의미합니다.

저도 좀 헷갈리는 개념이었는데요. 자세한 것은 별도의 포스팅에서 소개하도록 하겠습니다.

예제 코드 살펴보기

처음에 패키지를 작성하면 아래와 같은 예제 코드가 있습니다. 일반적은 어플리케이션과는 다르게 public이라는 접근제한자 (Access Modifier)가 눈에 띄는데요. 이 접근 제한자에 대해서는 다음 포스팅에서 자세하게 알아보도록 하고 일단 아래 예제 코드를 하나하나 설명해보도록 하겠습니다.

public struct SamplePackage {
    public private(set) var text = "Hello, World!"

    public init() {
    }
}
  • 구조체 “SamplePackage”가 선언되어 있습니다. 그리고 앞에 public으로 선언이 되어 있죠. 이는 이 구조체가 Package 외부에서도 접근될 수 있음을 의미합니다.
  • 다만 struct의 모든 것이 Package 외부에서 접근될 수 있는 것은 아닙니다. public으로 선언된 property와 initializer만 접근할 수 있습니다. 따라서 property 하나와 init 하나가 각각 public으로 선언된 것을 확인할 수 있습니다.

마치며

다음 포스팅에서는 본격적으로 모듈화의 필수 개념인 접근 제한자에 대해서 알아보도록 하겠습니다!

profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글