[iOS] UnitTest 사용해보기
·
iOS/개념 & 개발
서론 의존성 주입 등을 공부하면서 "테스트가 쉬워진다."라는 문장을 자주 접했습니다. 오늘은 UnitTest가 무엇인지 알아보고, Xcode의 UnitTest 기능을 간단히 사용해보겠습니다. UnitTest UnitTest는 프로젝트의 특정 모듈이 의도된대로 정확히 작동하는지 검증하는 절차로, 모든 함수와 메서드에 대한 테스트 케이스를 작성하는 절차를 의미합니다. 작성한 프로그램이 의도대로 잘 동작하는지 검증하는 가장 작은 단위의 테스트라고 할 수도 있습니다. 작은 단위의 테스트이므로 테스트에는 의존성을 최소화해야 합니다. 따라서 각 객체의 관심사를 분리해야 하고, 이때 의존성 분리와 주입이 필요합니다. 저도 최근에 의존성에 대한 포스팅을 작성했는데요. 의존성 주입 DI(Dependency Injecti..
[Swift] Dependency Container(feat. Property Wrapper)
·
Swift/개념 & 응용
* 틀린 내용이 있을 수 있습니다. 댓글로 알려주시면 매우 감사하겠습니다. Dependency Container 지난 포스팅에서 DI에 대해 배웠습니다. DI를 하나의 Container로 관리하는 방법이 Dependency Container(DI Container, IoC Container)입니다. 기존 DI는 인스턴스 생성 위치가 분산되었지만, Container를 사용하면서 한 곳에 모아진다는 장점이 있습니다. 동일한 생성자 코드 중복을 줄일 수 있다는 장점도 있습니다. 이번 포스팅에서 (매우) 기본적인 Container를 직접 만들어보고, 다른 포스팅에서 Swinject 라이브러리를 소개하겠습니다. Dependency Container 구현 Dependency Container(이하 Container..
[Swift] 의존성 주입 DI(Dependency Injection)와 IoC(Inversion Of Control)
·
Swift/개념 & 응용
서론 SOLID 원칙 with Swift의 D를 담당하고 있는 의존성은 중요한 개념입니다. 객체 지향에서 객체의 의존성은 빼놓을 수 없는 개념이고, 결합도와 응집도에서 다룬 낮은 결합도의 핵심 방법이기 때문입니다. 의존성과 의존성 주입의 개념 자체는 간단하기 때문에 짧게 다뤄보겠습니다. Protocol을 이용한 ViewModel 의존성 주입 등 지난 여러 포스팅들에서 간접적으로 소개한 적이 있기 때문에 함께 읽어주시면 감사하겠습니다 OvO b 의존성 의존성이란 하나의 객체에서 다른 객체를 참조하는 것을 말합니다. class AClass { var number: Int = 0 } class BClass { var numberClass: AClass = AClass() } let bClass = BClass..
[디자인패턴] Abstract Factory(추상 팩토리) 패턴 with Swift
·
CS/디자인패턴
서론 저번 포스팅에서는 팩토리 메서드 패턴에 대해 알아보았습니다. [디자인패턴] Factory(팩토리) 패턴 with Swift 팩토리 패턴 팩토리 패턴은 팩토리 객체를 이용해 객체 생성 관심사를 분리하는 디자인 패턴입니다. 팩토리 메서드 패턴과 추상 팩토리 패턴으로 나뉘며 Swift에서는 프로토콜로 구현할 수 있습 jeong9216.tistory.com 이번 포스팅에서는 Abstract Factory 패턴에 대해 알아보겠습니다. 연관된 내용이 많으므로 지난 포스팅을 보고 와주세요. Abstract Factory 패턴 추상 팩토리 패턴은 구체적인 클래스에 의존하지 않고 서로 연관된 객체 조합을 만드는 인터페이스를 제공하는 패턴입니다. 지난 포스팅에서 다룬 팩토리 메서드 패턴에서는 PlayerFactory..
[디자인패턴] Factory(팩토리) 패턴 with Swift
·
CS/디자인패턴
팩토리 패턴 팩토리 패턴은 팩토리 객체를 이용해 객체 생성 관심사를 분리하는 디자인 패턴입니다. 팩토리 메서드 패턴과 추상 팩토리 패턴으로 나뉘며 Swift에서는 프로토콜로 구현할 수 있습니다. 팩토리 패턴이 나오게 된 배경은 OCP(개방 폐쇄 원칙)와 연결지어 설명할 수 있습니다. OCP는 확장에는 열려 있지만 변경에는 닫혀 있어야 한다는 원칙인데요. 닫혀 있어야 한다는 것은 확장을 했을 때 다른 부분에 영향을 주지 않아야 한다는 것을 의미합니다. (예시는 여기) 객체 생성 관심사를 분리해서 객체의 속성, 함수 등이 변경될 때 수정이 발생하는 범위를 최소화할 수 있습니다. 팩토리 메서드 패턴 팩토리 메서드 패턴은 인터페이스로 객체 생성 팩토리를 제공하고, 객체 생성 결정은 하위 클래스가 정하는 패턴입니..
[Swift] defer
·
Swift/개념 & 응용
서론 최근 lock 코드를 작성하면서 defer를 처음 사용해보았는데요. 이번 포스팅에서 defer란 무엇이고 어떤 특징이 있는지 알아보겠습니다. defer defer는 코드 블럭이 종료되기 직전에 호출되는 코드 블럭입니다. "코드 블럭"이기 때문에 메서드 뿐만 아니라 for문, if문 등이 종료될 때도 사용할 수 있습니다. 사용법은 간단합니다. 코드 블럭 안에 defer { } 를 추가하면 됩니다. func functionA() { print("In functionA") defer { print("Out functionA") } } functionA() //In functionA //Out functionA 메서드가 종료될 때 Out functionA가 호출되는 것을 볼 수 있습니다. if true {..
[Swift 알고리즘] 백준 마법사 상어와 파이어볼, 토네이도, 파이어스톰, 비바라기(20056, 20057, 20058, 21610)
·
코딩테스트
백준의 마법사 상어 시리즈 중 파이어볼, 토네이도, 파이어스톰, 비바라기 문제입니다. 단순 구현 문제라 코드가 길어 전체 코드는 링크로 첨부합니다. 모든 코드는 https://github.com/jeongju9216/Algorithm/tree/main/Swift 에서 볼 수 있습니다. Swift 코드가 올라와 있는게 많이 없어서 자세한 풀이보다는 개인 복습 겸 올렸습니다. 마법사 상어와 파이어볼 (BOJ 20056) 풀이 코드 : https://github.com/jeongju9216/Algorithm/blob/main/Swift/BOJ/20000/20056.swift 파이어볼을 범위 밖으로도 이동 시키는 작업이 포인트인 문제입니다. 질량이 0인 파이어볼은 사라진다는 점 파이어볼은 4방향으로 퍼지는게 아..
[Swift] 결합도와 응집도
·
Swift/개념 & 응용
서론 패턴과 설계를 공부하는 과정에서 "결합도"와 "응집도"라는 단어가 반복적으로 나오는 것을 발견했습니다. 좋은 설계란 "낮은 결합도"와 "높은 응집도"를 가지는 유지보수가 쉬운 설계를 말한다고 하는데요. 여기서 말하는 결합도와 응집도가 무엇인지 알아보겠습니다. 모듈 결합도와 응집도에 대해 알아보기 전, 모듈이 뭔지 알아야 합니다. 모듈은 개념의 범위가 넓기 때문에 명확하게 말하긴 어렵지만, 위키백과에서는 "기본적으로 본체에 대한 독립된 하위 단위" 라고 정의하고 있습니다. 프로그램이 본체라면, 이를 구성하는 클래스 등을 독립된 하위 단위로 말할 수 있습니다. 클린 코드, 클린 아키텍처의 저자인 로버트 마틴은 모든 모듈은 제대로 실행되어야 하고, 변경이 쉬워야 하고, 이해하기 쉬워야 한다고 말했습니다...
[Swift] Protocol 확장을 이용한 Singleton 개선
·
Swift/개념 & 응용
서론 싱글톤 패턴의 가장 큰 장점은 편리하다는 것입니다. 하지만 여러 부수적인 문제가 많고 특히, 사이드 이펙트가 크다는 점이 문제입니다. 프로젝트 전역에 두루두루 쓰이는 게 싱글톤 객체인데, 이말은 곧 싱글톤 객체에 문제가 생기면 프로젝트 전역에 문제가 생긴다는 뜻이기 때문입니다. 오늘은 Swift의 프로토콜 확장을 통해 이를 어느정도 해소할 수 있는 방법을 알아보겠습니다. 이것도 장단점이 있으니 프로젝트에 적절할 때 적용해보면 좋을듯 합니다. 프로토콜 확장(extension Protocol) 기본 원리는 프로토콜을 이용해 한 곳에서 싱글톤 호출을 담당하는 것입니다. 구조체나 클래스가 아니라, 프로토콜을 사용하는 이유는 싱글톤의 존재를 숨길 수 있기 때문입니다. 프로토콜을 정의하고, extension으..
[Swift] SOLID 원칙 with Swift
·
Swift/개념 & 응용
서론 최근에 디자인 패턴 글과 ViewController, ViewModel의 역할 분리 글을 작성했습니다. 해당 글들에서는 배경지식 없이도 이해가 되도록 표현을 풀어서 쓰다보니 정확성이 떨어진다고 느껴졌습니다. 이도저도 아니게 된 것 같아 보다 정확한 내용 전달을 위해 이후 관련 글에서는 "단일책임 원칙", "개방폐쇄 원칙" 등의 단어로 표현을 명확하게 하려고 합니다. 그런 의미로 이번 포스팅에서 SOLID 원칙에 대해 정리해보고, Swift와 iOS에서는 어떻게 적용할 수 있는지 알아보겠습니다. SOLID란 SOLID란 OOP(객체 지향 프로그래밍) 및 설계의 기본 원칙으로, 단일 책임 원칙 (Single Responsibilty Principle) 개방 폐쇄 원칙 (Open-Closed Princi..
유정주
정주는 개발 중 :]