ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] Classes And Structures
    🍏Swift 2023. 3. 12. 23:47

    안녕하세요!

    오늘은 클래스와 구조체의 차이에 대해 한번 알아보겠습니다!

     

    클래스

    • 문법

    붕어빵을 만들때 쓰는 틀과 같은 느낌으로 속성(property)과 method(메서드) 이렇게 2가지로 이루어짐 ex) 카카오톡 친구목록의 친구 한명씩의 프로필과 같은 것이 클래스를 이용해서 찍어낸 객체들

    //클래스(틀)는 어디서도 접근 가능한 데이터의 영역에 저장
    class Dog {
        var name = "강아지"
        var weight = 0
        
        func sit() {
            print("앉았습니다.")
        }
        
        func layDown() {
            print("누웠습니다.")
        }
    }
    
    //객체(실제 데이터)는 참조타입으로 힙의 영역에 저장
    var bori = Dog()
    bori.name
    bori.weight
    bori.sit()
    bori.layDown()
    
    var choco = Dog()
    choco.name
    choco.weight
    choco.sit()
    choco.layDown()
    

     

    구조체

    • 문법

    구조체도 클래스와 같이 붕어빵 틀과 같은 느낌

    // 붕어빵틀 만들기
    struct Bird {
        var name = "새"
        var weight = 0.0
        
        func fly() {
            print("날아갑니다.")
        }
    }
    
    // 붕어빵 찍어내기 (인스턴스의 생성)
    var aBird = Bird()
    aBird.name
    aBird.weight
    aBird.fly()
    

     

    차이점

    1. 구조체
      • 값형식(Value Type)
      • 인스턴스 데이터를 모두 스택(Stack)에 저장
      • (복사시) 값을 전달할때마다 복사본을 생성 (다른 메모리 공간 생성)
      • 스택(Stack)의 공간에 저장, 스택 프레임 종료시, 메모리에서 자동 제거
      • 상속 불가능하고 소멸자 없음
      • 메서드 내에서 속성 변경 원칙적으로 불가능
      • 멤버와이즈 이니셜라이저(저장속성 모두가 들어간 생성자)를 제공
      • 인스턴스 상수로 선언시 저장 속성이 전부 상수로 선언됨
    2. 클래스
      • 참조형식(Reference Type)
      • 인스턴스 데이터는 힙(Heap)에 저장, 해당 힙을 가르키는 변수는 스택에 저장하고
      • 메모리 주소값이 힙(Heap)을 가르킴
      • (복사시) 값을 전달하는 것이 아니고, 저장된 주소를 전달
      • 힙(Heap)의 공간에 저장, ARC시스템을 통해 메모리 관리(주의해야함)
      • 상속 가능하고 소멸자 있음
      • 메서드 내에서 속성 변경 가능
      • 편의 생성자 존재
      • 인스턴스 상수로 선언하면 가르키는 인스턴스 고정

     

    초기화

    • 문법

    초기화 메서드 / 생성자는 인스턴스를 만들때 사용하는 특별한 메서드로 실제 데이터(속성), 동작(메서드)을 사용하기 위해서는 초기화 과정이 반드시 필요한데 저장속성을 초기화 시켜주는 메서드(init)

    class Dog1 {
        var name: String
        var weight: Int
        
        // 생성자
        init(n: String, w: Int) {
            self.name = n
            self.weight = w
        }
        
        func sit() {
            print("\\(self.name)가 앉았습니다.")
        }
        
        func layDown() {
            print("\\(self.name)가 누웠습니다.")
        }
    }
    
    //인스턴스를 초기화하면 메모리에 정상적으로 인스턴스가 생섬
    var dog1 = Dog1(n: "뭉이", w: 12)
    var dog2 = Dog1(n: "땡이", w: 10)
    

     

    혹시 잘못된 내용이 있다면 피드백 주시면 정말 감사합니다! 😊

    '🍏Swift' 카테고리의 다른 글

    [Swift] self vs Self  (0) 2023.03.05
    [Swift] ARC  (0) 2023.02.26
    [Swift] Optional  (0) 2023.02.19
    [Swift] Enumeration  (0) 2023.02.09
    [Swift] Access Control  (0) 2023.02.06
Designed by Tistory.