새소식

iOS/Swift

[기본문법]클래스와 구조체 비교

  • -

공통점

  • 값을 저장할 프로퍼티를 선언할 수 있다
  • 함수적 기능을 하는 메서드를 선언할 수 있다
  • 내부 값에 . 을 사용하여 접근할 수 있다
  • 생성자를 사용해 초기 상태를 설정할 수 있다
  • extension을 사용하여 기능을 확장할 수 있다
  • Protocol을 채택하여 기능을 설정할 수 있다

차이점

클래스

  • 참조타입
  • ARC로 메모리를 관리
  • 상속이 가능
  • 타입 캐스팅을 통해 런타임에서 클래스 인스턴스의 타입을 확인할 수 있음
  • deinit을 사용해여 클래스 인스턴스의 메모리 할당을 해제할 수 있음
  • 같은 클래스 인스턴스를 여러개의 변수에 할당한 뒤 값을 변경시키면 모든 변수에 영향을 줌(메모리가 복사됨)

 

구조체

  • 값타입
  • 구조체 변수를 새로운 변수에 할당할 떄마다 새로운 구조체가 할당
  • 즉 같은 구조체를 여러개의 변수에 할당한 뒤 값을 변경시키더라도 다른 변수에 영향을 주지 않음(값 자체를 복사)

코드로 확인

 

import UIKit

class SomeClass {
    var count: Int = 0
}

var class1 = SomeClass()
var class2 = class1
var class3 = class1
 
class3.count = 2              
class1.count                  //2

클래스는 참조타입이기 때문에 같은 클래스 인스턴스를 할당한 변수의 값을 변경시키면 참조된 인스턴스의 값이 변경된다. 즉 변수를 복사하더라도 하나의 인스턴스 주소값을 가리키고 있기 때문에 복사본과 원본이 모두 같은 값을 가지게 된다.

 

 

import UIKit

struct SomeStruct {
    var count: Int = 0
}

var struct1 = SomeStruct()
var struct2 = struct1
var struct3 = struct1
 
struct2.count = 3
struct3.count = 4

struct1.count       // 0
struct2.count       // 3
struct3.count       // 4

구조체는 값타입이기 때문에 같은 구조체 인스턴스를 할당하더라도 매번 새로운 메모리가 할당되어서 값을 변경하더라도 다른 구조체의 값에 영향을 주지 않는다.

 

 


글의 모든 내용은 패스트캠퍼스 강의를 시청하고 작성한 내용입니다.

End

 

'iOS > Swift' 카테고리의 다른 글

[기본문법]타입캐스팅  (0) 2022.12.21
[기본문법] 상속  (0) 2022.12.16
[기본문법] 프로퍼티  (0) 2022.10.28
[기본문법]초기화 구문 init  (0) 2022.10.28
[기본문법] 클래스  (0) 2022.10.28
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.