본문 바로가기

스폰지밥으로 공부하는 swift/객체지향과 디자인패턴

(5)
빌 프린터로 알아보는 Observer 패턴 공식문서에서는 '등록된 참관인에게 정보를 방송할 수 있는 알림 발송 메커니즘입니다.' 라고 되어있는데요.. 잘 와닿지는 않죠? 쉽게 풀어 설명해보겠습니다. 집게리아에서는 손님들이 주문을 하면 그 주문이 징징이를 거쳐 스펀지밥에게 전달되는데요, 징징이가 주문을 받은 후 스펀지밥한테 어떤 주문이 들어왔는지 소리치면 스펀지밥은 조리를 시작하죠. 하지만 이런 방식은 징징이에게 많은 부담을 주고, 스펀지밥도 주문을 놓칠 수 있는 리스크가 있어요. 이 문제를 해결하기 위해 집게리아는 '빌 프린터'를 도입하기로 합니다. 징징이가 주문을 받으면 이 프린터를 통해 주문 내용이 바로 주방에 전달되는 시스템이에요. 이제 징징이는 주문을 큰 소리로 외칠 필요가 없고, 손님들은 식사에 집중할 수 있겠네요! 그리고 스펀지밥은 주..
1급 객체 넌 도데체 뭐하는 놈이냐 Swift에서 함수는 1급 객체로 간주된다..라는 말을 들어보셨나요? 저는 처음에 이 1급 객체라는 말을 보고 나서 도데체 이해가 안갔었는데요, 클로저를 공부하다가 다시 한번 마주하게 되어 다시 공부해보게 되었고, 간단하게 설명하는 글을 작성해보려합니다. 1급 객체라는 말은, 1급이라고 해서 뭐 특별한 혜텍을 받는것은 아니구요. 함수를 다른 객체와 동일하게 취급한다는 의미입니다. 함수를 변수에 할당하거나 다른 함수의 인자로 전달할 수 있으며, 함수의 반환 값으로 사용될 수 있는 것을 말해요. 1급 객체의 특징과 중요성 한마디로 요약하자면 함수를 일반 데이터처럼 다루는게 가능하다~ 라고 이해하시면 좋을 것 같네요! 이러한 특성 덕분에 고차 함수가 구현 가능하고 Swift에서 함수형 프로그래밍 패러다임이 가..
싱글턴 패턴이란? 싱글턴 패턴이 뭐죠? 싱글턴 패턴은 클래스의 인스턴스가 오직 하나만 생성되어 전역적으로 접근 가능하도록 보장하는 디자인 패턴입니다. 왜 써야하는거죠? 싱글턴 패턴을 사용하면 전역적으로 하나의 인스턴스가 생겼다는 것이 보장되면서도 어디서든 쉽게 접근이 가능해요. 즉 전역적으로 접근이 가능하지만 일관된 객체 생성이 보장되어야 할 때 유용합니다! 말이 좀 딱딱한 것 같아서 바로 집게리아를 활용해 예시를 들어보겠습니다 ㅎㅎ class CashRegisterManager { // 싱글턴 인스턴스를 저장할 static property를 선언 static let shared = CashRegisterManager() // 초기화를 private으로 선언하여 외부에서 인스턴스 생성을 막기 private init() {..
캡슐화 왜 해야함?? 캡슐화란? 객체의 속성과 메서드를 하나로 묶어 외부로부터의 직접적인 접근을 제한하고, 해당 객체의 메서드를 통해서만 변경이 가능하도록 하는 것 🤓 즉 캡슐화를 하면 코드의 복잡성을 관리하고 재사용성을 높일 수 있습니다. 캡슐화가 필요한 이유 4가지 정보은닉 - 클래스의 내부 구현을 외부로부터 숨기게 된다면 클래스의 사용자는 내부 구현에 대해 알 필요 없이 인터페이스(프로토콜)를 통해 클래스를 사용할 수 있습니다. 재사용성 - 독립적인 모듈을 만들어 다른 곳에서 재사용 할 수 있습니다. 유지보수 - 해당 클래스가 어떻게 구현되었는지 알 필요 없이 그 클래스를 사용하거나 수정할 수 있습니다. 안정성 - 어느 객체가 잘못된 방법으로 상태를 변경하면서 발생할 수 있는 오류를 방지할 수 있습니다. 이러한 이유로,..
의존성, 의존성 역전의 법칙과 의존성 주입 의존성이 뭔데요? 한 객체에서 특정 요소가 변경되면 참조를 하고 있는 객체의 다른 요소에도 영향을 주는 관계를 말해요. - 자동차로 예를 들어보자면 기름이 다 떨어지거나 엔진이 고장난다면 자동차가 동작하지 않겠죠? 이런 상황을 프로그래밍적인 용어로'자동차는 휘발유에 의존하고 있다'라고 표현할 수 있어요! 이처럼 어떤 요소가 다른 요소에 의존하는 것을 의존성이라고 합니다. 의존성 역전의 법칙은 또 뭐죠? 의존성 역전의 법칙(Dependency Inversion Principle, DIP)은 소프트웨어 설계 원칙 중 하나로, 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 되며, 둘 모두 추상화된 인터페이스에 의존해야 한다는 원칙입니다. 말이 좀 어렵죠.. ㅎㅎ 제가 좋아하는 스펀지밥을 데려와보겠습니다..