애플스위프트(APPLE SWIFT) - 프로퍼티, 메서드, 상속, 초기화, 래퍼런스 타입과 밸류타입
애플의 스위프트 프로그래밍 언어에서, 클래스와 구조체는 데이터를 모델링하기 위한 주요 도구입니다. 각각의 특징과 장단점을 이해하면, 어떤 상황에서 클래스나 구조체를 사용해야 하는지 결정할 수 있습니다.
클래스(Class)
클래스는 참조 타입(reference type)입니다. 클래스 인스턴스는 힙 메모리에 저장되며, 인스턴스 자체가 아닌 참조(주소)가 전달됩니다.
class Dog {
var name: String
var breed: String
init(name: String, breed: String) {
self.name = name self.breed = breed
}
}
let dog = Dog(name: "Rex", breed: "Labrador") // 여기서 'dog'는 Dog 인스턴스를 참조합니다.
구조체(Struct)
구조체는 값 타입(value type)입니다. 구조체 인스턴스는 스택 메모리에 저장되며, 인스턴스의 복사본이 전달됩니다.
struct Cat {
var name: String var breed: String
}
var cat = Cat(name: "Whiskers", breed: "Siamese") // 여기서 'cat'는 Cat 인스턴스의 복사본을 가집니다.
프로퍼티(Properties)
저장 프로퍼티(Stored Properties)
값을 저장하는 가장 기본적인 프로퍼티 유형입니다.
struct Point {
var x: Int // 저장 프로퍼티
var y: Int // 저장 프로퍼티
}
계산 프로퍼티(Computed Properties)
실제로 값을 저장하지 않고, 값에 대한 계산을 수행합니다.
struct Rectangle {
var width: Double
var height: Double
var area: Double {
return width * height
}
// 'area'는 계산 프로퍼티입니다.
}
메서드(Methods)
인스턴스 메서드(Instance Methods)
특정 클래스 또는 구조체 인스턴스와 연관된 메서드입니다.
class Car {
var speed = 0
func accelerate() {
speed += 10
}
// 'accelerate'는 인스턴스 메서드입니다.
}
타입 메서드(Type Methods)
타입 자체에 속한 메서드입니다. static 키워드를 사용하여 정의합니다.
class Math {
static func square(of number: Int) -> Int {
return number * number
} // 'square'는 타입 메서드입니다.
}
상속(Inheritance)
클래스
클래스는 다른 클래스로부터 상속을 받을 수 있습니다. 이를 통해 코드 재사용, 확장성 및 다형성을 구현할 수 있습니다.
class Animal {
var name: String init(name: String) {
self.name = name
}
}
class Dog: Animal {
var breed: String
init(name: String, breed: String) {
self.breed = breed
super.init(name: name)
} // Dog는 Animal 클래스로부터 상속받습니다.
}
구조체
구조체는 상속을 지원하지 않습니다.
초기화(Initialization)
클래스와 구조체
생성자를 사용하여 인스턴스가 초기화될 때 필요한 설정을 수행합니다.
struct Point {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
} // 초기화 메서드
}
레퍼런스 타입과 밸류 타입
클래스(레퍼런스 타입)
인스턴스가 참조에 의해 전달되고 공유됩니다.
구조체(밸류 타입)
인스턴스가 값에 의해 전달되며, 각각 독립적인 복사본을 가집니다.
var original = Point(x: 10, y: 20)
var copy = original
copy.x = 30 // 'original'의 x는 10으로 남아있고, 'copy'의 x는 30으로 변경됩니다.
이 예시들을 통해 클래스와 구조체의 차이점과 사용 방법에 대해 더 잘 이해하시길 바랍니다.
'프로그래밍언어 > 애플스위프트' 카테고리의 다른 글
애플스위프트(APPLE SWIFT) - 고급 연산자 (0) | 2024.01.13 |
---|---|
애플스위프트(APPLE SWIFT) - 프로토콜(Protocols)과 익스텐션(Extensions) (2) | 2024.01.13 |
애플스위프트(APPLE SWIFT) - 옵셔널(Optional) (1) | 2024.01.13 |
애플스위프트(APPLE SWIFT) - 함수(function), 매개변수와 반환값, 클로저(Closures) (1) | 2024.01.13 |
애플스위프트(APPLE SWIFT) - 배열(Arrays), 집합(Sets), 사전(Dictionaries) (1) | 2024.01.13 |