카테고리 없음

iOS 프로그래밍 실무 9주차

sw0913 2025. 5. 6. 21:06

API(Application Programming Interface)
응용 프로그램(어플리케이션)에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스입니다.

쉽게 말해, 소프트웨어와 소프트웨어가 서로 소통할 수 있게 해주는 '약속' 혹은 '규칙'입니다.

  1. API의 필요성
    코드 재사용성: 이미 만들어진 기능을 다시 개발하지 않아도 됨

표준화: 여러 개발자가 동일한 방식으로 기능을 사용할 수 있음

유지보수 용이: 내부 구현이 바뀌어도 API만 유지된다면 외부 프로그램에는 영향이 없음

  1. API의 종류

3.1 오픈 API (Public API)

  • 누구나 사용할 수 있도록 공개된 API 예) 구글 맵 API, 트위터 API

3.2 프라이빗 API (Private API)

  • 특정 조직 내부에서만 사용하는 API

3.3 파트너 API (Partner API)

  • 특정 파트너에게만 공개하는 API
  1. API의 동작 방식
  2. 클라이언트가 API에 요청(Request)을 보냄
  3. 서버가 요청을 받아 처리
  4. 처리 결과를 응답(Response)으로 반환

영화진흥위원회 오픈API

https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do

[영화진흥위원회 오픈API

OPEN API 서비스 영화진흥위원회 영화관입장권통합전산망에서 제공하는 오픈API 서비스로 더욱 풍요롭고 편안한 영화 서비스를 즐겨보세요.

www.kobis.or.kr](https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do)

2025년 05월 01일 영화 일별 박스오피스


RESTful

  • REST(REpresentational State Transfer)는 HTTP 기반의 소프트웨어 아키텍처스타일
  • REST 설계 지침을 따르는웹서비스를RESTful이라함

REST(REpresentational State Transfer)

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

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

REST의 특징

  • 리소스(resource)
    • 인터넷에 존재하는 모든정보(회원, 게시글 등)
    • 예: /users/1 (1번 회원), /posts (게시글 전체)
  • 주소(URI, URL):
  • 행동(HTTP 메서드):
    • 어떤 행동을 할지 정하는 방법
    • GET (가져오기), POST (생성), PUT (수정), DELETE (삭제)
    • 1번 유저 정보 가져오기
      • GET/users/1

RESTful

  • REST의 규칙을 최대한 잘 지켜서 만든 서비스
  • REST의 원칙대로 주소(URI)와 동작(HTTP 메서드)을 깔끔하게 잘 설계한 API는 “RESTful”하다.
  • RESTful한 API 예
    • GET /users → 회원 목록 보기
    • GET /users/1 → 1번 회원 정보 보기
    • POST /users → 새 회원 추가
    • PUT /users/1 → 1번 회원 정보 수정
    • DELETE /users/1 → 1번 회원 삭제
  • RESTful하지 않은 예
    • 주소에 동작이 섞여있음
    • POST /users/getUser → 회원 정보 보기
    • GET /users/deleteUser → 회원 삭제

RESTful API 와 HTTP 전송방식

RESTful API 에서 HTTP 메소드의 종류

REST vs SOAP

XML(Extensible Markup Language)

  • 파싱(Parsing)
    • XML데이터를 추출하여 분석
    • 파싱을 처리하는 모듈을 파서(parser)라 함
  • 장점 - 플랫폼 독립적
  • 단점 - 마크업 태그를 사용하므로 데이터량 큼

JSON(JavaScript Object Notation)

  • XML의 단점을 극복하기 위해 만들어진 경량의 데이터 교환 형식
    • 집합구조: 여러가지 속성을 다양하게 정의할 수 있는 집합구조 { }
    • 리스트구조: 비슷한 상황이 반복되는 리스트 구조 [ ]

JSON의 구조

  • name/value 형태의 쌍
    • collection 타입
    • 프로그래밍 언어에서 object, record, struct, dictionary, hash table, 키가 있는 list 등
{ "이름": "김컴소",  "나이": 20,  "성별": "남" }
 { "이름": "김컴소", 
"나이": 20, 
"성별": "남",
 "전화": {"휴대" :"010-1111-2222", "집" : "02-1111-2345"}
 }

