-Today's Learning Content-

  • 내 킥보드 상세 페이지 구현
  • 코드 리팩토링

1. 내 킥보드 상세 페이지 구현

내용 정리

마이페이지 뷰에서 내가 등록한 킥보드를 관리하고, 수정할 수 있는 뷰를 구현

1) UI 구현

상세페이지의 UI는 UICollectionView 하나만 사용하면 되기 때문에 크게 어려울 것이 없다.
컬렉션뷰의 셀을 커스텀하게 만들어주고, 이를 UIView에 넣어 뷰 컨트롤러가 관리하게 하면 되기 때문이다.

final class MyKickboardDetailViewItem: UICollectionViewCell {
    
    static let id: String = "MyKickboardDetailViewItem"
    
    private let kickboardImage = UIImageView()
    private let kickboardNickNameView = UILabel()
    private let kickboardLocationView = UILabel()
    
    // ...
}

final class MyKickboardDetailView: UIView {
    
    weak var modalViewDelegate: ModalViewDelegate?
    
    private lazy var collectionView: UICollectionView = {
        let layout = UICollectionViewFlowLayout()
        layout.scrollDirection = .vertical
        layout.minimumLineSpacing = 15
        layout.minimumInteritemSpacing = 15
        layout.itemSize = .init(width: 350, height: 120)
        
        let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
        collectionView.backgroundColor = .white
        collectionView.contentInset = .init(top: 20, left: 0, bottom: 20, right: 0)
        collectionView.register(MyKickboardDetailViewItem.self, forCellWithReuseIdentifier: MyKickboardDetailViewItem.id)
        
        return collectionView
    }()
    
    // ...
}

final class MyKickboardDetailViewController: UIViewController, ModalViewDelegate {
    
    private let kickboardDetailView = MyKickboardDetailView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupViewConfiguration()
        setupDetailView()
    }
    
    // ...
}

UI 구현 결과

2) 페이지 연결

상세페이지는 내가 구현했지만, 이를 연결할 마이페이지 뷰는 다른 팀원이 구현했기 때문에 코드에 대한 해석이 먼저 필요했다.
나는 어떤 UIView를 선택했을 때 이 페이지가 네비게이션으로 열리도록 하고 싶었기 때문에 새로운 코드를 추가해줬다.

private func viewTapAction() {
	let touchEvent = UITapGestureRecognizer(target: self, action: #selector(pushDetailView))
	self.kickboardSectionView.addGestureRecognizer(touchEvent)
}
    
@objc private func pushDetailView() {
	self.navigationController?.pushViewController(MyKickboardDetailViewController(), animated: true)
	self.navigationController?.navigationBar.isHidden = false
}

구현 결과물

2. 코드 리팩토링

내용 정리

프로젝트의 UI 일관성을 위해 UI를 수정하는 리팩토링을 진행하였다.
그런데 이제 내가 작성한 코드가 아닌...

1) 팀원의 코드를 리팩토링하는 것에 대해...

사실 리팩토링을 진행한 내용은 UI의 컬러를 수정하는 것과 오토레이아웃 수정, 그리고 불필요한 UI의 제거가 전부이다.
프로젝트의 컬러, UI 일관성을 위해 필요한 작업이었다고는 생각하지만, 내가 작성한 코드가 아닌 팀원이 작성한 코드를 내가 리팩토링 한다는 점이 계속 마음에 걸렸다.

왜냐하면 팀원분도 나름 의견이 있으셔서 이런 코드를 작성하셨을텐데 내가 바꾸는게 맞는걸까? 하는 의문이 든 것이다.
물론 팀원분께 미리 리팩토링을 하고 싶은데 내가 해도 될지 양해를 구했지만, 그럼에도 거부감이 드는 것은 팀원의 생각을 내 의견대로 바꾸는 것 같은 느낌일 들기 때문인 것 같다.

남이 내 코드를 바꾸는 것도 사실 거부감이 드는 것 같다.
잘못된 코드라면 당연히 고치는게 맞지만, 그게 아닌 성향의 차이 등으로 코드를 바꿔버리면 약간 기분이 상할 것 같기도 하다.
내가 이런 생각을 하는데, 다른 사람이라고 안 할 것이라고는 생각하지 않기 때문에 더욱 다른 사람의 코드에 대해 피드백 하거나 수정하는 것을 거리낌 없이 해내기는 어려운 것 같다는 생각을 한다.

결국 리팩토링은 마쳤지만 찜찜한 마음이 남는다.

2) 리팩토링 결과물

리팩토링 전리팩토링 후
Simulator Screenshot - iPhone 16 Pro - 2024-12-18 at 21 46 11Simulator Screenshot - iPhone 16 Pro - 2024-12-18 at 21 45 44

-Today's Lesson Review-

오늘은 프로젝트에서 상세페이지에 대한 UI를 구현하고, 팀원의 코드를 리팩토링 하는 작업을 진행하였다.
팀원 분이 일이 많아 보이셔서 내가 해도 되는지 양해를 구하고 진행하긴 했지만,
위에서도 서술했듯 찝찝함이 남는다...
이런 성향 탓에 1인 개발을 추구하게 되는 걸지도 모르겠다는 생각을 한 하루였다.
profile
이유있는 코드를 쓰자!!

4개의 댓글

comment-user-thumbnail
2024년 12월 18일

리팩토링 당한다? 라는 표현도 웃기지만 당하는 입장에서는 정말 엄청 엄청 고맙고... 리팩토링 한 결과물을 직접 보고 기존 코드랑 어떻게 다른 지 공부할 수 있게 되어 좋았어요 (오늘 당함)

1개의 답글
comment-user-thumbnail
2024년 12월 22일

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 남의 코드를 리팩토링 해도 되는걸까?에 대한 고민을 진지하게 읽으면서 흠 역시 조심스러운 부분이군 하면서 내려왔는데 UI 개선 잘만 해놓은 거 보고 어이없어서 웃음 터지면 저 나쁜 사람인가요?

1개의 답글