Menu
Coddy logo textTech

구조체 또는 클래스

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

Swift의 지침은 struct로 시작하고, 클래스만 제공하는 기능이 필요할 때만 클래스를 선택하라는 것입니다. 구조체는 더 단순합니다. 각 변수는 자신의 값을 소유하므로 한 곳에서 변경해도 다른 곳의 코드가 예기치 않게 영향을 받지 않습니다.

struct Temperature {
    var celsius: Double
}

var today = Temperature(celsius: 21)
var yesterday = today
yesterday.celsius = 18
print(today.celsius)

출력:

21.0

하나의 객체를 공유해야 할 때 클래스를 선택하세요. 예를 들어 여러 화면에서 사용하는 하나의 은행 계좌처럼 프로그램의 여러 부분이 동일하게 변경되는 상태를 확인해야 하는 경우입니다. 또한 클래스는 구조체에는 없는 상속을 지원합니다.

class SharedLog {
    var lines: [String] = []
}

let log = SharedLog()
let moduleA = log
let moduleB = log
moduleA.lines.append("A started")
moduleB.lines.append("B started")
print(log.lines.count)

출력:

2

구조체는 ==를 자동으로 사용할 수 있습니다. 선언에 Equatable을 추가하면 Swift가 모든 프로퍼티를 비교합니다. 반면 클래스는 ===로 동일성을 비교합니다:

struct Point: Equatable {
    var x: Int
    var y: Int
}

print(Point(x: 1, y: 2) == Point(x: 1, y: 2))
print(Point(x: 1, y: 2) == Point(x: 2, y: 1))

출력:

true
false

빠르게 확인해 보자. 동일한 데이터를 가진 두 항목을 같은 것으로 취급해야 한다면 struct(점, 가격, 날짜)를 사용한다. 항목의 데이터가 다른 항목과 일치하더라도 중요한 정체성이 있다면(사용자 계정, 열려 있는 파일) class를 사용한다.

struct Money { var cents: Int }          // 500 센트는 500 센트입니다
class UserAccount {                      // 두 계정이 이름을 공유할 수 있습니다
    let id: Int
    var name: String
    init(id: Int, name: String) { self.id = id; self.name = name }
}
challenge icon

챌린지

쉬움

Point는 ==로 비교할 수 있어야 하는 구조체입니다. 준수(conformance)를 추가하고, 목록에 있는 서로 다른 점의 개수를 반환하는 countDistinct(_:)를 완성하세요(두 점은 두 좌표가 모두 일치할 때 동일합니다).

제공된 코드는 한 줄에 하나의 점을 x,y 형식으로 읽고, 개수와 함께 distinct: 를 출력합니다.

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

직접 해보기

// 제공된 입력/출력 코드: 그대로 유지하세요
var input: [String] = []
while let line = readLine() { input.append(line) }
let points = input.map { line -> Point in
    let p = line.split(separator: ",").map { Int($0)! }
    return Point(x: p[0], y: p[1])
}
print("distinct: \(countDistinct(points))")
quiz icon실력 점검

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

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

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