본문 바로가기
FE 공부/Swift

Swift_Structure & Class

by 꼬질꼬질두부 2022. 10. 10.
필요한 형식을 직접 만들 때 사용_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

댓글