OS-SDK-API는 어떤 관계일까?

이은지·2022년 3월 5일
0
post-thumbnail

맘편히 기초 이론 보충할 수 있는 여유로운 나날들~.~
1,2월에는 구현을 위한 구현만 했다면, 3월에는 정말 공부를 위한 공부만 하려구 😇

🦕 운영체제란?

컴퓨터 하드웨어가 있다. CPU, 주기억장치(RAM), 모니터 등등.
하드웨어란, 말 그대로 컴퓨터의 물리적 구성요소를 의미한다.

이때 하드웨어는, 자신을 조작할 수 있는 소프트웨어가 없다면 그저 기계덩어리에 불과하다!
여기서 하드웨어를 조작하는 소프트웨어가 바로 운영체제(Operating System)다.

즉, 운영체제란 "사용자가" 하드웨어를 조작할 수 있게 해주는 소프트웨어 라고 할 수 있다.


운영체제는

  • 하드웨어를 직접적으로 제어한다.
  • 컴퓨터의 자원들(ex 메모리)을 효율적으로 관리한다.
  • 가장 bottom line에 있는 하드웨어와, 가장 윗단에 있는 사용자를 매개한다.

+) 가령 OS개발자는 다음과 같은 고민을 할 수 있다.
"유한한 메모리를 어떻게 하면 사용자 입장에서 무한하다고 느낄 수 있게 할 것인가?"
(== 유한한 메모리(하드웨어)를 어떻게 효율적으로 관리해야 할까)


보다 구체적으로, 운영체제는 입력, 출력, 메모리 관리 등의 기능을 제공한다.

🦖 SDK

SDK는 말그대로 소프트웨어 개발 키트로서, 소프트웨어를 개발하는데 필요한 도구들을 모아놓은 키트다.

SDK에는 다음과 같은 것들이 포함되어 있다.

  1. 언어 소프트웨어: 코드편집기, 컴파일러, 디버거 등
  2. API(라이브러리)
  3. 문서(Document): 언어 소프트웨어의 사용법, 프로그래밍 언어에 대한 설명, 라이브러리에 대한 설명을 담은 문서

참고로 SDK마다 특정 프로그래밍 언어가 정해져있다.

예) iOS SDK의 프로그래밍 언어는 스위프트다.
또 안드로이드 SDK의 프로그래밍 언어는 자바다.(한국이 자바 강국인 이유가 여기에?...)

🐬 API

API가 SDK의 일부인 건 알겠다. 그렇다면 API란?

API란 Application Programming Interface의 줄임말이다.
"Interface" 라는 건, 뭐 하나를 다른 하나와 연결한다는 건데 API는 대체 뭐와 뭐를 연결하는걸까?

내가 보던 교재에 있는 문장을 그대로 가져와보겠다.

프로그래밍 언어가 제공하는 기능들은 매우 단순해서 입력, 출력, 그리고 메모리 관리 같은 기능들은 프로그래밍 언어의 기능이 아닙니다. 대부분은 운영체제에서 제공합니다. 따라서 입력, 출력, 그리고 메모리 관리를 할 수 있는 기능들은 언어 소프트웨어 개발자들에 의해서 이미 작성된 코드들로 제공됩니다. 이러한 코드들을 라이브러리라고 합니다. 소프트웨어 개발 도구에서는 이러한 라이브러리를 Application Programming Interface라고 합니다.

즉, 운영체제에서 제공하는 기능을 Application Programming에 사용할 수 있게끔
운영체제와 Application Programming을 매개하기 때문에 Application Programming Interface인 것!!!

크 매번 도무지 와닿지가 않았던 API의 뜻이 위에 교재를 보고 처음으로 이해가 갔다.

물론 위의 뜻은 정말 원형적인 의미이고, 실제로는 API가 좀 더 폭넓은 의미로 쓰이는 듯하다.
또 SDK와 API가 거의 동일한 의미로 사용되는듯!

🦭 실제 예시

Kakao SDK for JavaScript
:카카오 기능을 JavaScript에서 사용하기 위한 도구들의 모음

kakao developers 사이트
➡️ 이 사이트가 SDK의 문서라고 할 수 있다.


API 예시

문서를 살펴보면, iOS 앱에서 카카오톡을 실행하기 위해서는 아래의 코드를 사용하라고 나와있다.

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void ) { 
    print(navigationAction.request.url?.absoluteString ?? "") 

    // 카카오 SDK가 호출하는 커스텀 URL 스킴인 경우 open(_ url:) 메서드를 호출합니다. 
    if let url = navigationAction.request.url , ["kakaolink"].contains(url.scheme) {

        // 카카오톡 실행 가능 여부 확인 후 실행
        if UIApplication.shared.canOpenURL(url) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        }

        decisionHandler(.cancel) return 
    } 

    // 서비스에 필요한 나머지 로직을 구현합니다. 
    decisionHandler(.allow) 
}

즉 카카오톡이라는 기능을 iOS앱 내에서 사용할 수 있도록 개발자들이 미리 작성해둔 코드가 결국 API인 것!

A라는 기능을 B라는 사용자가 잘 사용할 수 있게 미리 작성해둔 코드들 이 정도로 API를 이해하면 좋겠다.
여기서 B는 개발자일수도, 특정 프로그래밍 언어일 수도 있는 것이다.

profile
교육학과 출신 서타터업 프론트 개발자 👩🏻‍🏫

0개의 댓글