본문 바로가기
iOS앱개발

iOS실무 9주차

by 김경래 2026. 4. 28.

 

 

https://codebeautify.org/jsonviewer

 

Best JSON Viewer and JSON Beautifier Online

Online JSON Viewer, JSON Beautifier and Formatter to beautify and tree view of JSON data - It works as JSON Pretty Print to pretty print JSON data.

codebeautify.org

 

 

 

 

 

 

영진위 api JSON데이터의 데이터 모델 객체를 swift의 구조체로

 

 

import Foundation

// MARK: - BoxOfficeResponse
struct BoxOfficeResponse: Codable {
    let boxOfficeResult: BoxOfficeResult
}

// MARK: - BoxOfficeResult
struct BoxOfficeResult: Codable {
    let boxofficeType: String
    let showRange: String
    let dailyBoxOfficeList: [DailyBoxOffice]
}

// MARK: - DailyBoxOffice
struct DailyBoxOffice: Codable {
    let rnum: String                // 순번
    let rank: String                // 해당일자의 박스오피스 순위
    let rankInten: String           // 전일 대비 순위의 증감분
    let rankOldAndNew: String       // 랭킹에 신규 진입 여부 ("OLD", "NEW")
    let movieCd: String             // 영화의 대표코드
    let movieNm: String             // 영화명 (국문)
    let openDt: String              // 영화의 개봉일
    let salesAmt: String            // 해당일의 매출액
    let salesShare: String          // 해당일자 상영작의 전체 매출액 대비 해당 영화의 매출비율
    let salesInten: String          // 전일 대비 매출액 증감분
    let salesChange: String         // 전일 대비 매출액 증감 비율
    let salesAcc: String            // 누적매출액
    let audiCnt: String             // 해당일의 관객수
    let audiInten: String           // 전일 대비 관객수 증감분
    let audiChange: String          // 전일 대비 관객수 증감 비율
    let audiAcc: String             // 누적관객수
    let scrnCnt: String             // 해당일자에 상영한 스크린 수
    let showCnt: String             // 해당일자에 상영된 횟수

    enum CodingKeys: String, CodingKey {
        case rnum, rank, rankInten, rankOldAndNew
        case movieCd, movieNm, openDt
        case salesAmt, salesShare, salesInten, salesChange, salesAcc
        case audiCnt, audiInten, audiChange, audiAcc
        case scrnCnt, showCnt
    }
}

 

 

 

URI vs URL

 

URI (Uniform Resource Identifier)

리소스를 식별하는 문자열

   URL (위치 있음)

   https://api.example.com/users/1

   URN (이름만 있음, 위치 없음)

   urn:isbn:9781234567890(책번호), 홍길동

 

URL (Uniform Resource Locator)

리소스의 위치(주소)를 포함해서 어디 있는지 알려주는 것

   모든 URL은 URI

   https://api.example.com/users/1

   월계동에 사는 홍길동

 

 

 

 

 

RESTful

REST의 규칙을 최대한 잘 지켜서 만든 서비스

REST의 원칙대로 주소와 동작(HTTP 메서드)을 깔끔하게 잘 설계한 API는 “RESTful”하다.

 

RESTful한 API 예

GET https://api.example.com/users/1 조회

POST https://api.example.com/users 생성

PUT https://api.example.com/users/1 수정

DELETE https://api.example.com/users/1 삭제

 

RESTful하지 않은 예

주소에 동작이 섞여 있음

동작은 http 메서드로 처리

https://api.example.com/getUser?id=1

https://api.example.com/createUser

https://api.example.com/updateUser?id=1

https://api.example.com/deleteUser?id=1

 

 

RESTful하다는 것은 웹의 장점인 HTTP 프로토콜의 표준을 최대한 활용하여, 모든 자원(Resource)에 고유한 URI를 부여하고 정해진 HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 자원을 주고받는 아키텍처 스타일을 충실히 따르는 상태를 의미한다.

 

 

 

 

 

 

집합과 배열의 혼합. 보통 시작은 중괄호로 한다.

 

 

 

 

https://developer.jamendo.com/v3.0/docs

 

 

 

 

 

 

 

 

앞에 optional이 있으면 필수가 아니고 아무것도 없이 Required가 있으면 필수 메소드가 있어야 한다.

 

 

 

 

 

 

 

import UIKit

// 화면에 표시할 영화 데이터 배열 (1위부터 10위까지의 문자열 데이터)
let name = ["1등 살목지", "2등 란 12.3", "3등 짱구", "4등 프로젝트 헤일메리", "5등 왕과 사는 남자", "6등 내 이름은", "7등 리 크로닌의 미이라", "8등 기동전사 건담: 섬광의 하사웨이 키르케의 마녀", "9등 르누아르", "10등 마녀배달부 키키"]

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    // 스토리보드에서 연결한 테이블 뷰 객체
    @IBOutlet weak var table: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 테이블 뷰의 데이터 공급자(DataSource)와 동작 처리자(Delegate)를 현재 클래스(self)로 지정
        table.dataSource = self
        table.delegate = self
    }
    
    // [필수] 테이블 뷰의 한 섹션당 몇 개의 행(row)을 보여줄지 결정
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // 배열의 개수인 10개를 반환 (보통은 name.count를 사용하면 더 안전합니다)
        return 10
    }
    
    // 테이블 뷰에 총 몇 개의 섹션(그룹)을 보여줄지 결정
    func numberOfSections(in tableView: UITableView) -> Int {
        // 현재 2개 섹션으로 설정되어 있어 총 20개의 데이터(10개씩 두 번)가 출력됩니다.
        return 2
    }
    
    // [필수] 각 행(row)에 들어갈 셀을 생성하고 데이터를 채워서 반환
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        // 1. "myCell"이라는 아이디를 가진 셀을 재사용하기 위해 가져옴
        // 2. 이 셀을 커스텀 클래스인 'MyTableViewCell' 타입으로 형변환(as!) 함
        let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! MyTableViewCell
        
        // 3. 커스텀 셀 내부의 movieName 레이블에 name 배열의 데이터를 입력
        // indexPath.row는 0부터 9까지 증가하므로 배열의 인덱스와 일치하게 됨
        cell.movieName.text = name[indexPath.row]
        
        // 4. 데이터가 채워진 셀을 테이블 뷰에 전달
        return cell
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'iOS앱개발' 카테고리의 다른 글

iOS실무 11주차  (0) 2026.05.19
iOS실무 10주차  (0) 2026.05.12
iOS실무 7주차  (0) 2026.04.14
iOS실무 6주차  (0) 2026.04.07
iOS실무 5주차  (0) 2026.03.31