Swift

Structure and Class

728x90

안녕하세요:)

 

오늘은 구조체와 클래스에 대해서 알아보도록 하겠습니다!!!

 

1. Structure and Class

  • 구조체와 클래스는 하나의 큰 코드 블록입니다.
  • 구조체와 클래스 내에서 정의된 변수, 상수는 프로퍼티(속성)라는 이름을 가집니다.
  • 구조체와 클래스 내에서 정의된 함수는 메소드라는 이름을 가집니다.
  • 형식 내부에 구현하는 요소를 멤버라고 합니다.
  • 구조체와 클래스는 프로퍼티, 메소드, 서브스크립트, 초기화 블록, 확장, 프로토콜을 선언할 수 있습니다.
  • 클래스는 구조체보다 상속, 소멸화 구문, 참조에 의한 전달의 기능을 가지고 있습니다.
struct StructName {
    property  
    method
    initializer
    subscript
}

class ClassName { 
    property 
    method
    initilaizer
    deinitializer // 소멸자
    subscript
}

2. Structure

  • 구조체는 인스턴스를 생성하면 스택이라는 메모리 공간에 저장합니다.
  • 구조체는 값을 전달할 때마다 복사본을 생성해서 전달합니다. 이를 값 형식이라고 합니다.
  • 구조체 인스턴스가 상수에 할당되면 프로퍼티 값을 변경할 수 없습니다.
struct Person {
    var name: String
    var age: Int
    
    func speak() {
        print("Hello, Kims")
    }
}


<인스턴스 생성>
let p = Person(name: "dion", age: 27)

// 속성에 접근 -> 인스턴스 이름으로 접근합니다.
p.name
p.age
p.speak() // 메소드 호출

3. Class

  • 클래스는 힙이라는 공간에 값을 저장하고 스택에는 값의 주소를 저장합니다.
  • 클래스는 메모리 주소 참조에 의한 전달 방식을 사용합니다. 이를 참조 타입이라고 합니다.
class Personclass {
    var name = "dion" // 초기값 저장
    var age = 27
    
    func speak() {
        print("Hello")
    }
}

let p1 = Personclass()

p1.name
p1.age
p.speak()

4. 구조체와 클래스 비교

  • 구조체와 클래스는 새로운 형식을 만들 때 사용합니다.
  • 인스턴스는 생성자 문법으로 생성합니다.
  • 구조체와 클래스는 저장 공간을 처리하는 방식에 차이가 있습니다. 
  • 구조체는 스택이라는 메모리 공간에 값을 저장하고, 값을 전달할 때마다 복사본을 생성합니다. 이를 값 형식이라고 부릅니다.
  • 클래스는 힙이라는 공간에 값을 저장합니다.
  • 스택에는 힙에 저장되어 있는 값의 주소를 저장합니다. 값을 전달하면 복사본을 생성하지 않고 주소를 전달합니다. 이를 참조 형식이라고 합니다.
  • 메모리 관리 방식에도 차이가 있습니다.
  • 값 형식의 구조체는 인스턴스가 속한 스코프가 종료되면 메모리에서 자동으로 제거됩니다.
  • 참조 형식인 클래스는 스코프에 관계없이 래퍼런스 카운팅을 통해서 메모리를 관리합니다.
728x90

'Swift' 카테고리의 다른 글

Property - 2  (0) 2020.11.25
Property - 1  (0) 2020.11.24
Enumeration  (0) 2020.11.22
Dictionary  (0) 2020.11.20
Array  (0) 2020.11.19