나만의 IOS 앱개발 입문 : IOS개발 강의 흔적 남기기 9일차

박경현·2022년 3월 23일
0

이번에는 패캠에서 배운걸 토대로 유튜브에 ios Project를 검색해서 나온 뉴스 어플을 만들어봤다ㅎㅎ

어플에 대한 설명 및 xCode에서 코드 전체 틀 구조

어플설명

검색기능은 없는 간단한 뉴스 어플이다.
newsapi.org에서 api를 가져와서 하루 20개의 뉴스를 보여준다.

  • 화면을 키게 되면 각 뉴스기사들의 헤드라인과 설명 그리고 옆에 이미지를 보여준다

  • 뉴스를 클릭하면 safari로 연동되어있어서 뉴스의 자세한 웹사이트로 넘어간다

    xCode전체 구조

    삼 분할해서 만들었다고 보면 된다

    viewController - 첫화면

    화면 전체에 대한 틀을 테이블뷰를 사용해서 잡고 뉴스를 누르면 safari로 넘어가게 설정해두었다.

    APICaller - API호출기능

    API를 어떤 방식으로 부를지 다른 클래스에 전달은 어떤방식으로 할지 정리해두었다.

    NewsTableViewCell - CustomCell만들기

    타이틀과 간단한 설명 그리고 이미지를 Cell에 Custom해서 들어갈 수 있게 설정해두었다.

    코드를 적으면서 새로 알게된 내용들에 대한 정리

    싱글톤 패턴(Singleton Pattern)

    생성자가 여러차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다

    final class APICaller {
    	static let shared = APICaller()
       
       private init(){}
    }

    static으로 다른 클래스에서도 전역으로 객체를 생성할 수 있게 만들어줬다!!

    이렇게 하면 클래스는 최초 생성되기 전까지는 메모리에 올라가지도 않고 Dispatch_one(1회만 실행하는것을 보장)도 자동 적용된다

    장점: 전역인스턴스여서 다른 클래스들과 자원공유가 쉽다!!

    단점: 싱글객체가 너무 많은 일을 하면 다른 클래스들과 인스턴트들간 결합도가 높아져서 수정과 테스트가 어려워진다

    DBCP(DataBaseConnectionPool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용!!
    DBCP란 dbConnection을 Pool에 저장하고 필요할때마다 가져다가 쓰는걸 뜻한다 -> 메모리효율증가!!

    스토리보드 작성 안하고 UI 만들기-> TableView안에 커스텀Cell코드로 추가

    private let newsTitleLabel: UILabel = {
    	let label = UILabel()
       label.font = .systemFont(ofSize: 22, weight: .semibold)
       return label
    }
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?){
    	super.init(style: style , reuseIdentifier: reuseIdentifier)
       contentView.addSubView(newTitleLabel)
    }
    
    override func layoutSubviews(){
    	newsTitleLabel.frame = CGRect(
       	x: 10,
           y: 0,
           width: contentView.frame.size.width - 170,
           height: 70
       )
    }
    override func prepareForReuse(){
    	super.prepareForReuse()
       newsTitleLabel.text = nil
    }
    func configure(with viewModel: NewsTable){
    	newsTitleLabel.text = viewModel.title
    }
    

    커스텀 Cell에 들어가는 타이틀을 작성했다

  • 일단 타이틀의 형태를 즉 크기나 모양을 구성한다

  • 위치를 추가한다 CGRect로

  • 어디서 타이틀에 들어갈 값을 받을지 정한다.

  • addSubView로 추가한다 --> 테이블 뷰안에 cell이니까 contentView.addSubView로 작성했다.

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글