swift & iOS/swift

[swift] struct vs. class 구조체와 클래스 (간단함 주의)

whale3 2022. 1. 20. 23:41

구조체와 클래스.................................

말만 들어도 정말 쓸 내용이 많아 보이는데, 일단 여기서는 간단하게 struct와 class 비교에 대해서만 정리하려고 한다. 

보충할 내용 있으면 따로 쓰던가 여기에 더 붙여서 작성하려고 한다.


struct은 상속 기능이 없다. 그러나 class는 부모 클래스를 가질 수 있고 상속 기능이 있다. 

class MyClass: ParentClass {

}

 

struct은 프로퍼티에 초기값이 없어도 자동으로 init() 해주지만 class는 프로퍼티에 초기값을 할당하지 않을 땐 class 내부에 init()을 꼭 작성해야 한다. 

 

struct은 passed by value이고 class는 passed by reference이다. 이게 무슨 중요한 부분은 다 영어로 써놨네... 

passed by reference 는 특정 객체를 가리키는 '주소'를 공유한다는 것이다. 아래처럼 userOne에 객체를 할당한 후에 그걸 userTwo라는 다른 상수에 할당하면 userOne에 담긴 객체에 대한 주소만 할당하게 된다. 

class User {
	// 어쩌구 저쩌구
}

let userOne = User()
let userTwo = userOne

/*
userOne      userTwo
    \           /
        User()   
*/

 

이렇게 한 개 이상의 변수나 상수가 같은 객체를 가리킬 수 있다. 대신 struct은 마치 엑셀파일 복사해서 주는 것처럼 객체를 생성할 때마다 변수, 상수들이 각각 다른 객체를 가리킨다.

 

apple developer 문서에 언제 struct을 사용하고 언제 class를 사용하는지에 대한 안내가 나와있는데 간단하게 정리하면 

디폴트로 struct을 사용하는데 (use structrures by default) objective C 코드로 뭔가를 해야 하거나 상속 기능이 필요하거나 데이터 자체를 건드려야 하거나 (클래스는 주소!) 할 때는 class를 사용하면 될 것 같다. 

 

* 프로토콜도 공부하게 되면 struct vs class를 좀 더 업데이트 할 수 있을 것 같다. 후후후

 

https://developer.apple.com/documentation/swift/choosing_between_structures_and_classes

 

Apple Developer Documentation

 

developer.apple.com

 

 

 

 

반응형