Chapter 08. 구조체와 클래스 : 객체지향 스위프트
이번에 배울 구조체와 클래스는 지금까지 배웠던 변수나 상수, 그리고 함수가 모두 총동원되어 만들어집니다. 개념적으로 구조체와 클래스는 하나의 큰 코드 블록입니다. 이 안에 변수나 상수를 넣어 값을 저장하거나 함수를 넣어서 기능을 정의할 수도 있습니다. 값을 저장할 수는 없지만 특정 기능을 실행할 수 있는 함수와, 값을 저장할 수 있지만 혼자서 특정 기능을 실행할 수는 없는 변수, 상수의 특성을 모두 모아 놓았다고 이해하면 됩니다. 이 때문에 클래스와 구조체는 다른 종류의 객체에 의존하지 않고도 자체적으로 값을 저장하거나 함수적인 기능을 구현할 수 있습니다 .
구조체에 클래스 내에서 정의된 변수와 상수, 그리고 함수는 부르는 명칭이 일반의 그것과는 다릅니다. 똑같은 변수나 상수라도 구조체와 클래스 내부에서 정의되면 프로퍼티(Properties)라는 이름을 가집니다. 속성 변수 또는 상수라고 불리기도 합니다. 함수도 구조체와 클래스 내부에서 정의되면 펑션(Function)이 아니라 메서드(Method)라고 불립니다.
프로퍼티와 메서드를 합해서 구조체나 클래스의 멤버(Member)라고 표현하는데, 이는 프로퍼티와 메서드가 구조체나 클래스를 이루는 핵심 요소이기 때문입니다.
스위프트는 기본적으로 객체지향 언어입니다. 필요한 기능을 객체로 구현하여 사용한다는 것이 객체지향 언어의 핵심인데, 이때 객체를 만들어내는 주요 대상이 바로 구조체와 클래스입니다. 구조체와 클래스는 객체지향의 근간을 이루는 핵심 객체일 뿐 아니라 iOS에서 실행되는 애플리케이션을 만들 때에도 중심 역할을 하는 중요한 개념입니다.
구조체 VS 클래스
스위프트에서 구조체와 클래스는 여러 면에서 유사합니다. 공통점을 정리해 보겠습니다.
프로퍼티 - 변수나 상수를 사용하여 값을 저장하는 프로퍼티를 정의할 수 있다.
메서드 - 함수를 사용하여 기능을 제공하는 메서드를 정의할 수 있다.
서브스크립트 - 속성값에 접근할 수 있는 방법을 제공하는 서브스크립트를 정의할 수 있다.
초기화 블록 - 객체를 원하는 초기 상태로 설정해주는 초기화 블록을 정의할 수 있다.
확장 - 객체에 함수적 기능을 추가하는 확장(extends) 구문을 사용할 수 있다.
프로토콜 - 특정 형식의 함수적 표준을 제공하기 위한 프로토콜을 구현할 수 있다.
하지만 구조체와 클래스의 결정적인 차이점이 있습니다. 클래스의 기능 범위가 구조체보다 큽니다. 구조체는 할 수 없지만, 클래스는 할 수 있는 기능에는 다음과 같은 것들이 있습니다.
상속 - 클래스의 특성을 다른 클래스에게 물려줄 수 있다.
타입 캐스팅 - 실행 시 컴파일러가 클래스 인스턴스의 타입을 미리 파악하고 검사할 수 있다.
소멸화 구문 - 인스턴스가 소멸되기 직전에 처리해야 할 구문을 미리 등록해 놓을 수 있다.
참조에 의한 전달 - 클래스 인스턴스가 전달될 때에는 참조 형식으로 제공되며, 이때 참조가 가능한 개수는 제약이 없다.
Last updated