본문 바로가기

iOS/Swift

[Swift] Class 와 Struct

구조체와 클래스?

OOP(Object-Oriented Programming)를 위한 필수 요소로, 프로그램의 코드를 추상화하기 위해 사용합니다.

 

1. Struct (구조체) - Value Type

 

하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 도구입니다. 

- Struct 명 : 대문자 카멜 케이스 사용

- Property, Method 명 : 소문자 카멜 케이스 사용

 

상속이 불가능 합니다.

AnyObject로 타입캐스팅이 불가능합니다.

생성자를 구현하지 않을 시, 기본 initializer를 사용할 수 있습니다.

 

Swift에서 Struct를 사용할 경우, 

  • let -> Instance 내부의 Property 값을 변경할 수 없음.
  • var -> Instance 내부의 Property가 var로 선언된 Property에 한하여 값 변경이 가능함.
struct 구조체 이름 {
	프로퍼티와 메서드
}

 

struct Lecture: Custom {
   // Stored Property 
    let name: String
    var instructor: String
    var numOfStudent: Int
    var numOfRegistered: Int = 0
  
    // Computed Property : 있는 값을 가지고 조합해서 나타냄. (readonly)
    var description: String {
     	return "Title: \(name), Teacher: \(instructor)"
    }
    
    //stored property 값을 직접 변경하려고 할때 (mutating)
    mutating func register() {
      numOfRegistered += 1
    }
}

 

* Struct 자료 형태 사용 권장 (Apple 공식 문서)

 - 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적인 경우

 - 캡슐화한 값을 참조하는 것보다 복사하는 것이 적합한 경우

 - 구조체에 저장된 프로퍼티가 값 타입 이며, 참조하는 것보다 복사하는 것이 적합한 경우

 - 다른 타입으로부터 상속 받거나 자신을 상속할 필요가 없는 경우

 

 

 

2. Class (클래스) - Reference Type(참조 타입)

 

객체 지향 프로그래밍에서, 데이터와 그 조작 절차인 메소드를 정리한 객체의 추형을 정의한 것입니다.

- Class 명 : 대문자 카멜 케이스 사용

- Property, Method 명 : 소문자 카멜 케이스 사용

 

클래스는 상속받을 수 있기 때문에 상속받을 때에는 클래스 이름 뒤에 콜론(:)을 써주고 부모클래스 이름을 명시합니다.

 

class 클래스 이름 {
	프로퍼티와 메서드
}

class 클래스 이름: 부모 클래스 이름 {
	프로퍼티와 메서드
}

 

Struct와 Class의 공통점 & 차이점

구분 Struct Class
공통점 여러 변수를 담을 수 있는 컨테이너
데이터를 용도에 맞게 묶어 표현하고자 할 때 용이함
Property, Method를 사용하여 구조화된 데이터와 기능을 가짐
초기화 ( Initializer )를 정의 (초기화 될때의 상태를 지정함)
확장 ( extension ) 이 가능함 (새로운 기능 추가)
Protocol 사용이 가능함 (특정 기능 실행)
Subscript 사용이 가능함
타입 Value Type Reference Type
특징 Copy Share
상속  X O
타입 캐스팅 X O
Deinitializer - 인스턴스 메모리 해제 X O
Reference Counting - 메모리 관리 (참조해서 사용할 때 카운트) X O

 

 

언제, 어떤 것을 사용해야 할까?

 

Struct

1. 두 Object를 "같다, 다르다"로 비교해야 하는 경우 (데이터 자체)

2. Copy된 각 객체들이 독립적인 상태를 가져야 하는 경우

3. 코드에서 Object의 데이터를 여러 스레드에 걸쳐 사용할 경우

 

Class

1. 두 Object의 인스턴스 자체가 같음을 확인 해야 할때

2. 하나의 객체가 필요하고, 여러 대상에 의해 접근되고 변경이 필요한 경우

 

 

 

참고

https://shark-sea.kr/entry/Swift-%EA%B5%AC%EC%A1%B0%EC%B2%B4%EC%99%80-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%B0%A8%EC%9D%B4-struct-vs-class

 

Swift :: 구조체와 클래스 차이 (struct VS class)

안녕하세요! 상어입니다. 오늘은 swift를 배운다 하면 필수적으로 알아야 하는 개념인 struct와 class에 대해 써볼까합니다 :-) struct와 class는 같다면 같고.. 다르다면 참 다른 아이들인데, 공통점과 �

shark-sea.kr

https://medium.com/@jgj455/%EC%98%A4%EB%8A%98%EC%9D%98-swift-%EC%83%81%EC%8B%9D-struct-class-60fa5fd2218d

 

오늘의 Swift 상식 (Struct, Class)

구조체와 클래스란?

medium.com

https://dev-dream-world.tistory.com/124

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

UIWebView 와 WKWebView 차이  (0) 2021.12.12
[Swift] Array, Dictionary, Set, Tuple  (0) 2021.12.12
[Swift] 메모리를 참조하는 방법 (Strong, Weak, Unowned)  (1) 2020.07.30
[Swift] Type Casting  (0) 2020.07.29
[Swift] Closure  (0) 2020.07.29