야곰 스위프트 프로그래밍(5. 구조체와 클래스)

🌈 devleeky16498·2022년 5월 20일
0

구조체와 클래스의 공통점

  1. 값을 저장하기 위해 프로퍼티 정의가 가능하다.
  2. 기능 실행을 위해 메서드 정의가 가능하다.
  3. 서브스크립트 정의가 가능하다.
  4. 초기화 될때의 상태 정의를 위한 생성자 정의가 가능하다.
  5. 새로운 기능 추가를 위한 익스텐션으로 확장이 가능하다.
  6. 특정 기능을 수행하기 위한 프로토콜 준수가 가능하다.

구조체와 클래스의 차이점

  1. 구조체는 상속이 불가하다.
  2. 타입 캐스팅은 클래스 인스턴스에 대해서만 허용된다.
  3. 소멸자(디이니셜라이저)는 클래스 인스턴스만 활용 가능하다.
  4. 참조횟수 계산(reference counting)은 클래스 인스턴스만 해당된다.
  5. 구조체는 값 타입이며, 클래스는 참조 타입이다.

언제 구조체, 언제 클래스?

  1. 구조체와 클래스는 새로운 데이터 타입을 정의하고 기능을 추가한다는 점이 같다.
  2. 연관된 간단한 값의 집합을 캡슐화한다면 구조체를 사용한다.
  3. 값을 참조하기 보다 복사하는 것이 합당한 경우 구조체를 사용한다.
  4. 다른 타입에 대해 굳이 상속해야할 이유가 없을 때 구조체를 사용한다.

구조체

  1. 구조체를 정의하는 것은 새로운 타입을 생성해주는 것과 마찬가지이며 대문자를 사용하여 타입 명칭을 나타내준다.
  2. 구조체는 멤버와이즈 이니셜라이저 외에도 사용자 정의 이니셜라이저 구현도 가능하다.
  3. 구조체를 상수로 선언하게 되면, 인스턴스 내부 프로퍼티 값을 변경할 수 없고, 변수로 선언하면 변경 가능하다.
  4. 스위프트의 기본 데이터 타입은 모두 구조체이다.

클래스

  1. 클래스 정의방법은 구조체와 매우 흡사하다. 다만 클래스는 상속이 가능하며, 상속 시 클래스 이름뒤에 상속받는 클래스 명칭을 써준다.
  2. 클래스를 정의하고, 인스턴스를 생성하고자 하는 경우에는 기본 이니셜라이저를 사용한다. init()이라는 우리가 흔히 아는 생성자 키워드를 명시하여 인스턴스를 생성해준다.
  3. 클래스의 인스턴스는 참조타입이므로 클래스의 인스턴스를 상수로 선언해도 내부 프로퍼티 값을 변경할 수 있다.
  4. 클래스의 인스턴스는 참조타입이며 더 참조할 필요가 없는 경우 메모리에서 해제된다. 이를 소멸이라고 칭하며 deinit 키워드를 통해서 소멸할 때 수행할 기능을 명시할 수 있다.
  5. === 다음의 식별 연산자를 통해서 참조하는 타입이 동일한지에 대한 확인이 가능하다.
profile
Welcome to Growing iOS developer's Blog! Enjoy!🔥

0개의 댓글