MVC 디자인 패턴에 따른 Decoupling

7과11사이·2023년 11월 10일
0

스파르타코딩클럽

목록 보기
88/90

여전히 팀 프로젝트를 마무리하고 있는 상황이라 '좋은 글 주제'를 선정해서 딱 작성하기 복잡한 것 같다.
독감이 아닌 코로나 또한 겹치게 되면서 신체적으로 힘든 상황이 많이 반복되고 있는데
머리 속에서 빠져나가지 않는 디자인 패턴 관련해서 기록을 해 둔다.


처음에는 구현을 최우선적으로 둔 만큼 손짓 발짓을 해도 구현이 되도록 만들었다.
변수명이나 메서드 분리 등 - 엉터리로 짜지는 않았다고 생각하지만 디자인 패턴대로 코드 분리를 하지 않아
1) 코드 길이가 매~우 길었으며
2) 서로 연결되어 있는 코드들이 너무 많았다.

이러한 코드를 잘게 쪼개는 부분에 있어 의문이 항상 생기는 부분이 있었는데,
MVC 디자인 패턴을 따르며 변경된 코드의 모습은 아래와 같다.

class LoginView: UIView {
    let idTextfieldView = CustomTextfieldView(placeholder: "", text: "이메일", button: .cancelButton)
    private let pwTextfieldView = CustomTextfieldView(placeholder: "", text: "비밀번호", button: .hideButton)
    
    private let logoView = UIImageView().then {
        let image = UIImage(named: "AppIcon")
        $0.image = image
        $0.contentMode = .scaleAspectFill
    }
    
    private var loginButton = UIButton().then {
        $0.setTitle("로그인", for: .normal)
        $0.setTitleColor(.white, for: .normal)
        $0.backgroundColor = ColorGuide.main.withAlphaComponent(0.5)
        $0.titleLabel?.font = UIFont.systemFont(ofSize: 20)
        $0.layer.cornerRadius = 12
        $0.clipsToBounds = true
        $0.isEnabled = false
        $0.translatesAutoresizingMaskIntoConstraints = false
    }

팀원들의 코드를 보면 View에 해당하는 코드는 UIView를 기반으로 삼았다.
UIComponent를 그리는 모든 항목을 UIView 내 심어두고 해당 UIView를 viewController에 addSubView를 하는 형식으로 연결했다.

하지만 이런 방식을 보고 나 또한 해보면서 의문이 들었다.

이렇게 하는게 맞는걸까?
무엇이든 직접적으로 다른 파일 또는 객체 등에 직접 접근해서 값을 바꾸는 방식은 올바르지 않다고 배웠다.
그럼에도 불구하고 거의 모든 인원들이 이렇게 접근을 하고 있어보였다.

view안에 있는 UIComponent의 접근 제어 또한 public이 되거나 internal이 될 뿐, private으로 유지를 하는 경우를 잘 보지 못했다. (아직은)


[1206]
디미터의 법칙에 관해서 찾아보다가 decoupling 관련해서 쉽게 이해되는 표현이 있어 정리해본다.

Only talk to your immediate friends
& Don't talk to strangers.

타 파일이나 객체에게 권한을 넘기지 말아야 한다는 점을 이렇게 설명하니 잘 이해가 된다. 하지만 실전에서 적용하라고 했을 때는 아직 쉽게 적용이 되지 않는다. 함수나 메서드로 특정 객체의 값을 변경하도록 설정하는 방식도 고민해보았으나, 이렇게 할 경우 생성해야하는 함수들이 너무 많아 보였다.

디미터 법칙을 따르지 않는 코드는 여러가지 불편한 상황들을 만들어내고 있었는데,
1. 길이가 비상식적으로 길었다.
2. 읽기 쉬워보이면서도 너무 불편했다.

굳이 이 모든 내용을 읽어야 이해를 할 수 있다는 점이 애초에 불편하게 다가왔다.

MVC 디자인 패턴에 있어 디미터 법칙은 어떻게 해결하는 걸까?
접근은 또 어떻게 하는걸까?

0개의 댓글