25.10.21 릴리 TIL

Lily·2021년 10월 25일
0

Today I Learned

목록 보기
15/30
post-custom-banner

학습내용


1. 값 타입과 참조 타입

값 타입(Value Type)

값 타입은 인스턴스를 생성하면 stack에 인스턴스 값을 저장한다. 그리고 변수/상수에 할당되거나 함수로 전해질 때 stack의 값이 복사되어 전달된다. 예를 들어, 새로운 변수에 값 타입이 전달되면, 원래 인스턴스 값(인스턴스의 실체)이 복사되어 stack에 들어가고 새로운 인스턴스가 생성된다.

struct Person {
    var name = "lily"
    var gender = "female"
}

let lily = Person()
let mike = lily // mike는 lily와 값은 같지만, 메모리 주소는 다른 새로운 인스턴스

참조 타입(Reference Type)

참조 타입은 Heap에 인스턴스를 저장하고, Stack엔 Heap의 메모리 주소를 저장한다. 그리고 변수/상수에 할당되거나 함수로 전해질 땐 Stack의 메모리 주소(=참조)가 복사되어 전달된다. 예를 들어, 새로운 변수에 참조 타입이 전달되면, 메모리 주소가 전달되고 결국 새로운 변수도 동일한 인스턴스를 가리키는 꼴이 된다.

class Person {
    var name = "lily"
    var gender = "female"
}

let lily = Person()
let mike = lily // mike와 lily는 하나의 동일한 인스턴스의 메모리 주소를 공유
  • 참조 타입은 stack의 메모리 주소를 거쳐 인스턴스에 접근하기 때문에, 바로 값에 접근하는 값 타입보다 느리다.
  • 참조 타입은 multi-thread 환경에서 여러군데서 참조 될 수 있기 때문에 추적이 힘들고, 데이터가 꼬일 수 있다.

참고
Swift의 Type과 메모리 저장 공간
구조체와 클래스의 차이 - 메모리 저장 방식

메모리와 연관지어 조금 더 딥하게 공부해보아야겠다!


2. Singleton Pattern

Singleton Pattern 이란?

전역에서 접근 가능한 단 하나의 클래스 인스턴스를 생성하는 디자인하는 패턴

활용 케이스
앱 전체에서 공유된 자원을 관리하고, control point가 하나여야 할 때


Singleton Class Type

Singleton Pattern을 만드는 클래스 타입을 Singleton Class Type이라 한다.


만드는 방법

타입 프로퍼티에 클래스의 인스턴스를 할당한다.

단 하나이고, 전역에서 접근 가능한 타입 프로퍼티에 인스턴스를 저장해준다. 타입 프로퍼티는 처음 접근 될 때 lazy하게, 딱 한번만 초기화되도록 보장되어 있다. (multi-thread환경에서 동시다발적으로 접근하더라도 한 번만 초기화 된다)

타입 프로퍼티 명은 보통 shareddefault를 많이 쓴다.

class Singleton {
    static let shared = Singleton()
}

추가적으로 아래와 같은 옵션을 줄 수 도 있다.

  • init( )의 접근 제어 레벨을 private으로 설정해서 클래스 외부에서 인스턴스를 생성할 수 없게 막는 방법
class Singleton {
    static let shared = Singleton()
   
    private init() { }
}
  • 초기화 외 추가적인 셋팅을 더하고 싶을 때, 클로저를 활용하는 방법
class Singleton {
    static let shared: Singleton = {
        let instance = Singleton()
        // setup code
        return instance
    }()
}

장점 / 단점

장점

  • 하나의 인스턴스만 생성하므로 메모리 낭비를 방지 할 수 있다.
  • 전역 범위에서 데이터 공유가 가능하다.

단점

  • 여기저기서 참조될 수 있으므로 추적이 힘들고
  • 다른 객체들간의 의존성을 높인다. (객체지향과 위배)

고민한 점


앱에서 하나의 인스턴스를 공유하는 방법

  • Notification Center
  • Singleton pattern
  • Delegate pattern

의 특징과 장단점을 비교해가며 생각해보았다.

profile
i🍎S 개발을 합니다
post-custom-banner

0개의 댓글