250501 iOS프로그래밍실무 9주차

2025. 5. 7. 19:33·iOS프로그래밍실무 (3학년 1학기)

https://codebeautify.org/jsonviewer

{
  "boxOfficeResult": {
    "boxofficeType": "일별 박스오피스",
    "showRange": "20250501~20250501",
    "dailyBoxOfficeList": [
      {
        "rnum": "1",
        "rank": "1",
        "rankInten": "2",
        "rankOldAndNew": "OLD",
        "movieCd": "20232394",
        "movieNm": "야당",
        "openDt": "2025-04-16",
        "salesAmt": "1329431600",
        "salesShare": "25.2",
        "salesInten": "691659920",
        "salesChange": "108.4",
        "salesAcc": "18667746190",
        "audiCnt": "146883",
        "audiInten": "65952",
        "audiChange": "81.5",
        "audiAcc": "1988683",
        "scrnCnt": "1152",
        "showCnt": "3442"
      },
      {
        "rnum": "2",
        "rank": "2",
        "rankInten": "-1",
        "rankOldAndNew": "OLD",
        "movieCd": "20218800",
        "movieNm": "거룩한 밤: 데몬 헌터스",
        "openDt": "2025-04-30",
        "salesAmt": "1144166180",
        "salesShare": "21.7",
        "salesInten": "211519880",
        "salesChange": "22.7",
        "salesAcc": "2116850480",
        "audiCnt": "127361",
        "audiInten": "10330",
        "audiChange": "8.8",
        "audiAcc": "248671",
        "scrnCnt": "921",
        "showCnt": "3404"
      },
      {
        "rnum": "3",
        "rank": "3",
        "rankInten": "-1",
        "rankOldAndNew": "OLD",
        "movieCd": "20244883",
        "movieNm": "썬더볼츠*",
        "openDt": "2025-04-30",
        "salesAmt": "1060481100",
        "salesShare": "20.1",
        "salesInten": "166325490",
        "salesChange": "18.6",
        "salesAcc": "1975852710",
        "audiCnt": "107502",
        "audiInten": "7326",
        "audiChange": "7.3",
        "audiAcc": "208926",
        "scrnCnt": "1236",
        "showCnt": "4517"
      },
      {
        "rnum": "4",
        "rank": "4",
        "rankInten": "1",
        "rankOldAndNew": "OLD",
        "movieCd": "20253280",
        "movieNm": "A MINECRAFT MOVIE 마인크래프트 무비",
        "openDt": "2025-04-26",
        "salesAmt": "888336320",
        "salesShare": "16.8",
        "salesInten": "684863840",
        "salesChange": "336.6",
        "salesAcc": "4908288260",
        "audiCnt": "100018",
        "audiInten": "74533",
        "audiChange": "292.5",
        "audiAcc": "523684",
        "scrnCnt": "1112",
        "showCnt": "2962"
      },
     ...
    ]
  }
}

REST(REpresentational State Transfer)

웹에서 정보를 주고받는 방법(아키텍처 스타일)

  • 웹에서 컴퓨터들이 데이터를 주고받는 규칙

RESTful

REST 설계 지침을 따르는 웹 서비스를 RESTful이라 함

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

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

JSON(JavaScript Object Notation)

XML의 단점을 극복하기 위해 만들어진 경량의 데이터 교환 형식

사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성하기도 용이

프로그래밍 언어로부터 독립적이기 때문에 데이터 교환에 많이 사용 

SON에 사용되는 데이타 구조 두가지

  • 집합구조 : 여러가지 속성을 다양하게 정의할 수 있는 집합구조 {}
  • 리스트구조 : 비슷한 상황이 반복되는 리스트 구조 []

JSON의 구조

name/value 형태의 쌍

  • collection 타입
  • 프로그래밍 언어에서 object, record, struct, dictionary, hash table, 키가 있는 list 등 

순서있는 값들의 리스트

  • array, vector, list, sequence

JSON객체(object)는 name/value 쌍들의 순서없는 SET

  • object는 "{" 로 시작하고 "}" 로 끝냄
  • 각 name 뒤에 ":"을 붙임
  • ", "로 name/value 쌍을 구분
{ "이름": "김컴소", "나이": 20, "성별": "남" }
{ "이름": "김컴소",
"나이": 20,
"성별": "남",
"전화": {"휴대" :"010-1111-2222", "집" : "02-1111-2345"}
}

 

JSON 배열

array는 순서가 있는 값의 collection

array는 "["로 시작해서 "] " 로 끝냄

","로 array의 값들을 구분

API

Application Programming Interface

두 개 이상의 컴퓨터 프로그램이 서로 통신하는 방법

다른 소프트웨어에 서비스를 제공하는 소프트웨어 인터페이스

컴퓨터와 사람을 연결하는 UI와 달리 API는 컴퓨터나 소프트웨어를 서로 연결

printf, Java SE APIs, Windows API, SQLIte API, OpenGL API, Open API 등

오픈 API (Open API)

일부 웹사이트에서 SOAP 프로토콜이나 RESTful 형식을 사용하여 공공 컨텐츠를 제공하는 것

 

guard문(조건식이 거짓이면실행) : guard문은 표현식이 거짓(false)으로 판단될 경우에 수행될else 절을 반드시 포함해야함 

  • else 절에 속한 코드는 현재의 코드 흐름을 빠져 나갈 수 있는구문(return, break, continue, throw 구문)을 반드시 포함해야 함
    또는 다른함수를 else 코드 블록 안에서 호출할 수도 있음 
  • guard문은 기본적으로 특정 조건에 맞지 않을 경우에 현재의 함수나 반복문에서 빠져 나갈 수 있도록 하는‘조기출구(early exit)’ 전략을 제공

