짧은인사, 하루의 사건, 나의 행동
ToDo
✅ 운동 clear~
✅ 나태지옥 빠져나가기
✅ 졸업신청인가 유예인가?
✅ Swift singleton pattern 공부
후 오픽 점수를 IM2를 받아 졸업을 할수 있게 되었습니다만.....
과연 졸업을 하는것이 맞는것인가? 졸업유예를 하는것이 맞는것인가?? 허허..
어떻게 생각하시나요?
저는 아직 모르겠습니다만...
둘다 이후에 행적은 비슷할것 같지만 어떤것이 더욱 유리할까요~!~! 유리...라,,,,
이득? 흠... 뭐 비슷비슷 할것 같습니다만~!~
유예신청 기간에 생각좀 해보겠습니다..ㅎ
하루 루틴을 예상하고 내일부터 지켜보도록 하겠습니다. (자세한 일정은 추가하지 않는다.. 나는 극Pㄷ,,)
8시쯤 느지막하게 기상 후 식사
9시 운동출발
11시 집도착
12시 점식먹고
13시 유데미 강의 때리기 (틈틈히 쉬기)
16시 cs공부
18시 or 19시 저녁
~휴식
22시 인턴/신입 공고 구경 코테한문제 때리기?
24시 or 01시 취침
이렇게 보니 흠 너무 계획이 난장판이군요...
조금더 자세하게 정리하고 지켜나가 보겠습니다. 일단 저건 초안 ㅋ
배운점
UserDefaults를 이전에 간단한 TODO앱을 만들때 공부하였습니다만!
오늘 Udemy강의에서도 todo앱을 만들면서 싱글톤 패턴이 나와
싱글톤패턴을 공부해보았습니다..하하
싱글톤 패턴(Singleton pattern)
특정 용도로 객체를 하나만 생성하여, 공용으로 사용하고 싶을 때 사용하는 디자인 유형. 이라고 정의되어있습니다.
또는 한 개의 클래스로 만드는 객체는 단 한개여야만 한다는 규칙을 가진 디자인 패턴 입니다.
프로그램 전체에 단 하나의 전역 객체를 만들어놓고 다른곳에서 이 하나의 객체에 접근하는것 입니다.
EX)
URLSession.shared : 네트워크 처리를 할 때 URLSession 객체를 이용하는데, 이미 만들어져 있는 shared 객체에 접근해 메서드를 수행한다.
UserDefaults.standard : UserDefault에서 기본적으로 공유하고 있는 standard 저장소에 접근해 쓰고 읽기 위해 만들어져 있는 standard 에 접근해 메서드를 수행한다.
이 위 두예시가 싱글톤 패턴을 기반으로 만들어졌다고 생각하면 된다 합니다 ㅎㅎ
import UIKit
//Car 클래스는 빨간색 색상을 가지고, static let으로 만들어진 Car()의 객체인 singletonCar를 만듭니다.
class Car {
var colour = "Red"
//싱글톤 인스턴스를 저장하는 static상수
static let singletonCar = Car()
}
let myCar = Car.singletonCar
myCar.colour = "Blue"
//인스턴스 공유
let yourCar = Car.singletonCar
print(yourCar.colour) //yourCar도 같은 싱글톤 인스턴스를 참조하므로 "Blue"가 출력됩니다.
class A {
init() {
Car.singletonCar.colour = "Broun"
}
}
class B {
init() {
print(Car.singletonCar.colour)
}
}
let a = A()
let b = B()
//A클래스의 인스턴스를 생성하며 색상을 Brown으로 변경됩니다.
//B클래스의 인스턴스를 생성하면서 색상을 출력합니다. "Brown"출력
결과적으로 싱글톤 패턴을 사용하면 언제나 동일한 Car객체에 접근할 수 있으며, 객체의 상태를 전역적으로 관리할 수 있습니다.
위의 코드에서 볼 수 있듯이 여러 클래스에서 해당 싱글톤 인스턴스를 공유하고 상태를 변경할 수 있음을 보여줍니다.
위와같이 강의를 보며 싱글톤 패턴을 이해하였는데요!
다른 블로그를 구경하며 다른 예제를 보며 이해를 도왔습니다.
class UserInfo {
var id: String?
var password: String?
var name: String?
}
User의 정보를 저장하는 UserInfo라는 클래스를 선언합니다.
//A ViewController
let userInfo = UserInfo()
userInfo.id = "Sodeul"
//B ViewController
let userInfo = UserInfo()
userInfo.password = "123"
//C ViewController
let userInfo = UserInfo()
userInfo.name = "Sodeul"
A,B,C ViewController에서 각각의 UserInfo객체를 만들어서 저장하면,
각 인스턴스의 프로퍼티에만 저장이되며 데이터는 공유할 수 없게 됩니다.
따라서 UserInfo에 대한 인스턴스는 최초 생성될 때 딱 한번만 생성해서 전역으로 선언하고 이후에 이 인스턴스만 접근 가능하게하자
--> 이 말이 Singleton Pattern 입니다.
따라서
class UserInfo {
static let shared = UserInfo()
var id: String?
var password: String?
var name: String?
private init() { }
}
static을 이용해 인스턴스를 저장할 shared라는 프로퍼티를 생성합니다.
이후에 혹시 init를 호출해 인스턴스를 또 생성하는 것을 막기위해 init의 접근제어자를 private로 지정합니다.
위와같이 싱글톤을 만들수 있습니다.
외부에서의 접근은
//A ViewController
let userInfo = UserInfo.shared
userInfo.id = "Sodeul"
//B ViewController
let userInfo = UserInfo.shared
userInfo.password = "123"
//C ViewController
let userInfo = UserInfo.shared
userInfo.name = "Sodeul"
어느 ViewController에서든 shared라는 프로퍼티에 접근하면 하나의 인스턴스를 공유합니다.
그럼 싱글톤패턴에 대해 알아봤으니 장/단점 또한 알아 보겠습니다 ㅎㅎ
싱글톤 패튼의 장/단점
장점
- 메모리를 단 한번만 사용한다.
해당 객체는 단 한번만 만들어지기 때문에 메모리 관리가 편하다는 장점이 있습니다.
- 객체 접근 시간이 줄어든다.
다시 메모리를 할당하고, 초기화(init)하는 시간이 줄어드니 한번 만들어 두기만 하면
다시 접근할 때 매번 객체를 만드는 것보다 조금이나마 시간이 빠르다.
- 전역 번위에서 상태, 데이터 전달이 쉬워진다.
어디에서든 접근할 수 있기 때문에 데이터를 전달할 수 있다.
단점
- 테스트가 힘들다.
싱극톤 클래스는 초기화를 private로 선언합니다.
이렇게 한다면 테스트용 Mock 객체를 만들어내기 어려워진다.
- 의존성을 만들어낸다.
어디에서나 접근을 할 수 있으니 어떤 객체와 연결되어 있는지 다 찾아내기 힘들어진다.
- 멀티 스레드 환경에서 위험할 수 있다.
멀티 스레드 환경에선 싱글톤 객체가 2개가 생기는 문제가 발생할 수 있다.
또한 싱글톤 객체 내부의 데이터를 동기적으로 처리하지 않으면 여러 객체가 동시에 사용되다 꼬여버릴수 있다.
테스트용 Mock 객체..??
: Swift에서 Mock 객체는 주로 단위 테스트를 수행할 떄 사용되는 가상의 객체라고 합니다!
이 객체는 실제 객체를 모방하여 특정 동작을 시뮬레이션 하거나 메서드 호출을 기록하고 검증하는데 사용된다 하군요.
주로 의존성 주입 패턴과 함께 사용되어 코드의 격리성을 유지하고 테스트 가능한 코드를 작성하는데 도움이 된다고 합니다.
(링크)
생각과 감정
생각과 감정이라.. 하하 위에서 다 말을 해버려서 훠훠
앞으로의 계획선언
이제 더는 학생이 아닐수도..? 하지만 배움엔 끝이없죠 매일 꾸준이 공부하다 보면 좋은 기회가 있을거라 생각합니다 ㅎㅎ
항상 열심히 정진 하겠습니다.
오늘만큼은 부지런했던 나에게 감사해...🙏
https://stackoverflow.com/questions/137975/what-are-drawbacks-or-disadvantages-of-singleton-pattern
What are drawbacks or disadvantages of singleton pattern?
The singleton pattern is a fully paid up member of the GoF's patterns book, but it lately seems rather orphaned by the developer world. I still use quite a lot of singletons, especially for factory
stackoverflow.com
https://babbab2.tistory.com/66
Swift) 싱글톤 패턴(Singleton Pattern)
안녕하세요 :) 소들입니다 이번 포스팅에선 싱글톤 패턴이 무엇이고, Swift에선 어떻게 사용되는지에 대해 알아보려고 해요!!! 왜 네트워크 하다가 갑자기 SingleTon이냐 하면 내 마음임 모든 포스팅
babbab2.tistory.com
Swift: Singleton, 싱글톤 패턴
Singleton 패턴은 무엇인지, 장단점을 알아보고, Semaphore를 이용한 사용 예시까지 살펴보자.
medium.com
'TIL' 카테고리의 다른 글
TIL_20240116 iOS에서 데이터를 저장하는 방법 (0) | 2024.01.16 |
---|---|
TIL_20240110 Swift_AppSandbox, NSCoder (0) | 2024.01.10 |
TIL_20240103 (0) | 2024.01.05 |
TIL_20231226 (0) | 2023.12.26 |
TIL_20231223 (0) | 2023.12.23 |