Swift.Struct and Class

junseole·2021년 8월 8일
0

Swift-Basic

목록 보기
2/12
post-thumbnail

스위프트 프로그래밍 3판을 보고 정리한 내용입니다.

구조체(Struct)


대문자 카멜 케이스를 통해 명명해주면 된다.

프로퍼티와 메서드는 소문자 카멜 케이스를 사용한다.

구조체 생성


struct Person{
  var name: String
  var age: Int
}

구조체 인스턴스 생성 및 초기화


var personInfo:Person = Person(name:"junseole",age:27)

var personInfo.age = 30 // 변경 가능

let personInfo2:Person = Person(name:"junseole",age:27)

personInfo2.name = "nojunseole" // 변경 불가

클래스(Class)


대문자 카멜 케이스를 통해 명명해주면 된다.

프로퍼티와 메서드는 소문자 카멜 케이스를 사용한다.

클래스 생성


class Person{
  var name:String = ""
  var age:Int = 0
}

클래스 인스턴스 생성 및 초기화


var personInfo:Person = Person()
personInfo.name = "junseole"
personInfo.age = 27

let personInfo2:Person = Person()
personInfo2.name = "junseole" //오류가 나지 않는다.
personInfo2.age = 27

클래스 인스턴스의 소멸


class Person{
  var name:String = ""
  var age:Int = 0
  
  deinit{
    print("Person 클래스의 인스턴스가 소멸됩니다.")
  }
}

var personInfo:Person? = Person()
personInfo = nil //Person 클래스의 인스턴스가 소멸됩니다.

구조체(Struct)와 클래스(Class)의 차이


같은 점

  1. 값을 저장하기 위해 프로퍼티를 정의할 수 있다.
  2. 기능 실행을 위해 메서드를 정의할 수 있다.
  3. 서브스크립트 문법을 통해 구조체 또는 클래스가 갖는 값에 접근하도록 서브스크립트를 정의할 수 있다.
  4. 초기화될 때의 상태를 지정하기 위해 이니셜라이저를 정의할 수 있다.
  5. 초기구현과 더불어 새로운 기능 추가를 위해 익스텐션을 통해 확장할 수 있다.
  6. 특정 기능을 실행하기 위해 특정 프로토콜을 준수할 수 있다.

다른 점

  1. 구조체는 상속할 수 없다.
  2. 타입캐스팅은 클래스의 인스턴스에만 허용된다.
  3. 디이니셜라이저는 클래스의 인스턴스에만 활용할 수 있다.
  4. 참조 횟수 계산은 클래스의 인스턴스에만 적용된다.

구조체 vs 클래스

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

스위프트의 기본 데이터 타입은 모두 구조체

둘중 어느것을 써야 하는가

애플 가이드라인에서 다음 조건중 하나 이상 해당한다면 구조체를 사용하는 것을 권장하고 있다.

  1. 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때
  2. 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때
  3. 구조체에서 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때
  4. 다른 타입으로부터 상속받거나 자신을 상속할 필요가 없을 때
profile
Swift와 함께 여행중입니다.

0개의 댓글