뷰를 그리는 컨벤션에 대해 심도있는? 논의를 하였다.
다들 생각하는 것이 달라도 한번 맞출 필요가 있다고 판단하였다.
아래는 날것.... 의 내용이다...
문제 상황
- 아래 3개 중에 뭘 선택할지
- UILabel을 생성하는 팩토리
- 생성자로 모든 걸 받는 MHLabel
- UIFont만 커스텀 하고, UILabel을 써서 ViewController에서 설정
문제 해결
UILabel+ Factory
- 생성만 한다면, 서브클래싱을 안하고 Factory로 생성 가능
- UILabel이라는 것을 알려서 UIKit관련 동작 외에 없음을 알릴 수 있음
- 생성에 대해서 확장성, 유지보수성을 꾀할 수 있음
- UILabel관련 버그만 발생해서 디버깅 용이
- 기능적인 측면에서의 확장성이 적음
- UI테스트에서 용이한가?
MHLabel
- ViewController에서 생성자 하나로 설정 가능
- 확장성이 3개중에 제일 좋음
- 글자 간격
- Gesture ..
- 뎁스가 하나 더 깊어지는 문제가 있긴 함
(솔직히 MH가 간지긴함)
UILabel + UIFont
- 처음 프로젝트를 접하는 사람의 입장에서 MHLabel이나 Factory처럼 한 단계 더 찾아들어가야하는 수고를 줄일 수 있다.
- MHLabel의 경우 생성자 제외 추가적인 기능은 존재하지 않기 때문에 label의 config를 설정해주는 것 정도는 VC에서 해도 되지 않을까……라는 생각
- 앱 전반적인 Label에 변화가 있다면 하나하나 수정해줘야한다.
영현
3 → 2 → 1
1, 2번… 오버엔지니어링…?
효준
1순위: LabelFactory
- 확장성 고려
- 생성자 하나로 설정과 관련한 불필요한 코드를 줄일 수 있음
- 다른 사람이 코드 볼 때 한 뎁스를 더 타고 들어가야 하지만, 우리의 코드는 간단하다.
2순위: MHLabel
- 다른 MH 시리즈와 함께 쓰면 우리만의 코드가 될 수 있다 ? (외관상)
- MHNavigationBar
- MHLabel
윤철
3 → 몰? → 루?
가장 베이직하고 이해하기 편하다.
디자인 패턴이나 새로운 클래스가 적용될 만큼의
정현
1-2-3
최종변론
효준
- make(style: .default) 좋은 거 같습니다
영현
- 매개변수로 모든 option들을 받을 것이라면 3번……개추…..
- 매개변수 하나로 할 것이면 1,2번 좋을 것같습니다 .ᐟ.ᐟ
정현
- Style을 따로 만드는 방식 좋을듯요
- UILabel(style: .default)처럼 convenience init 만드는 것도 좋습니다.
윤철
- 문득 이런 생각이 드네요
- 얼마나 많은 회사에서 팩토리 패턴을 쓸까?
- 특정 객체를 여러 군데에서 많이 사용하는 경우가 아니면 안쓸 거 같은 느낌?
- 근데, 우리 앱은 사용자가 직접 글을 쓰는 서비스여서
깨달음: 논의를 먼저 하자….
let titleLabel: UILabel = MHLabelFactory().make(
text: "가게 모아보기",
alignment: .right,
color: .black
)
let label3 = MHLabel(
labelText: "가게 모아보기",
alignment: .right,
color: .white
)
let titleLabel: UILabel = {
let label = UILabel()
label.text = "가게 모아보기"
label.font = UIFont.pretendard(size: 16, weight: .medium)
label.textColor = .black
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
결론
- UILabel(style: .default)처럼 convenience init 만드는 것으로 결정
- 내부에는 Style을 enum으로 정의함
'UIKit' 카테고리의 다른 글
NotificationCenter의 removeObserver를 해야할까? (0) | 2024.12.03 |
---|---|
무지성 MainActor를 붙인 상황에서 데이터가 로드되기 전에 뷰가 그려지는 문제 해결 (0) | 2024.12.02 |
CollectionViewCell들 간의 Drag & Drop 구현하기 (1) | 2024.12.01 |
CALayer를 사용할 때 발생하는 메모리 크래시 (0) | 2024.11.29 |
런타임 시점에 Constraint를 조절하여 애니메이션 구현하기 (1) | 2024.11.19 |