if let vs. guard let

failable initializer(실패 가능한 생성자: init?)

let myImage: UIImage = UIImage(named: "apple.png")! 

apple.png파일이 없으면 인스턴스를 만들 수 없고 nil

nil값도 저장할 수 있으려면 init다음에 "?"를 하며 옵셔널 값이 리턴됨

init?(named: String) // failable initializer

init?로 만든 인스턴스는 옵셔널형으로 만들어져서, 사용하려면 옵셔널을 언래핑해야 해서 위의 예제에서 제일 마지막에 "!"가 있음

 

함수: C언어vs. Swift

int add(intx, inty)  {     //C, C++             
   return(x+y);
}
add(10,20);

 

func add(x: Int, y: Int) -> Int {     // Swift                   
   return(x+y)
}
add(x:10, y:20)

 Swift add함수 자료형 : (Int, Int) -> Int()

1급객체(first class object) 또는 1급 시민(first class citizen)

1) 변수에 저장할 수 있다.

2) 매개변수로 전달할 수 있다.

3) 리턴값으로 사용할 수 있다. 

1) Swift는 함수를 데이터 타입처럼 처리할 수 있음

    함수를 호출하려면 원래의 함수 이름 대신에 상수 이름을 이용하여 호출 가능

 

클로저 표현식

클로저: 특정 작업(함수)과 그 작업이 일어난 곳(환경 또는 상태)을 모두 기억하고 있는 도구

익명함수

클로저 표현식은 독립적인 코드 블록

{(<매개변수 이름>: <매개변수 타입>, ...) -> <반환 타입> in
   // 클로저 표현식 코드
}
func add(x: Int, y: Int) -> Int {
    return x + y
}
print(add(x: 10, y: 20))
print(type(of: add))    // (Int, Int) -> Int


// 클로저
let add1 = {(x: Int, y: Int) -> Int in
    return x + y
}
print(add1(10, 20))
print(type(of: add1))   // (Int, Int) -> Int

디폴트 매개변수(아규먼트) 정의하기

// 이름이 인자로 전달되지 않을 경우에 디폴트로 "길동"이라는 문자열이 사용되도록 함
func sayHello(count: Int, name: String = "길동") -> String {
    return ("\(name), 너의 번호는 \(count)")
}

// 이름을 가지고 함수를 호출하면 argument를 사용
var message = sayHello(count: 10, name: "소프트") // 소프트, 너의 번호는 10

// 이름을 전달하지 않고도 호출 가능하며 디폴트로 "길동" 사용
message = sayHello(count: 100)
print(message) // 길동, 너의 번호는 100

argument로 전달하는 값이 없는 경우, 디폴트 매개변수 값을 사용

함수를 선언할 때 매개변수에 디폴트 값을 할당

 

모달 방식으로 새로운 뷰콘트롤러를 보여줌

  • 모달: 이 뷰콘트롤러를 없애야 원래(아래) 뷰 콘트롤러를 볼 수 있음
    1. 현재 view controller 위에 표시할 view controller
    2. ture: 새로운 뷰를 애니메이션하면서 보여줌 /  false: X
    3. 새로운 뷰 콘트롤러가 보여진 후 실행할 블록. 여기에 리턴값이 없으며 매개변수도 없는 클로저 작성. 특별히 하고 싶은 일이 없다면 nil을 지정하거나 디폴트 인자가 nil이므로 생략 가능
present(alert, animated: true, completion: nil)

alert라는 창을 애니메이션 효과와 함께 화면에 띄어줘

화면을 띄운 후에 하고싶은 일은 없음

present(alert, animated: true)

 

출처 : 한성현 교수님 수업자료

저작자표시 (새창열림)

'iOS프로그래밍실무 (3학년 1학기)' 카테고리의 다른 글

250515 iOS프로그래밍실무 11주차  (0) 2025.05.15
250508 iOS프로그래밍실무 10주차  (0) 2025.05.08
250417 iOS프로그래밍실무 7주차  (0) 2025.04.17
240410 iOS프로그래밍실무 6주차  (0) 2025.04.10
250403 iOS프로그래밍실무 5주차  (0) 2025.04.03
'iOS프로그래밍실무 (3학년 1학기)' 카테고리의 다른 글
  • 250515 iOS프로그래밍실무 11주차
  • 250508 iOS프로그래밍실무 10주차
  • 250417 iOS프로그래밍실무 7주차
  • 240410 iOS프로그래밍실무 6주차
Z2AE
Z2AE
  • Z2AE
    딩코.log
    Z2AE
  • 전체
    오늘
    어제
    • 분류 전체보기 (66) N
      • C++ 프로그래밍 (1학년 2학기) (12)
      • 서버프로그래밍 (1학년 2학기) (0)
      • C# 프로그래밍 (1학년 2학기) (2)
      • 프론트엔드 웹개발 (1학년 2학기) (2)
      • 데이터베이스 (2학년 1학기) (8)
      • 자료구조 (2학년 1학기) (2)
      • JAVA프로그래밍 (2학년 1학기) (7)
      • PHP쇼핑몰실무 (2학년 1학기) (2)
      • 운영체제 (2학년 1학기) (3)
      • 모바일게임개발 (2학년 1학기) (1)
      • iOS프로그래밍 (2학년 2학기) (11)
      • 네트워크보안 (2학년 2학기) (1)
      • iOS프로그래밍실무 (3학년 1학기) (10) N
      • 소프트웨어설계 (3학년 1학기) (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Z2AE
250501 iOS프로그래밍실무 9주차
상단으로

티스토리툴바