8.1.2 메서드와 프로퍼티
구조체와 클래스에서는 변수나 상수를 정의하여 내부적인 값을 저장할 수 있습니다. 이렇게 구조체와 클래스 내부에서 정의된 변수나 상수를 프로퍼티(Property) 또는 속성이라고 합니다. 또한 함수를 정의하여 특정 기능을 정의할 수도 있는데, 이를 메서드(Method)라고 합니다. 이들은 구조체나 클래스 내부에 정의된다는 것만 차이가 있을 뿐, 일반 변수/상수/함수를 정의하는 것과 문법적으로 동일합니다. 구조체와 클래스를 정의하고 여기에 프로퍼티와 메서드를 추가해 봅시다
struct Resolution {
var width = 0
var height = 0
func desc() -> String {
return "Resolution 구조체"
}
}
class VideoMode {
var interlaced = false
var frameRate = 0.0
var name: String?
func desc() -> String {
return "VideoMode 클래스"
}
}
위 코드는 Resolution이라는 이름의 구조체와 VideoMode라는 이름의 클래스를 선언하는 예제입니다. Resolution 구조체는 픽셀 기반 디스플레이의 해상도 정보를 관리하기 위한 목적이라고 생각하면 될 듯하고, VideoMode 클래스는 비디오 디스플레이에서 표현되는 비디오에 대한 정보를 관리하기 위한 목적이라고 생각하면 됩니다.
먼저 Resolution 구조체를 살펴보겠습니다. width, height라는 두 개의 저장 프로퍼티가 있습니다. 저장 프로퍼티란 특정 값을 저장하기 위해 클래스나 구조체 내부에 정의된 변수나 상수를 말합니다. 이들 두 프로퍼티는 선언될 때 초기값으로 0이 대입되었으므로 타입 추론 규칙에 의해 Int 타입의 데이터 형식으로 추론됩니다.
반면 VideoMode 클래스는 세 개의 저장 프로퍼티가 정의되어 있고, 이들은 모두 기본 자료형으로 초기화되어 있습니다. interlaced는 초기값 false에 의하여 Bool 타입으로 정의되면서 'interlaced되지 않은 비디오 모드'라는 의미를 가지게 되고, frameRate는 0.0이 초기값이므로 Double 타입으로, 비디오 모드의 이름을 표현하는 name 프로퍼티는 옵셔널 문자열로 정의됩니다. name 프로퍼티는 초기값이 할당되지 않았는데, 옵셔널 타입 프로퍼티에 초기값이 할당되지 않으면 자동으로 nil이라는 기본값으로 초기화됩니다. 이때의 의미는 'name 프로퍼티에 값이 존재하지 않음'으로 해석됩니다. 구조체와 클래스에는 desc라는 이름의 메서드가 하나씩 작성되어 있습니다. 이 메서드의 역할은 각각의 객체에 대해 설명하는 문자열을 반환하는 것입니다. 예제에서 확인할 수 있는 것처럼 메서드는 함수의 형태를 띠고 있으며 몇 가지 차이점을 제외하면 함수와 거의 같습니다.
Last updated