본문 바로가기
회고

[나는 바보다 1] public, private 잘 구분하자.

by 최지철 2023. 7. 14.
728x90
반응형

접니다.

0.들어가기 앞서

나는 바보다 시리즈는 제가 개발과정중 너무나도 당연하면서도 어처구니 없는 실수를 했던것을 기록하여 스스로 반성하고자 만든 시리즈입니다.

 

1. 나는 바보다.

스냅킷으로 컬렉션뷰를 다 구성하고 컬렉션뷰 셀 파일도 다 구성했습니다. 그런데 자꾸 Expected superview but found nil when attempting make constraint `equalToSuperview 슈펴뷰가 없다고 뜨는 겁니다. 장난 안하고 전 컬렉션뷰를 설정한 레이아웃에서 오놓치게 있는 줄 알고, 하나하나 몇번을 뜯어봤습니다. 챗지피티한테도 제 코드를 주면 해결책이라면서 주는 코드가 제 코드 그대로 있는내용을 주는겁니다...ㅠ

지피티 욕을 엄청했습니다. 바보는 저였구요 ㅎ

2. 다시는 바보가 되지말자.

다시한번 Mode-View-Controller를 숙지하자. Controller에서 View로 접근하기위해선 public으로 해야한다.

만약 특정 요소를 외부로부터 숨기고 싶다면, 해당 요소의 접근 제어자를 fileprivate 또는 internal로 설정하자. fileprivate 접근 제어자는 해당 파일 내에서만 접근 가능하도록 제한하며, internal 접근 제어자는 같은 모듈(프레임워크 또는 앱) 내에서 접근 가능하도록 제한한다!

1
2
3
4
5
6
7
8
9
10
11
12
13
private let roundview = UIView().then{
        $0.layer.cornerRadius = 20
        $0.layer.masksToBounds = true
        $0.layer.borderWidth = 1
        $0.layer.borderColor = UIColor(rgb: 0xEFEFEF).cgColor
        $0.backgroundColor = .clear
    }
    private let brandLabel = UILabel().then{
        $0.text = "Brand"
        $0.textColor = UIColor(rgb: 0x666666)
        $0.font = .pretendard(.Light, size: 14)
    }
 
cs

이렇게 바보같이 private으로 했습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public let roundview = UIView().then{
           $0.layer.cornerRadius = 20
           $0.layer.masksToBounds = true
           $0.layer.borderWidth = 1
           $0.layer.borderColor = UIColor(rgb: 0xEFEFEF).cgColor
           $0.backgroundColor = .white
       }
    public func layout(){
        self.roundview.snp.makeConstraints{
            $0.top.equalToSuperview().offset(2)
            $0.width.equalTo(200)
            $0.height.equalTo(186)
        }
    }
cs

후 public 으로 바꾸니 잘 되었습니다.

이걸 3시간을 붙잡고 있었다니.. ㅎ..

 

오늘 수고했으니, 치킨 먹겠습니다.

감사합니다. 

 

728x90
반응형