Open API를 이용한 앱개발단계

  1. 원하는 정보를 제공하는 웹 서비스와 사용할 Open API 선정
  2. Open API 사용을 위한 신청과 인증키 발급
  3. 네트워크를 통해 데이터 요청
  4. 받은 데이터를 파싱하여 앱에서사용

- 버스 도착 알림 / 푸시 서비스를 만들어 보고 싶습니다

서울특별시_버스위치정보조회 서비스 | 공공데이터포털


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

  • Swift의 함수는 1급 객체이다.
  • 1) 변수에 저장할 수 있다.
  • 2) 매개변수로 전달할 수 있다.
  • 3) 리턴값으로 사용할 수 있다.
func up(num: Int) -> Int {
    return num + 1
}

func down(num: Int) -> Int {
    return num - 1  
}

let toUp = up
print(up(num: 10))  
print(toUp(10))     

let toDown = down   


func upDown(fun: (Int) -> Int, value: Int) {  
    let result = fun(value)
    print("결과 = \(result)")
}

upDown(fun: toUp, value: 10)    
upDown(fun: toDown, value: 10)  

func decideFun(x: Bool) -> (Int) -> Int {
    if x {
        return toUp
    } else {
        return toDown
    }
}

let r = decideFun(x: true)
print(type(of: r))  // (Int) -> Int
print(r(10))        

클로저 ( Closure)

클로저표현식

후행클로저(trailing closure)

후행클로저(trailing closure) 예

func mul(a: Int, b: Int) -> Int {
    return a * b
}

let multiply = { (a: Int, b: Int) -> Int in
    return a * b
}

print(mul(a: 10, b: 20))
print(multiply(10, 20))

let add = { (a: Int, b: Int) -> Int in
    return a + b
}

print(add(10, 20))

func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
    return cal(x, y)
}

var result = math(x: 10, y: 20, cal: add) // return add(10, 20)
print(result)

result = math(x: 10, y: 20, cal: multiply) // return multiply(10, 20)
print(result)

result = math(x: 10, y: 20, cal: { (a: Int, b: Int) -> Int in
    return a + b
}) // 클로저 소스를 매개변수에 직접 작성
print(result)

result = math(x: 10, y: 20) { (a: Int, b: Int) -> Int in
    return a + b
} // trailing closure
print(result)

- 클로저가 함수의 마지막 argument라면 마지막 매개변수이름(handler:)을 생략한 후 함수 소괄호 외부에 클로저를 구현

클로저의축약표현들

let multiply = { (a: Int, b: Int) -> Int in
    return a * b  // 연산자 띄어쓰기 수정
}

var result = multiply(10, 20)
print(result)

let add = { (a: Int, b: Int) -> Int in
    return a + b  // 연산자 띄어쓰기 수정
}

result = add(10, 20)
print(result)

func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
    return cal(x, y)
}

result = math(x: 10, y: 20, cal: add)
print(result)

result = math(x: 10, y: 20, cal: multiply)
print(result)

result = math(x: 10, y: 20, cal: { (val1: Int, val2: Int) -> Int in
    return val1 + val2
}) // 클로저 소스를 매개변수에 직접 작성
print(result)

result = math(x: 10, y: 20) { (val1: Int, val2: Int) -> Int in
    return val1 + val2
} // trailing closure
print(result)

result = math(x: 10, y: 20, cal: { (val1: Int, val2: Int) in
    return val1 + val2
}) // 리턴형 생략
print(result)

result = math(x: 10, y: 20) { (val1: Int, val2: Int) in
    return val1 + val2
} // trailing closure, 리턴형 생략
print(result)

result = math(x: 10, y: 20, cal: {
    return $0 + $1
}) // 매개변수 생략하고 단축인자(shorthand argument name) 사용
print(result)

result = math(x: 10, y: 20) {
    return $0 + $1
} // trailing closure, 매개변수 생략하고 단축인자 사용
print(result)

result = math(x: 10, y: 20, cal: {
    $0 + $1
}) // 클로저에 리턴값이 있으면 마지막 줄을 리턴하므로 return 생략
print(result)

result = math(x: 10, y: 20) { $0 + $1 } // return 생략
print(result)

 

디폴트 매개변수 정의

 

 

 

출처 - Smile Han