[TIL] 아키텍처, 디자인 패턴

신승현·2024년 4월 30일

TIL

목록 보기
68/72
post-thumbnail

1️⃣ 아키텍처

아키텍처란?

소프트웨어 시스템의 기본적인 구조를 설계하고 이를 컴포넌트로 분할하며, 컴포넌트 간의 상호 작용 및 데이터 흐름을 정의하는 것을 말한다.

1. MVC 패턴

MVC은 내가 예전에 작성한 글을 보면 어떤 구조인지 알 수 있다.
👉 MVC 패턴으로 설계하기

다시 간단하게 설명하자면, Model은 데이터 부분, View는 보여지는 부분, Controller는 Model과 View의 사이에서 처리를 해주는 부분이다.

이번에는 내가 알고있는 내용과 추가로 MVC패턴의 장단점 부분도 강의로 알게되었다.

장점

  • 개발자들에게 직관적이고 이해하기 쉬운 구조이며, 각 부분이 서로 독립적으로 작동하면서 전체적인 애플리케이션 로직을 구성한다.

단점

  • 종종 뷰 컨트롤러가 매우 비대해지는 경향이 있으며, 뷰 컨트롤러에 많은 역할과 책임이 집중되어 복잡성을 증가시키고 유지보수를 어렵게 만든다.

장점인 부분은 이미 알고있던 부분이지만, 단점인 부분은 최근까지는 모르고 있던 부분이였다. 하지만 최근에 프로젝트를 진행하면서 위의 단점 부분이 확 와닿게 되었다. View Controller가 길어지면 최소 300줄 이상의 긴 코드가 되기도 했다.

2. MMVM 패턴

MVVM패턴은 이전에 많이 들었지만, 실제로 적용해본 적은 없는 패턴이다.

MVVM패턴은 'Model', 'View', 'ViewModel'로 분류할 수 있다.

  • Model은 MVC와 같이 데이터를 담당하는 부분이다.
  • View는 MVC와 달리 storyboard 부분과 ViewController 부분이라고 할 수 있다.
  • ViewModel은 View에 보여지는 데이터를 가지고 있고, 사용자의 데이터 처리를 Model에 전달하는 부분이다.

장점

  • 뷰와 비즈니스 로직을 분리시켜주어 각각의 역할이 분리되기 때문에, 코드의 가독성이 향상되고 유지보수가 쉬워진다.

단점

  • 이해하기 어렵다.
  • 작은 규모의 프로젝트에서는 오히려 ViewModel의 적용이 코드의 복잡성이 늘어난다.

이번에 개인과제를 진행할 때는 규모가 작은 프로젝트라 단점이 명확하겠지만, MVVM패턴을 공부할겸 MVVM패턴을 적용해보려고 한다.

2️⃣ 디자인 패턴

디자인 패턴이란?

디자인 패턴은 소프트웨어 개발에서 자주 발생하는 문제에 대한 해결책을 재사용 가능한 형태로 정리한 것이다.

1. Delegate 패턴

Delegate 패턴이란?

  • 한 객체가 다른 객체의 대리자(delegate)가 되는 디자인 패턴입니다.
  • 객체의 이벤트나 데이터를 처리하는 방식으로 구현되며, 객체 간의 결합도를 낮추고, 유연하고 확장 가능한 코드 작성이 가능하다.

Delegate 패턴은 우리가 흔히 사용하는 CollectionView나 TableView를 사용할 때 볼 수 있다.
직접 만드는 방법은 protocol를 통해서 만들 수 있다.

2. Observer 패턴

Observer 패턴이란?

  • 나의 객체가 변경되었을 때, 해당 객체에 의존하는 다른 객체들에게 자동으로 알림을 보내어 변경 사항을 적용할 수 있다.

Observer 패턴을 사용하면 변경사항을 적용할 객체 간의 직접 호출을 피할 수 있으며, 유지보수가 쉬워진다.

3. Singleton 패턴

Singleton 패턴이란?

  • 하나의 객체 인스턴스만 생성하고, 이를 전역에 제공하는 디자인 패턴이다.

Singleton 패턴을 사용하면, 하나의 객체에서 데이터 같은 것을 모두 접근할 수 있다. 하지만 결합도가 높아질 수 있기 때문에 조심해야 한다.

profile
개발자

2개의 댓글

comment-user-thumbnail
2024년 4월 30일

혹시 혹시 바쁘지 않고 시간이 되신다면 Observer 패턴과 Singleton 패턴 나중에 설명해주실 수 있을까요... 아직도 이해를 못했습니다.. 이게 그래서 코드에 어떻게 사용되는지 모르겠어요.
Delegate패턴은 잘 모르겠지만 아무튼 컬렉션뷰나 테이블뷰 써줄때 뒤에 :(Collection&Table)ViewDelegate 이렇게 붙는거 이야기 하는것 같고요🤔🤔

1개의 답글