[Swift] Structure

Dzeko·2021년 8월 4일

Swift 기본

목록 보기
18/20
post-thumbnail

Structure

관계가 있는 것들을 묶어서 표현함

Structure vs Class

Structure -> value types (새로운 인스턴스를 할당해서 사용함 copy)

할당되는 공간이 Stack임

Class -> reference types (참조됨)

할당되는 공간이 Heap임

ex)
편의점

  • 브랜드
  • 위치
  • 로고
  • 물품목록

Class vs. Structure 동작 차이 알아보기

class PersonClass {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}


struct PersonStruct {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

let pClass1 = PersonClass(name: "Jason", age: 5)
let pClass2 = pClass1
pClass2.name = "Hey"

pClass1.name // "Hey"
pClass2.name // "Hey"


var pStruct1 = PersonStruct(name: "Jason", age: 5)
var pStruct2 = pStruct1
pStruct2.name = "Hey"

pStruct1.name // "Jason"
pStruct2.name // "Hey"

도전과제

1. 강의 이름, 강사이름, 학생수를 가지는 Struct 만들기(Lecture)

struct Lecture {
    var name: String
    var instructor: String
    var numOfStudents: Int
}

2. 강의 Array와 강사이름을 받아서 해당 강사의 강의 이름을 출력하는 함수 만들기

func printTeacher (_ instructor: String, lectures: [Lecture]) {
//    방법 1
    var lectureName = ""

    for lecture in lectures {
        if instructor == lecture.instructor {
            lectureName = lecture.name
        }
    }
//    방법 2 - closure 활용
    let lectureName = lectures.first { (lec) -> Bool in
        return lec.instructor == instructor
    }?.name ?? "폐강"
    
    print("아 그분 강의는 \(lectureName)입니다.")
}

3. 강의 3개 만들고 강사이름으로 강의 찾기

let lec1 = Lecture(name: "한일관계사", instructor: "세키네 히데유키", numOfStudents: 30)
let lec2 = Lecture(name: "일본어강독", instructor: "탁성숙", numOfStudents: 50)
let lec3 = Lecture(name: "미디어일본어", instructor: "박진수", numOfStudents: 50)
let lectures = [lec1, lec2, lec3]

printTeacher("김두한", lectures: lectures)

0개의 댓글