점진적 과부하 개발 블로그

Swift 클래스와 구조체 본문

Swift/문법

Swift 클래스와 구조체

지용빡 2021. 12. 26. 23:24
반응형
클래스(class)와 구조체(structure)의 공통점 
  • https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html  
  • 프로퍼티를 정의할 수 있다.
  • 메서드를 정의할 수 있다.
  • []를 사용해 첨자(subscript) 문법으로 내부의 값을 액세스할 수 있는 첨자를 정의할 수 있다.
  • 초기 상태 설정을 위한 초기화 함수(initializer)를 정의할 수 있다.
  • extension 가능 (extension Double {})
  • protocol 채택 가능 (class Man : Runnable {}) 
클래스(class)와 구조체(structure)의 차이점

클래스(Class)

  • 상속이 가능하다.
  • 타입 캐스팅(is as as? as!) 을 통해 실행 시점에 클래스 인스턴스 타입을 검사하고 해석 가능하다.
  • deinitializer(deinit{}) 로 사용한 자원을 반환 가능
  • 참조 카운팅을 통해 한 클래스 인스턴스를 여러 곳에서 사용 가능하다.
클래스/구조체 정의하기

클래스 정의하기

  • class 이름 { ... }

구조체 정의하기

  • struct 이름 { ... }

타입 이름에는 Upper Camel Case를 사용

클래스/구조체 안의 프로퍼티나 메서드는 lower Camel Case를 사용

struct Example {
	var x = 0
    var y = 0
}

class Test {
	var a = Example()
    var b = false
    var c = 0.0
    var d = String?
}
구조체는 값 타입(value type) 클래스는 참조 타입(reference type)
struct Human {
    var age : Int = 10
}
var park = Human()
var ho = park // 값 타입
print(park.age, ho.age) // 10, 10
ho.age = 20
print(park.age, ho.age) // 10, 20
park.age = 30
print(park.age, ho.age) // 30, 20
// 값 타입은 복사할 때 새로운 데이터가 하나 더 생긴다.

class Human {
    var age : Int = 10
}
var park = Human()
var ho = park // 참조 타입
print(park.age, ho.age) // 10, 10
ho.age = 20
print(park.age, ho.age) // 20, 20
park.age = 30
print(park.age, ho.age) // 30, 30
// 참조 타입은 복사할 때 주소를 복사해서
// 한 데이터의 reference가 2개 생긴다.

 

언제 클래스를 쓰고 언제 구조체를 쓰나?

클래스는 참조타입, 구조체는 값 타입

  • 구조체는 간단한 데이터 값들을 한데 묶어서 사용하는 경우
  • 전체 덩어리 크기가 작은 경우, 복사를 통해 전달해도 좋은 경우 구조체
  • 멀티 쓰레드 환경이라면 구조체가 더 안전
  • 구조체는 상속할 필요가 없는 경우(너비, 높이를 표현하는 기하학적 모양을 처리할 경우, 시작값, 증분, 길이 등으로 순열을 표현할 경우, 3차원 좌표 시스템의 각 좌표)

참고 문헌 : iOS 프로그래밍 실무 한성현 교수님 강의 내용 변형 및 요약

반응형

'Swift > 문법' 카테고리의 다른 글

Swift 클로저(Closure)  (0) 2022.01.06
Swift guard문  (0) 2022.01.05
Swift 문법 정리 1  (0) 2022.01.03
Swift 구조체(Struct)  (0) 2021.12.23
Swift 열거형(enum)  (0) 2021.12.23