필요한 형식을 직접 만들 때 사용_Custom Data Type(직접 구현한 형식)
Class
- 설계도같은 역할 -> 하나의 class로 필요한 수만큼의 객체를 생성 가능
- 객체의 특징과 상태는 속성으로 구현하고 객체의 동작은 메소드로 구현함
*객체란?
변수와 메소드를 그룹핑한 것
- Class로 생성된 하나의 객체 -> Instance
☆ instance들은 동일한 속성과 메소드를 갖지만 각 instance마다 속성에 저장된 값과 실행 결과는 다를 수 있음
☆ 서로 상호작용 가능_다른 객체의 속성을 바꾸거나 메소드를 호출하는 가능(Sending Messages_seller와 receiver)
- Heap이라는 공간에 값을 저장하고 Stack에는 Heap에 저장되어있는 값의 주소를 저장 & 값을 전달할 때 복사본이 아닌 주소 전달
>>참조 형식(Reference Type)
;속성을 호출해 만든 instance 값을 변형한다면 원본 값도 바뀜 ∵참조를 전달했기 때문
class ClassName{
property
method
initializer
deinitializer
subscript
}
//example
class Person{
var name = "John"
var age = 10
func speak(){
print("Hello")
}
}
//속성에 접근하는 법
let p = Person()
p.name //John
p.age //10
p.speak() //Hello
Structure
- 비교적 작은 데이터를 저장하거나 값형식이 필요한 경우에 사용
- Class처럼 설계도의 역할을 하지만 객체가 아닌 '값'이라고 불러짐
- 형식에 관계없이 모두 Instance라고 부름
- Stack이라는 메모리 공간에 저장 & 값을 전달할 때마다 복사본 전달 >> 값 형식(Value Type)
;속성을 호출해 만든 instance 값을 변형하더라도 원본 값에는 영향을 안미침
struct StructName{
property
method
initializer
subscript
}
//example
struct Person{
var name: String
var age: Int
func speak() {
print("Hello")
}
}
let p = Person(name: "Steve", age: 50)
//속성 접근법 _ instanceName.속성
p.name //Steve
p.age //50
p.speak() //Hello 출력
Instance들을 만들기 위해서는 초기화 과정이 필요
1. 생성자를 호출해 속성 초기화
2. 생성자 실행이 완료되면 모든 생성자에는 초기화 값이 저장 되어있어야함
3. 에러없이 초기화 완료시 Instance 생성
init (parameter) {
statements
}
//example
class Position {
var x: Double
var y: Double
init(){ //모든 속성 초기화이기 때문에 parameter작성 X
x = 0.0
y = 0.0
}
init(value: Double) {
x = value
y = value
}
}
let a = Position() //parameter X
a.x // 0 _ 초기화한 값
a.y // 0
let b = Position(value: 100) //parameter O
b.x //100 _ 새로 저장한 값
b.y //100
'FE 공부 > Swift' 카테고리의 다른 글
Swift _ Extensions (0) | 2022.10.11 |
---|---|
Swift _ Method & Subscript (0) | 2022.10.10 |
Swift _ Collection (2) | 2022.10.04 |
Swift _ Tuples, Strings and Characters (0) | 2022.10.04 |
Swift _ Closures (2) | 2022.10.04 |
댓글