Struct vs Class (구조체, 클래스 알아보기)
요즘 개인적으로 가장 중요하게 생각하고 있는 부분이라고 생각하며, Objective C 언어를 사용하였을때, 구조체의 경우 정말 간단하게 값만 함수로 전달을 하거나 임시로 저장하는 용도로만 사용을 하였고, 데이터 보관 및 참조, Class 내 간략한 함수를 구현하는 디자인 패턴을 많이 사용하여 클래스 위주로만 사용을 하고 있었다.
그런데 Swift 부터는 개념은 같지만, 구조체 내에서도 함수를 구현할 수 있어서 확실히 확용도가 더욱 높아 진 것 같다.
간략 차이점
구조체 : Call of Value (값)
클래스 : Call of Referense (참조)
struct와 class의 가장 큰 차이점은 값과 레퍼런스라는 차이점이다.
레퍼런스(Referense) 와 값(Value)
공통점
# 값을 저장하기 위해 프로퍼티를 정의할 수 있다.
# 기능 실행을 위해 메서드를 정의할 수 있다.
# 서브스크립트 문법을 통해 구조체 또는 클래스가 갖는 값(프로퍼티)에 접근하도록 서브스크립트 정의할 수 있다.
# 초기화될 때의 상태를 지정하기 위해 이니셜라이저를 정의할 수 있다.
# 특정 기능을 실행하기 위해 특정 프로토콜을 준수 할 수 있다.
# 특정 기능을 실행하기 위해 특정 프로토콜을 준수 할 수 있다.
차이점
# 구조체는 상속할 수 없다.
# 타입캐스팅은 클래스의 인스턴스에만 허용된다.
# 디이니셜라이저는 클래스의 인스턴스에만 활용 할 수 있다.
# 참조 횟수계산(Reference Counting)은 클래스의 인스턴스에만 적용된다.
생성 및 대입 속도
Sample 소스로 생성 및 대입 속도를 측정한 결과 이다. 컴퓨터 환경에 따라 다르겠지만, 구조체가 생성 및 대입속도가 빠른것이 보여진다.
구조체와 클래스 어떨때 사용할까?
이 항목이 제일 어려운 부분인데, 구조체는 항상 값타입이고, 클래스 인스턴스 참조타입니다. 이를 알고 용도에 맞게 활용해야 한다.
1. 기본적으로 구조체를 선택하십시오. (Default)
2. Objective C와 상호 운영성이 필요할 때 클래스를 사용하십시오.
3. 모델링 할 데이터의 ID를 제어해야 할 때 클래스를 사용하십시오. (중요)
4. 프로토콜과 함께 구조체를 사용하여 구현을 공유하여 동작을 구현하십시오.
4번 항목이 조금 이해가 덜되었는데,
기본적으로 프로토콜은 구조체, 클래스 둘다 사용이 가능한데, 클래스의 경우 상속이 가능하기 때문에 데이터모델링 할 때 상속을 사용하지 않고, 프로토콜 구조일때는 구조체를 사용하라고 한다.
댓글
댓글 쓰기