꾸준히 안타치기

class vs struct 본문

iOS/swift

class vs struct

글자줍기 2021. 12. 13. 17:42
반응형

https://youtu.be/gYXNCJntXAY 

struct class - 기능집합이다.

가장 큰 차이는?  값을 복사하느냐 ! 복사본은 영향을 안받음 / 안전 /  상속이 안됨

참조하느냐? (서로 연결이 되어있다. 영향을 받음)

struct class
값에 의한 전달 참조에 의한 전달 ( 서로 연결되어 있어 영향을 받는다.)
값 복사
참조하는 값이 바뀌어도 기존 값에는 영향이 없음.
공유해서 사용함
기존값에는 영향이 없으므로 안전하다.
상속이 안된다.
init이 있다.(초기값을 설정한다.)

생성자를 만드는것 = 메모리에 올린다.
// init으로 매개변수를 넣어서 그값을 가진 객체(object)를 만들 수 있다. 

클래스는 공유해서 사용하는 개념. 참조( =메모리 주소를 가리킨다.레퍼런스)하는 값이 바뀌면 기존값도 바뀐다.

복사해서 사용. 영향 X 연결되어있음. 값을 남이 바꿔도 될때 (영향을 받음)
Q)구조체와 달리 클래스의 인스턴스는 상수에 할당되더라도 프로퍼티 값을 변경할 수 있다. 그 이유는 무엇일까?

A) 스위프트에서 클래스 객체를 변수나 상수에 대합할 경우 실제 값이 저장된 메모리 주소만 전달된다.

이를 참조에 의한 전달이라고 한다. 이 때문에 클래스 내부의 프로퍼티 값을 변경하더라도 할당된 메모리 주소에는 아무런 영향을 주지 않게 된다. 따라서 상수에 할당되었다 하더라도 프로퍼티 값은 얼마든지 변경이 가능하다. 

클래스 인스턴스 자체를 새로운 것으로 변경하는 것만 아니면 된다. 클래스 인스턴스를 대부분 상수에 할당하는것은 이 때문이다.

https://youtu.be/knLxEyzyaaw?t=873

 

Planet.swift  / 행성 클래스를 생성한다. ( 붕어빵 틀 생성 )

import Foundation

class Planet{
	
    let name: String 
    let description: String
    
    init(name: String, description: String){ // 초기화
    
      self.name = name
      self.description = description
    }
    
}

 

ViewController.swift / Planet 인스턴스를 생성해보자. 머큐리행성 객체만들기 ( 만들어진 붕어빵중 1개 )

import UIKit

class ViewController: UIViewController{


  let planetarySystem = PlanetarySystem(name: "Solar System", planets:[]()) // 이름과 행성배열이 담겨있음
    
  let mercury = Planet(name: "Mercury",  description: "first planet") // 머큐리 생성
    
    
    
    overricde func viewDidLoad(){
    	super.viewDidLoad()
        
        // planetarySystem의 planets에 만든 머큐리행성 추가 
        planetarySystem.planets.append(mercury) 
    }

}

행성을 추가하고 나면 planets.count 는 / 배열의 갯수가 1로 변경됨 

반응형

'iOS > swift' 카테고리의 다른 글

조건문  (0) 2021.12.21
제네릭  (0) 2021.12.13
옵셔널*****/ 언랩핑***** / 값이 있는지 없는지 모른다?  (0) 2021.12.13
enum ********케이스 나누기  (0) 2021.12.13
Swift Tip of the day - 스위프트 기초 문법  (0) 2021.12.13
Comments