[ Swift ]Class 와 Struct, enum

이숭인·2021년 7월 21일
0

[ Swift ]

목록 보기
1/13
post-thumbnail

Class

  • 전통적인 OOP 관점에서의 클래스
  • 단일 상속 가능
  • 메서드, 프로퍼티를 가질 수 있음
  • 참조타입
  • Apple 프레임워크의 대부분 큰 뼈대는 모두 Class로 구성되어 있다.

Struct

  • 상속 불가
  • 메서드, 프로퍼티를 가질 수 있음
  • 값 타입
  • Swift의 큰 뼈대는 모두 구조체로 구성되어 있다. (int, String.. 등 자료형)

Enum

  • 상속 불가
  • 메서드, 연산 프로퍼티를 가질 수 있다.
  • 값 타입

연산 프로퍼티란?


보통의 프로퍼티는 값을 저장하는 역할을 한다.
연산 프로퍼티는 특정한 연산을 통해 값을 리턴해준다

class Point {
    var tempX : Int = 1
    var x: Int {
        get {
            return tempX
        }
        set(newValue) {
            tempX = newValue * 2
        }
    }
}
var p: Point = Point()
p.x = 12

자세한건 나중에 따로 연산 프로퍼티에 대해 알아보면 좋을듯 하다


특징

class 와 sturct/enum 을 묶어서 생각해볼 수 있다.

  • class는 상속이 가능한 반면, struct와 enum 은 상속이 불가능하다.
  • class는 참조 타입, struct와 enum은 값 타입이다.
  • class, struct, enum 모두 확장(extension)이 가능하다.

Value vs Reference

value

  • 데이터를 전달할 때 값을 복사하여 전달

Reference

  • 데이터를 전달할 때 값의 메모리 위치를 전달

값 타입과 참조 타입은 데이터가 메모리에 저장되는 방식에 따라 다르다.

  • 값 타입은 값이 복사되어 새로운 인스턴스가 생성되고, 그 인스턴스가 stack 메모리 영역에 저장된다.

  • 참조 타입은 주소를 복사하여 이미 존재하는 인스턴스의 위치를 가리킨다.
    참조하는 값이 존재하는 위치를 stack 메모리 영역에, 참조되는 값은 heap 메모리 영역에 저장이 되어있다.

구조체는 언제 사용하나?

  • 참조가 아닌 복사를 원할 때

  • 자신을 상속할 필요가 없거나, 상속받을 필요가 없을 때


공통점 차이점

profile
iOS Developer

0개의 댓글