시나리오 : MVVM 패턴을 처음 접하는 학생 및 수강생분들이 자주 묻는 질문 중 안 써도 개발은 가능한데 굳이? 써야 하나요? 지금도 충분히 머리 아파요 ㅠㅠ라는 질문을 가끔 받는다.
맞는 말이기도 하지만 그러면 왜 이런 MVC, MVVM 아키텍처 디자인을 우리가 사용하는지 차근차근 이야기해보려한다.
MVVM 패턴에 대해서 바로 알아보고 싶은 분은 링크 클릭으로 다이렉트! 이동!
https://artieee.tistory.com/20
의식의 흐름대로 쭈-욱 이야기해보도록 하자 😎
내가 코딩을 하면 할수록 느끼는 Aha! Moments! 는 진짜 실생활을 코딩이 빼다 박았다는 것이다. (사람이 만들었는데 당연하지)
우리가 처음 어떤 프로젝트를 시작하고 바로 실행하게 되면 처음 만나게 되는 문구가 있다.
바로 "Hello world"이다.(자바언어를 처음 배웠기 때문에 오랜만에 Java로 예시를 들어 보겠음.)
public class Demo {
public static void main(string[] args){
print("Hello world");
// Java코드 이긴 하지만 Hello World는 거의 모든 언어의 국룰!
}
}
우리가 처음 코딩을 배울 때는 웬만하면 다 여기 main 함수에서 키보드를 따각따각 두들길 것이다.
...
public static void main(String[] args){
print("Hello world");
String name = "Atlas"
String job = "Developer"
print("Hi, my name is " + name + "i am " +job)
//오랜만에 자바코드 써보니 추억이 새록새록 떠오름
}
...
이렇게 계속 재밌어서 한 줄씩 치다 보면 main 함수가 한눈에 다 안 보일 정도가 될 것이다.
이쯤 되면 학교나 학원에서 함수를 만들어서 기능별로 분리해보라고 알려줄 것이다.
public static void main(String[] args) {
System.out.println("Hello World");
System.out.println(sayHello("atlas"));
}
//사칙연산도 이렇게 함수로 많이 만들어 보았을 것이다.
public static String sayHello(String name){
return "hi" + name;
}
public static String subtract(Int a, Int b){
return a - b;
}
public static String multiply(Int a, Int b){
return a * b;
}
public static String divide(Int a, Int b){
return a % b;
}
자, 일단 이렇게 함수로 만들고 나면 main 함수에 있는 코드가 줄어들면서 이제 함수가 쭉쭉 늘어 날것이다.
그럼 이제 이 함수들을 기능별이나 특징별로 모아서 클래스를 만들어 관리를 할 때가 왔다.
//Calculator 클래스를 만들고 그 안에 사칙연산 함수를 정의
calss Calculator {
...
public Int add(Int a , Int b){
return a + b);
}
...
}
// 그리고 이 클래스를 사용하기 위해서는 객체 및 인스턴스 생성을 해야한다.
Calcultor calculator = Calcultor();
calculator.add(1,5);
그리고는 더 나아가서는 접근제어자들을 배워서
private ,protected, public 등등을 배우게 된다.
아시다시피 private 접근제어자를 정의하면 외부에서는 (다른 클래스)에서는 접근이 안된다.
calss Calculator {
...
public Int add(Int a , Int b){
return a + b);
}
//private 접근제어자로 인해 클래스 내부에서는 사용가능하나 다른 클래스에서는 사용불가
private Int multiply(Int a , Int b){
return a * b);
}
...
}
우리는 변수, 함수 , 클래스 등을 배우면서 문법도 문법이겠지만 보다 중요하게 우리가 배워온 것은
바로 자연스레 비슷한 기능별로 구분하고 관리하는 것을 배워온 것이다.
우리가 MVC 나 MVVM 등의 아키텍처 디자인 패턴 등을 처음에 접하면 잘 이해가 안 되기도 하고, 어렵게 느껴지고 해서
"굳이 사용하지 않아도 되지 않을까" 하는 생각을 한번쯤 해봤겠지만
이런 패턴들도 결국에도 보면
M + V + VM의 조합의 패턴으로 분류하고 관리해봅시다~라는 것이다.
M :Model 은 데이터 , 데이터 캡슐화, 비즈니스 로직 담당 역할
V: View는 UI 작업 및 UI 컨트롤 담당 역할
VM: ViewModel 은 데이터 가공 담당 역할
지금까지 우리가 해왔던 것 "main함수에서 코드 작성 -> 함수로 분류 -> 클래스로 분류 "로 해왔던 것에 대한 확장일 뿐이다.
실생활을 예를 들어 보면
우리가 공부하기 위한 책 , 노트와 펜 , 지우개 등등의 물건들이 책상에 다 섞여 있는 것을 생각해보자.
막 공부하다가 나중에 펜이 어디 있었지? 지우개가 어디있었지 하고 책상 위에서도 한참 찾게 될 것이다.
하지만 책은 책끼리 문구류는 필통. 이렇게 분류 및 정리정돈을 함으로 인해 나중에 필요한 것들을
찾기 위한 시간과 수고를 줄일 수 있을 것이다.
즉, 앞서 본 예시처럼 main 함수에다가 기능을 다 구현을 해도 코드는 잘 돌아가지만
main 함수에서만 코드를 작성하다 보니 코드가 길어지고 각 기능들이 섞여있어서 점차 개발할수록 관리가 어렵게 될 것이다.
하나씩 함수, 클래스로 분류로 시작해 MVVM과 같은 아키텍처 디자인 패턴을 통해서 역할 별로 코드를 관리함으로 인해
프로젝트의 유지보수가 용이해지고 개발 효율성도 높아질 것이다.
예제에는 코드가 작고 간단해서 바로 딱! 하고 이런 장점들이 와닿지는 않겠지만
프로젝트가 커지고 같은 필드에서 일하는 동료들이 생기고, 다른 팀들의 요구사항을 반영하기 위해
이전 코드를 수정하는 과정을 해보게 되면 조금 더 체감이 될 것이다.
마무리
- 개발을 처음 시작하시는 분들은 이 모든 걸 100% 이해하고 활용하려고 하기보다 내가 개발자를 업으로 삼으면서
나중에 학습해야 하는 부분이 이런 것도 있구나 하는 마음에 가볍게 봐주시면 좋을 거 같습니다.
- 개발을 처음 시작하는 분들의 이해를 돕기 위해 쓴 글입니다. 주니어 및 시니어 분들께서 조언 및 첨언하실 내용이 있다면
언제든 환영이고 감사합니다 :)
MVVM패턴에 대해 더 자세한 내용이 궁금하다면
https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EB%B7%B0%EB%AA%A8%EB%8D%B8
[SwiftUI] Life Cycle(생명주기) 알아보기 (0) | 2022.04.20 |
---|---|
[Swift] MVVM 패턴 (아키텍처 디자인)이 무엇인지 한번 캐보자! (0) | 2022.03.01 |
[Swift] SwiftUI에서는 왜 뷰에 struct를 사용할까? (1) | 2022.02.19 |
[Swift] 강제업데이트 앱버전 비교하기 (0) | 2022.02.17 |
[Swift] TextField UnderLine Animation (밑줄 그려지는 애니메이션)02- SnapKit (0) | 2022.02.10 |
댓글 영역