View

300x250

Singleton은 유니티에서 게임개발을 할 때 Manager를 만들면서 정말 많이 활용했던, 거의 제가 알고있는 유일한 그리고 매우 유용한 디자인 패턴입니다. 진짜 쉬워서 간단하게 짚고 예시를 보여주면 다들 이해할 수 있을 거예요 ㅋㅋㅋ


싱글톤이란?

간단하게 말하면, 클래스의 인스턴스가 딱 하나만 존재할 때 이 인스턴스로의 접근을 쉽게 할 수 있도록 만들어주는 방법입니다.

클래스를 선언하면서, 그 클래스에서 static으로 인스턴스를 하나 만들어주면 됩니다. 보통 이 인스턴스의 이름을 shared라는 네이밍을 많이 합니다. (저는 C#의 싱글톤에서는 instance로 주로 썼었어요) 이렇게 만들어주면, 다른 클래스나 인스턴스에서 단 하나뿐인 이 인스턴스로 접근할 때 인자나 다른 방법으로 전달할 필요 없이 UserInformation.shared.~~**의 방식으로 접근이 가능**합니다. 아무데서나 접근이 가능해서 굉장히 굉장히 편리하게 사용하던 방법이예요.

 

이렇게 싱글톤으로 만들어두면
다른 클래스 아무데서나 클래스명.shared.~ 으로 접근이 가능합니다.

 

물론 아무데서나 접근이 가능하다는 점이 양날의 검이 되어서 부정적인 효과를 가져오기도 합니다. 단지 편하다는 이유로 불필요한 싱글톤을 만들수도 있고, 병렬로 처리할 때 동시에 같은 싱글톤 변수를 참조하는 등의 상황이 오면 문제가 발생할 수 있으니 여러가지 상황을 고려해 꼭 필요한 경우에만 싱글톤을 사용하는 것을 권장합니다!


싱글톤 활용해보기

네비게이션 컨트롤러를 하나 만들어서, 이전 화면에서 이름과 나이를 입력하면 싱글톤에 값을 올려두고, 뒷 화면에서 싱글톤에 접근해 값을 가져와 Label에 이름과 나이를 출력하는 예제를 한번 만들어볼게요. 이 예제는 부스트코스의 iOS 앱개발 강의 중, 싱글톤 강의의 예제입니다.

이렇게 네비게이션 컨트롤러로 2개의 뷰를 묶어줬습니다. 앞 화면에는 이름과 나이를 작성할 TextField와 싱글톤으로 값을 전달할 버튼, 다음 화면으로 넘어가는 Push 버튼을 달아줬어요. 뒷 화면에는 이름과 나이를 출력할 2개의 레이블을 담아줬습니다.

 

앞 화면에서 값을 입력한 뒤 버튼을 누르면 싱글톤으로 만들어둔 UserInfromation의 shared라는 인스턴스에 값을 저장하게 됩니다.

 

앞에서 배웠던 뷰의 상태변화 감지 메서드 중 하나인 viewWillAppear 을 사용해서 만약에 뷰가 올라오면, 화면에 표시되기 직전에 nameLabel과 ageLabel에 싱글톤으로 만들어둔 UserInformation의 Shared 인스턴스에서 값을 가져와 업데이트 하도록 코드를 작성했습니다. 

 

그러면 위와 같이 정상적으로 작동하게 됩니다! 


싱글톤 자체는 어렵지 않은 개념이라 이정도만 설명해도 될 것 같다고 생각이 되네요! 싱글톤 패턴에 대해 더 많은 지식이 필요하다면, 또는 다른 디자인 패턴에 대해서도 공부가 필요하시다면 아래의 링크에서 부스트코스 iOS 앱개발 강의를 들어보는 것을 추천합니다! 강의 전체가 무료이고, 네이버 아이디로도 이용이 가능하기 때문에 부담없이 iOS 앱개발 강의를 들을 수 있어서 좋은 것 같아요. Swift를 저도 처음 배우는데 강의를 계속 들으니까 이제 문법이 어느정도 이해가 되고 있기도 하구요. 

 

https://cc.naver.com/cc?a=lel.list&r=&i=16855&bw=1278&px=519&py=1650&sx=519&sy=169&m=1&nsc=edwith.all&u=https%3A%2F%2Fwww.edwith.org%2Fboostcourse-ios%2Flecture%2F16855%2F

 

[LECTURE] 1) Singleton? : edwith

싱글턴 (Singleton) iOS 애플리케이션 디자인 패턴 중 하나인 싱글턴 패턴과 싱글턴 패턴을 사용할 때 주의해야 할 점에 대해 살펴봅니다. 학습 목표 1. 싱글턴 패턴에 대... - 부스트코스

www.edwith.org

 

320x100
Share Link
reply
반응형
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31