Intro.
개발 관련 공부를 할 때 내가 자주 이용하는 공부 방법이 2개 있다. 하나는 이게 도대체 왜 어쩌다가 만들어진 건지 조사하는 것과 비유하는 것이다. 특히 애기들도 알아먹을 수 있을만큼 아주아주 유치한 비유면 더 좋다. 앞으로 개발 블로그를 작성하면서도 이 방법들을 아주 많이 사용할 것이다. 그리고 나는 이미 인터넷에 나와 있는 사전적 의미들을 똑같이 쓰는 것보다 나만의 언어로 누군가에게 설명하듯이 작성해보도록 하겠다.
What is an Interface?
인터페이스는 복잡한 기계들을 인간들이 쉽게 다룰 수 있도록 고안해낸 개념이다. (생각보다 절박함) 그렇기 때문에 꼭 물리적인 매개체에 국한되지 않고 프로토콜 등의 추상적인 방법론도 포함한다. 인터페이스가 만들어진 목적은 단순화이다. 그렇기 때문에 내가 생각하기에 인터페이스의 핵심은 다음과 같다.
1. 정확하고 일관성 있는 입력과 출력을 가져야 한다.
2. 서로 다른 것들이 상호작용할 수 있게 도와준다.
1번만 보면 함수와 비슷해 보이기도 한다. 2번은 좀 의아해할 수도 있는데 원래 인터페이스의 사전적인 뜻은 다음과 같다.
서로 다른 두 시스템, 장치, 또는 소프트웨어 구성 요소 사이에서 정보나 신호를 주고받는 접점이나 경계면이다.
우린 컴퓨터 내부의 복잡한 로직을 몰라도 마우스, 키보드, 모니터로 컴퓨터와 쉽게 상호작용한다. 즉 모니터, 마우스, 키보드 이 모든게 사용자인 나와 컴퓨터를 이어주는 인터페이스라는 거다.
이러한 인터페이스는 무엇과 무엇을 연결하는지에 따라 3가지로 나뉜다.
하드웨어 인터페이스
이름만 봐도 짐작이 가듯이 하드웨어끼리 이어지게 해주는 인터페이스다.각종 USB 기기나 HDMI 기기들이 여기에 속한다. 데이터를 어떻게 주고받는지 방식을 몰라도 그냥 냅다 갖다 꽂으면 동작을 한다.
그렇다고 단순한 선 연결이라고 생각하면 곤란하다. 주고 받는 전기적 신호에 대한 프로토콜도 포함된 개념이다. 서로 약속한 형태로 신호를 주고 받아야 동작한다는 것이다.
예를 들면, 우리가 일본 식당에 가서 아랍어로 주문을 하면 당연히 직원은 못알아들을 것이다. 돈만 준다고 다 되는게 아닌 것과 마찬가지다. (액수가 많으면 될 지도)
사용자 인터페이스
순서상 지금 소프트웨어를 하는 게 맞는 거 같지만, 후에 따로 설명할 것이 있기 때문에 사용자 인터페이스부터 설명하겠다. 이게 그 유명한 UI이다. 사용자 즉, 사람이 컴퓨터(기계)를 제어하는 방법이다.
리눅스를 보면 마우스 없이 오직 명령어만 쳐서 컴퓨터를 제어한다. 이러한 방법을 CLI(Command Line Interface)라고 한다. CLI가 리눅스의 UI인 것이다.
하지만 윈도우를 보면 명령어를 몰라도 마우스로 프로그램 실행 파일을 눌러 동작하고 드래그, 더블 클릭, 휠 등 다양한 동작을 수행하며 더 쉽게 컴퓨터와 상호작용할 수 있게 되었다. 이러한 방식을 GUI(Graphic User Interface)라고 한다.
소프트웨어 인터페이스
응용 프로그램끼리 이어지게 해주는 인터페이스이다. 우리가 흔히 잘 알고 있는 API(Application Program Interface)가 여기에 속한다.
API가 왜 사용자 인터페이스가 아니고 소프트웨어 인터페이스지?
라는 의문이 생길 수 있다. (아님 말고)
겉으로 보기에 API는 우리가 버튼을 누르면 프로그램이 동작하는 것처럼 보인다. 예를 들어 우리는 로그인 버튼을 누르면 컴퓨터가 동작해 로그인 된 것처럼 보이지만, 실제로는 클라이언트의 소프트웨어와 서버의 소프트웨어가 통신한 것이기 때문에 API는 명백한 소프트웨어 인터페이스라고 볼 수 있다.
우리가 음식점에 가서 메뉴판을 보고 메뉴를 시키면 사실상 홀 직원이 주방 직원과 상호작용 하여 무엇을 조리해야할지 전달해주는 것과 같다.
API에 대해 자세한 건 다른 게시글로 다루도록 하겠다.
외에도 코드가 코드를 불러오는 라이브러리나 프레임워크도 소프트웨어 인터페이스에 속한다.
'CS' 카테고리의 다른 글
| 🤯그게 그거 아닌가? 멀티 프로세스 vs 멀티 스레드 (0) | 2026.03.14 |
|---|---|
| 💻프로세스? 스레드? 어디서 들어는 봤는데.. (0) | 2026.03.10 |
| 😗TCP? HTTP랑 비슷한 거 아님? (0) | 2026.03.03 |
| 🤔 REST API랑 RESTful API, 뭐가 달라? (진짜 모름) (0) | 2026.02.25 |
| API가 도대체 뭔데 (0) | 2026.02.24 |
