Menu
Coddy logo textTech

구조체

Coddy Swift 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 7번째.

구조체는 클래스처럼 데이터와 메서드를 그룹화합니다. Swift는 모든 구조체에 대해 멤버별 이니셜라이저를 작성하며, 각 프로퍼티마다 하나의 매개변수를 가집니다. 따라서 구조체에는 자체 init이 필요하지 않습니다:

struct Point {
    var x: Int
    var y: Int

    func distanceFromOrigin() -> Int {
        abs(x) + abs(y)
    }
}

let p = Point(x: 3, y: -4)
print(p.x)
print(p.distanceFromOrigin())

출력:

3
7

기본값이 있는 속성은 멤버별 이니셜라이저에서 생략할 수 있습니다:

struct Settings {
    var volume = 5
    var muted = false
}

let quiet = Settings(volume: 1)
print(quiet.volume)
print(quiet.muted)

출력:

1
false

let 상수에 저장된 구조체는 전혀 변경할 수 없으며, var 프로퍼티조차 변경할 수 없습니다. 변경하려면 var에 저장하세요:

let fixed = Point(x: 1, y: 2)
// fixed.x = 5    // error: 할당할 수 없음, fixed는 let 상수입니다

var moving = Point(x: 1, y: 2)
moving.x = 5       // 괜찮음

Swift 자체의 많은 타입은 구조체입니다: Int, Double, String, Array 및 Dictionary. 여러분의 구조체도 이러한 타입과 같은 방식으로 동작합니다. 즉, 단순한 값입니다.

struct Money {
    var cents: Int
    func formatted() -> String {
        "\(cents / 100).\(cents % 100 < 10 ? "0" : "")\(cents % 100)"
    }
}

print(Money(cents: 1250).formatted())
print(Money(cents: 305).formatted())

출력:

12.50
3.05
challenge icon

챌린지

쉬움

Item 구조체를 선언하고 name(String), price(Int, 센트 단위), quantity(Int) 속성을 추가하세요. 가격과 수량을 곱한 값을 반환하는 total() 메서드와 2 x tea = 350을 반환하는 line() 메서드를 추가하세요.

제공된 코드는 한 줄마다 하나의 항목을 name,price,quantity 형식으로 읽고, 멤버별 초기화 프로그램을 사용하여 각 Item을 생성한 다음 line()을 출력합니다. 그런 다음 sum: 과 모든 합계의 합을 출력합니다.

코드는 Item.swift에 작성하세요. main.swift에는 제공된 입력/출력 코드가 있으며 편집할 수 없습니다.

직접 해보기

// 제공된 입력/출력 코드: 그대로 유지하세요
var input: [String] = []
while let line = readLine() { input.append(line) }
var sum = 0
for row in input {
    let p = row.split(separator: ",").map(String.init)
    let item = Item(name: p[0], price: Int(p[1])!, quantity: Int(p[2])!)
    print(item.line())
    sum += item.total()
}
print("sum: \(sum)")
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: Swift 플레이그라운드