Swift, Class, Struct

김윤홍·2024년 6월 12일
post-thumbnail

Class(클래스)

클래스는 프로퍼티(Property)과 메서드(Method)로 구성되어 있습니다.

프로퍼티 (Property)

프로퍼티는 클래스, 구조체 또는 열거형 안에 있는 변수 또는 상수를 나타낸다.

클래스의 속성으로 객체의 상태를 저장하거나 제공한다.

1.저장 프로퍼티: 값을 저장하고, 인스턴스의 일부로서 값을 유지한다.

2.계산 프로퍼티: 특정한 계산을 통해 값을 반환하며, 값을 저장하지 않고 필요할 때마다 새로 계산된다.

메서드 (Methods)

메서드는 클래스, 구조체, 열거형안에 있는 함수를 나타낸다
클래스의 동작을 정의하고, 클래스의 인스턴스에 대해 수행되는 특정한 작업을 수행

  1. 인스턴스 메서드: 특정 인스턴스에 속하는 동작을 정의하고, 인스턴스의 상태에 접근할 수 있다.
  1. 타입 메서드: 클래스 자체와 관련된 동작을 정의하며, 특정인스턴스에 속하는 것이 아닌 클래스 자체에 영향을 준다.

클래스는 이니셜라이저를 통해 초기값을 설정할 수 있다.

프러퍼티에 기본 값이 없는 경우 이니셜라이저를 필수로 구현해야 함!

클래스와 인스턴스
클래스는 붕어빵 틀, 인스턴스는 붕어빵으로 자주 비유가 된다.

클래스는 참조타입!
변수나 상수에 할당될 때 값을 복사하는 것이 아닌 주소가 복사되어 같은 인스턴스를 가리킨다


참조 타입인 클래스 예시

class Person {
	var name: String
    
    init(name: String) {
    	self.name
    }
}

var person1 = Person(name: "hong")
var person2 = person1
person2.name = "kim"

//person1, person2 name출력은 kim이 나온다.

클래스 예시

class Veichle {
    var name : String
    
    init(_ name: String) {
        self.name = name
    }
    
    func horn() {
        print("빵빵")
    }
}

let car = Veichle("자동차")

print(car.name) //출력문: 자동차
car.horn()	//출력문: 빵빵

class Veichle {
    var name : String //저장 프로퍼티
    
    var brand: String {
        return "제차는 \(name)입니다" //계산프로퍼티
    }
    
    init(_ name: String) {
        self.name = name
    }
    
    func horn() {
        print("빵빵")
    }
}

let car = Veichle("기아")

print(car.name)
car.horn()

class Count {
    var count = 0 //저장 프로퍼티
    
    func increment() { //인스턴스 메서드
        count += 1
    }
    
    static func reset() { //타입 메서드
        print("초기화")
    }
    
}

let cnt = Count()
cnt.increment()
cnt.increment()

print(cnt.count) //출력: 2

Count.reset() //초기화


구조체

구조체는 클래스와 마찬가지로 프로퍼티에 값을 저장하거나 메서드를 통해 기능을 제공하고 이걸하나로 캡슐화할 수 있습니다.

클래스와 달리 생성자를 정의안해도 된다 구조체가 자동으로 생성자를 제공하기 때문이다(Memberwise Initializer)

구조체는 값타입이기 때문에 변수나 상수에 할당될 때 값의 복사본이 생성된다.

구조체 예시

struct Number {
    var a: Int
    var b: Int
}

var num1 = Number(a: 10, b: 5)
var num2 = num1
print(num2.a)

num2.a =  100

print(num2.a) // 100
print(num1.a) //10
struct Iphone {
    var name: String?
    var ram: Int?
    
    func turnOn() -> String {
        if let name = self.name {
            return "\(name) 입니다"
        }
            return ""
    }
}

let smartPhone = Iphone(name: "15pro") //출력: 15pro입니다

클래스와 구조체 차이

클래스와 객체를 비교하는 예시로 붕어빵기계와 붕어빵을 예시로 많이 사용한다

객체는 클래스를 실체화 한것, 즉 메모리에 올라가는 인스턴스가 된것이다

객체는 클래스의 인스턴스로 자신만의 속성과 메서드를 갖는다


클래스는 찹조타입이고 ARC시스템을 통해 메모리를 관리한다
값을 전달하지 않고 저장된 주소를 전달한다

구조체는 값 타입이고 인스턴스 데이터를 모두 스택에 저장한다
새로운 변수에 할당 할때마다 복사본을 생성한다(다른메모리공간에)

0개의 댓글