티스토리 뷰

언어 소개 - Swift

Swift - 클래스와 구조체

최초의 펭귄 2018. 5. 31. 17:00

안녕하세요. 오늘은 클래스와 구조체에 대해 알아보는 시간을 가지겠습니다.

클래스와 구조체

Swift는 데이터를 구조화 하거나 객체를 생성하기 위한 방법으로
클래스와 구조체라는 두가지 방법을 가지고 있습니다.

클래스와 구조체의 공통점 & 차이점

공통점

  • 값을 저장하기 위해 프로퍼티를 정의할 수 있습니다.
  • 기능 수행을 위해 메서드를 정의할 수 있습니다.
  • 서브스크립트 문법을 사용할 수 있습니다.
  • 생성자와 익스텐션을 사용할 수 있습니다.
  • 프로토콜을 준수할 수 있습니다.

차이점

  • 구조체는 상속할 수 없습니다.
  • 타입캐스팅은 클래스의 인스턴스만 가능하다.

가장 큰 클래스와 구조체의 차이점은 클래스는 참조타입이며 구조체는 값타입이라는 것 입니다.

구조체는 값타입이기에 소멸자도 ARC도 적용되지 않습니다.
클래스는 참조타입이기에 함수에 클래스를 인자로 넘기면 값이 복사되는 것이 아닌
inout키워드와 같이 참조값이 넘어가 함수에서 일어난 모든 상황이 그대로 적용됩니다.

Swift의 기본 데이터 타입은 모두 구조체

Swift의 모든 표준 라이브러리는 구조체로 구현되어 있습니다.
그렇기에 Swift의 모든 데이터 타입은 함수의 전달인자로 전달되어도
무조건 값복사가 일어난다는 뜻입니다.
이를 통해 함수내에서 데이터를 변경하여도 아무런 영향을 미치지 못합니다!

C처럼 전달인자를 참조로 넘기기 위해 inout 키워드를 사용합니다

클래스 & 구조체 선택하기

클래스와 구조체를 선택하는 방법 중 가장 좋은 방법은 애플의 가이드라인을 지키는 것입니다.
애플은 다음 조건 중 하나 이상에 해당된다면 구조체를 사용하라고 이야기합니다.

  • 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때
  • 캡슐화된 값이 참조되는 것보다 복사되는 것이 합당할 때
  • 구조체에 저장된 프로퍼티가 값 타입이며 참조보다 복사되는 것이 합당할 때
  • 다른 타입으로부터 상속받거나 상속될 필요가 없을 때

저도 이를 보면서 아직 부족함을 느낍니다... 열심히 하겠습니다!
이에 대한 경험은 나중에 더 많은 프로젝트와 경험을 느낀 후 남기겠습니다.

마치며

Swift라는 언어를 공부하면서 다양한 기능이 가진 매력적인 언어라는 것을 느낍니다.
이번 시간을 준비하면서 "클래스와 구조체를 나는 어떻게 선택하고 개발하였는가?"라는
생각과 후회를 하는 시간이였습니다.
최고의 학습은 실천이라는 신념으로 다양하게 경험하며 이를 공유하는 개발자가 되겠습니다!
질문은 하단에 댓글에 남겨주세요!

감사합니다!

'언어 소개 - Swift' 카테고리의 다른 글

Swift - 클로저  (0) 2018.06.02
Swift - 프로퍼티  (0) 2018.06.01
Swift - 옵셔널  (0) 2018.05.30
Swift - 흐름 제어  (0) 2018.05.29
Swift - 함수  (0) 2018.05.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday