ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift - Struct & Class
    Programming/Swift 2021. 10. 20. 13:47

     

    안녕하세요 Beepeach입니다 :)

     

    오늘은 struct(구조체)와 class(클래스)에 대해서 공부해보려고 합니다!

    객체지향 프로그래밍, OOP(Object Oriented Programming)은 한 번쯤 들어보셨을 겁니다.

    그러면서 class에 대해서도 들어보셨을 텐데요.

     

    Swift에서는 struct와 class는 비슷한 부분이 많습니다.

    모두 새로운 타입을 정의해서 데이터를 구조화할 때 사용합니다.

    쉽게 말해서 우리가 정의하는 새로운 Type을 만들 수 있습니다.

     

    Struct와 class의 가장 큰 차이점은 valueType(값 타입), referenceType(참조 타입)이라는 겁니다..

    지금까지 사용해온 Int, Double.... 과 같은 Fundamental data type들과 Enumeration은 모두 valueType이였습니다.

    Class는 지금까지 사용해온 것들과 다른 referenceType입니다.

    지금은 간단하게 referenceType은 포인터와 비슷하게 주소와 관련이 되어있다! 라는 것만 기억해주세요.

    자세한 내용은 다음 포스팅에서 다뤄보겠습니다.

     

    그럼 struct와 class를 어떻게 정의하는지 보도록 하겠습니다!

     


    Struct

     

     

    struct 키워드를 사용하고 구조체 이름을 적어주면 됩니다.

    이때 naming convention은 UpperCamelCase를 이용합니다.

    새로운 Type을 만드는 것이기 때문이죠!

     

    {} 안에는 member들이 선언됩니다.

    Struct 멤버에는 property, method, initializer, subscript가 올 수 있습니다.

    멤버들은 lowerCamelCase으로 이름을 지어줍니다.

    각각 멤버에 대해서는 차근차근 공부해보도록 하겠습니다.

     

    그럼 구체적인 예시를 보겠습니다.

     

     

    Cat이라는 구조체를 선언했습니다.

    property로 name, age를 method로 speak()를 정의했습니다.

    그리고 initializer도 하나 정의해줬습니다.

    지금은 이렇게 하는 거구나만 알아두시면 됩니다!

     

    그럼 이번에는 class를 구현하는 방법에 대해서 보겠습니다.

     


     

    Class

     

     

    Struct와 크게 다를 게 없어 보입니다.

    class 키워드를 사용하고 name을 UpperCamelCase로 선언해줍니다.

     

    {} 안에는 member들을 선언해줍니다.

    멤버 중에 struct에서는 못 보던 deinitializer가 추가된 것 말고는 다른 게 없습니다.

    NamingConvention은 당연히 lowerCamelCase로 해주시면 됩니다.

     

     

    위에서 선언한 구조체와 크게 다른 점은 없습니다.

    그럼 이제 인스턴스라는 것을 만들어 보겠습니다.

     


     

    Instance(인스턴스) 생성하기

     

    Struct나 Class를 통해서 우리가 만들고자 하는 type을 정의했습니다.

    이것은 설계도를 작성한 것과 같습니다.

    Cat과 Dog라는 설계도만 만든 것과 같습니다. 설계도만 있다면 아무 쓸모가 없습니다.

    설계도를 만들었다면 그걸 이용해서 무엇인가 만들어야 쓸모가 있겠죠??

     

    여기서 그 '무엇'이 Instance입니다.

    흔히 객체지향 프로그래밍에서는 class의 instance를 Object(객체)라고 합니다.

    객체지향 프로그래밍에서는 class를 통해 인스턴스화 된 object들이 서로 상호작용하며 프로그램을 구성하고 작동시키게 됩니다.

     

    Swift에서는 class, struct, enum를 통해 인스턴스화 된 object들을 instance(인스턴스)라고 부릅니다.

    결국 부르는 용어를 다르게 하는 것뿐입니다.

    Object(객체)라고 불러도 되는데 Swift 공식문서에서는 더 일반적인 용어인 Instance(인스턴스)라는 단어를 사용합니다.

     

    일반적인 객체지향 프로그래밍 언어 : Class의 Instance(인스턴스) = Object(객체)

    Swift : Class, Struct, Enumeration의 Object(객체) = Instance(인스턴스)

    (공식문서에는 Swift의 class와 struct는 다른언어들에 비해 기능적으로 매우 비슷하기 때문이랍니다.)

     

    그럼 우리가 만든 설계도 Cat 구조체를 가지고 인스턴스를 생성해 보겠습니다.

     

     

    Initializer(생성자)를 통해서 구조체의 인스턴스를 만들 수 있습니다.

    (생성자에 대해서는 이후에 자세히 다룰게요!)

     

    이렇게 인스턴스를 만들면 이제 이 인스턴스는 name과 age 프로퍼티를 가지게 되었고 speak() 메서드를 통해서 어떠한 작업을 할 수 있게 됐습니다.

     

    Class의 인스턴스도 한 번 만들어 보겠습니다.

     

     

    마찬가지로 생성자를 통해서 클래스의 인스턴스를 만들 수 있습니다.

     

     

     


    그럼 뭘 사용하지??

     

    Structure와 Class중에 뭘 사용해야할까?? 라는 고민이 생길 수 있습니다.

    Class는 structure에서는 사용하지 못하는 Inheritance(상속), Deinitializer, Type Casting, Reference counting의 기능을 추가적으로 제공하기때문에 조금 더 복잡합니다.

     

    그렇기 때문에 위의 4가지 기능이 필요하거나 reference type(참조 타입)으로 처리되어야한다면 class를 사용하면 됩니다.

    그 경우가 아니라면 structure와 enumeration을 사용하는게 좋습니다!

     

    오늘은 struct와 class를 어떻게 선언하고 자세하지는 않지만 instance가 무엇인지 대강 공부해보았습니다.

    다음 포스팅에서는 Property(프로퍼티)에 대해서 공부해 보도록 하겠습니다.

     

     


     

    참고사항

     

    https://kxcoding.com

     

    여러분의 새로운 도전을 응원합니다 | KxCoding

    Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기

    kxcoding.com

     

     

    https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html

     

    Structures and Classes — The Swift Programming Language (Swift 5.6)

    Structures and Classes Structures and classes are general-purpose, flexible constructs that become the building blocks of your program’s code. You define properties and methods to add functionality to your structures and classes using the same syntax you

    docs.swift.org

     

     

     

    728x90

    'Programming > Swift' 카테고리의 다른 글

    Swift - Stored Property  (0) 2021.10.24
    Swift - Value type vs Reference type  (0) 2021.10.23
    Swift - Enumeration CaseIterable  (0) 2021.10.18
    Swift - Enumeration Associated Value  (0) 2021.10.16
    Swift - Enumeration (열거형)  (0) 2021.10.15
Designed by Tistory.