728x90
반응형

1. 구조체란?

스위프트 대부분 타입은 구조체로 이루어져 있다.
구조체는 "값(value) 타입" 이다.
여기서 값 타입이란 무엇일까?
상수/변수에 할당되거나 함수에 들어갈 때 그 값이 복사되어 전달된다는 의미이다.
추가적으로, 복사되어 전달된다는 의미는 복사본을 생성한다는 것이 아니라
원본과 복사본이 메모리 공간을 공유하게 만든다는 점이다.
그래서 스위프트의 구조체는 다른 언어보다 더 기능성에 가깝다고 한다.
스위프트에서 모든 기본 타입은 값 타입이고, 구조체로써 구현된다.
그래서 대부분의 타입은 구조체로 이루어져있다고 한다.
타입 이름은 대문자 카멜케이스를 사용하여 정의한다. 

2. 구조체 문법 및 사용

struct 이름 {
    구현부
}

간단한 샘플을 만들어보았다.

struct Sample {
    var mutableProperty: Int = 100 // 가변 프로퍼티
    let immutableProperty: Int = 100 // 불변 프로퍼티
    
    static var typeProperty: Int = 100 // 타입 프로퍼티 (static 키워드 사용: 타입 자체가 사용하는 프로퍼티)
    
    // 인스턴스 메서드 (인스턴스가 사용하는 메서드)
    func instanceMethod() {
        print("instance Method !!!")
    }
    
    // 타입 메서드 (static 키워드 사용: 타입 자체가 사용하는 메서드)
    static func typeMethod() {
        print("type method !!!")
    }
}

Sample 이란 이름의 구조체를 하나 만들어보았고 각 프로퍼티와 메서드를 생성했다.

만든 구조체를 통해 인스턴스를 생성할 수 있다.

// 가변 인스턴스 생성
var mutable: Sample = Sample()

위와 같이 가변 인스턴스를 생성할 수 있다. 인스턴스 내의 프로퍼티의 값을 변경할 수 있다.

mutable.mutableProperty = 200

// 불변 프로퍼티는 인스턴스 생성 후 수정할 수 없다.
//mutable.immutableProperty = 200

가변 프로퍼티의 경우 변경할 수 있지만 불변 프로퍼티의 경우 당연히 변경할 수 없고 컴파일 에러가 발생한다.

let immutable: Sample = Sample()

// 불변 인스턴스는 아무리 가변 프로퍼티라도 인스턴스 생성 후 수정할 수 없다.
//immutable.mutableProperty = 200

불변 인스턴스를 생성 후에 가변 프로퍼티를 변경할 수 없는 것도 마찬가지다.

Sample.typeProperty = 300
Sample.typeMethod()

그리고 static 을 통해 타입 프로퍼티와 타입 메서드를 생성할 수 있는데
타입 자체 즉, 구조체 자체에서 사용하는 프로퍼티라고 생각하면 된다.
인스턴스에서는 타입 프로퍼티나 타입 메서드를 사용할 수 없다. 사용하게 되면 컴파일 에러가 발생한다.

정리하기

구조체 라는 것을 배웠는데 객체 지향 프로그래밍 언어를 사용하면서 다루어 봤던 문법이기도 하다.
하지만 인스턴스가 무엇이고 프로퍼티가 무엇인지 정확한 이해가 필요하다고 생각한다.
나도 정확히 어떤 뜻으로 쓰이는지 잘 알지 못하기 때문에 앞으로 공부하면서 알아가야 한다고 생각한다.
그리고 구조체와 클래스를 같이 묶어서 이해하면 좋다고 생각하는데 다음에 배울 예정이기 때문에
오늘 배운 구조체와 다음에 배운 클래스에 대해서 비교하면서 공부하면 좋을 것 같다.
그래서 따로 추가적으로 정리해둘 예정이다 😆

 

- 참고 사이트 - 

www.edwith.org/boostcamp_ios/lecture/11271/

 

[LECTURE] 13. 구조체 (💎생각해보기) : edwith

생각해보기   ▶다른 프로그래밍 언어를 배워본 적이 있다면, 내가 알고있는 언어의 구조체와 스위프트의 구조체와 어떤점 이 다른지 비교해봅시다~!   +)다른 수강생들과 자유롭게 토... - 부스

www.edwith.org

medium.com/@jgj455/오늘의-swift-상식-struct-class-60fa5fd2218d

 

오늘의 Swift 상식 (Struct, Class)

구조체와 클래스란?

medium.com

blog.yagom.net/530/

 

Swift - 구조체 클래스 - yagom's blog

yagom's blog Swift - 구조체 클래스

blog.yagom.net

velog.io/@co-in/공식-문서로-공부하는-Swift-8-구조체와-클래스

 

공식 문서로 공부하는 Swift (8) - 구조체와 클래스

Structures and Classes 구조체(Structure)와 클래스(Class)는 보통 프로그램 코드 블록을 유연성 있게 구축하기 위해 사용합니다. 상수, 변수, 함수를 정의하는 것과 같은 문법을 사용해 구조체와 클래스에

velog.io

 

728x90
반응형
복사했습니다!