"인터페이스"의 두 판 사이의 차이
tjdwhd2401 (토론 | 기여) |
잔글 |
||
(사용자 4명의 중간 판 20개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''인터페이스'''(interface)란 사물과 사물 사이 또는 사물과 인간 사이의 경계에서, 상호 간의 소통을 위해 만들어진 물리적 매개체나 [[프로토콜]]을 말한다 | + | '''인터페이스'''(interface)란 사물과 사물 사이 또는 사물과 인간 사이의 경계에서, 상호 간의 소통을 위해 만들어진 물리적 매개체나 [[프로토콜]]을 말한다. 주로 [[컴퓨터]] 분야에서 사용되는 용어이며, '''I/F'''로 축약하여 사용하기도 한다. 크게 [[하드웨어 인터페이스]], [[소프트웨어 인터페이스]] 그리고 [[사용자 인터페이스]]의 세 가지로 구분된다.<ref name="인터페이스">〈[https://terms.naver.com/entry.nhn?docId=2837557&cid=40942&categoryId=32828 인터페이스]〉《네이버 지식백과》</ref> |
− | |||
− | |||
− | + | {{:인터넷 배너|호스팅}} | |
==역사== | ==역사== | ||
− | + | * 1945~1968년(배치 인터페이스) : 배치(batch) 시대에 컴퓨팅 전력은 매우 희소했고 비쌌다. 사용자 인터페이스들은 초보적인 수준이었다. 사용자들은 [[컴퓨터]]들에 순응하는 것 외에는 다른 방도가 없었다. 즉, 사용자 인터페이스들은 간접적인 비용으로 간주되었고, [[소프트웨어]]는 [[프로세서]]가 가능한 부하를 줄이면서 최대한 이용할 수 있도록 설계되었다. | |
− | + | * 1969년~현재: 명령 줄 사용자 인터페이스 | |
+ | * 1985년(SAA 사용자 인터페이스 / 텍스트 기반 사용자 인터페이스) :1985년 마이크로소프트 [[윈도우]]와 기타 그래픽 사용자 인터페이스의 시작과 함께 [[IBM]]은 이른바 시스템 [[애플리케이션]] 아키텍처(SAA) 표준을 만들었으며 여기에는 IBM 공통 사용자 접근(CUA) 파생물이 포함되어 있다. CUA는 사람들이 [[윈도우]]에서 인지하며 사용하고 있는 것을 만들어냈으며, 근대의 도스 및 [[윈도우]] 콘솔 [[애플리케이션]]들 또한 이 표준을 사용하게 된다. | ||
+ | *1968년~ 현재: 그래픽 사용자 인터페이스 | ||
+ | *1968년: 더글러스 엥겔바트가[마우스, 포인터, 하이퍼텍스트, 다중 창을 사용하는 NLS를 시연하였다. | ||
+ | *1970년: 제록스 팰로앨토 연구 센터의 연구원들(다수가 SRI 출신)이 WIMP 패러다임을 개발한다. (창, 아이콘, 메뉴, 포인터)<ref>〈[https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4 사용자 인터페이스]〉《위키백과》</ref> | ||
== 특징 == | == 특징 == | ||
− | + | ===100% 추상 클래스=== | |
− | + | 인터페이스의 모든 메소드는 자동으로 퍼블릭 추상 메소드(public abstract method)가 된다. 따라서 이를 구현하는 하위 클래스는 반드시 해당 메소드의 body를 구현해야 한다. 추상 클래스(abstract class)와 구분하기 위해 선언 시에는 클래스(class) 키워드 대신 인터페이스(interface) 키워드를 사용한다. | |
− | 따라서 이를 구현하는 하위 클래스는 | ||
− | abstract class 와 구분하기 | ||
− | + | ===다형성 제공=== | |
− | 상위 객체에 하위 객체를 참조하게 하여신규로 추가되는 하위 객체에 대해서도 동일한 규약을 가지게 하는 것처럼 | + | 상위 객체에 하위 객체를 참조하게 하여신규로 추가되는 하위 객체에 대해서도 동일한 규약을 가지게 하는 것처럼 인터페이스(interface)도 [[추상클래스]](abstact class)로서 같은 역할을 수행할 수 있다. |
− | |||
− | + | ===상속 트리에 무관하게 적용 가능=== | |
− | 상위 객체와 하위 객체의 관계와는 달리상속 트리 상의 계보를 타지 않더라도전혀 다른 트리상의 객체에 대해서도 | + | 상위 객체와 하위 객체의 관계와는 달리상속 트리 상의 계보를 타지 않더라도전혀 다른 트리상의 객체에 대해서도 인터페이스를 적용할 수 있다. 이 경우 인터페이스는 하위 객체에서 반드시 구현해야하므로규약의 성격을 발휘하면서도 하나의 "역할"을 부여하는 기능을 한다. |
− | 이 경우 | ||
− | + | ===여러개 인터페이스 구현=== | |
− | + | [[자바]]에서 다중 상속을 막는 것과는 달리 인터페이스는 DDD(Deadly Diamond of Death)를 발생하지 않으므로 하위 클래스는 여러개의 인터페이스를 구현할 수 있다.<ref>밤바, 〈[https://phrack.blog.me/80035424952 Interface의 특징]〉《codelabor.org - Bomber's Note》, 2007-03-06</ref> | |
− | 하위 클래스는 여러개의 | ||
== 종류 == | == 종류 == | ||
− | + | ===하드웨어 인터페이스=== | |
− | + | [[컴퓨터]] 등 정보 기기의 [[하드웨어]] 간 통신을 위해서 존재하는 입출력 포트의 전기적 연결 장치인 커넥터(connector), 신호의 송수신 방법([[프로토콜]]) 등을 말한다. [[컴퓨터]] 관련 [[버스 (컴퓨터)|버스]], [[저장장치]] 및 다양한 입출력 기기들 내에 존재하며, 주로 병렬연결과 직렬연결로 나누어진다. [[컴퓨터]] 내부 장치나 구성 요소 간의 상호 접속을 가능하게 하는 플러그, 커넥터, 카드 등이 [[하드웨어 인터페이스]]에 속한다. [[하드웨어 인터페이스]]의 종류로는 [[USB]](Universal Serial Bus)와 같은 직렬 [[커넥터]], RS-232C와 같은 통신용 직렬 인터페이스, SCSI와 같은 병렬 인터페이스 장치 등이 있다. | |
− | + | ===소프트웨어 인터페이스=== | |
− | + | [[소프트웨어]] 간의 통신을 위해 메시지를 전달하는 방식 등이 결정된 것으로, 다양한 레벨에서 다양한 종류의 인터페이스가 존재한다. 운영체제(OS)와 [[하드웨어]]들 사이의 인터페이스, 운영체제와 응용 프로그램이 상호 작용하는 인터페이스, 객체 지향 프로그래밍에서 응용 내의 객체들이 서로 상호 작용할 수 있도록 하는 메소드 등이 [[소프트웨어 인터페이스]]에 속한다. [[소프트웨어]] 설계 시 자원에 대한 접근을 잘 정의된 진입점(entry point), 즉 인터페이스를 통해서만 가능하도록 함으로써 시스템 자원에 대한 기능성과 안정성을 제공할 수 있다. | |
− | [[소프트웨어]] 간의 통신을 위해 메시지를 전달하는 방식 등이 결정된 것으로, 다양한 레벨에서 다양한 종류의 인터페이스가 존재한다. 운영체제(OS)와 [[하드웨어]]들 사이의 인터페이스, 운영체제와 응용 프로그램이 상호 작용하는 인터페이스, 객체 지향 프로그래밍에서 응용 내의 객체들이 서로 상호 작용할 수 있도록 하는 메소드 등이 [[소프트웨어 인터페이스]]에 속한다. [[소프트웨어]] 설계 시 자원에 대한 접근을 잘 정의된 진입점(entry point), 즉 인터페이스를 통해서만 가능하도록 함으로써 시스템 자원에 대한 기능성과 안정성을 제공할 수 있다. | + | ===사용자 인터페이스=== |
− | + | 기계, 특히 [[컴퓨터]]와 사용자(인간) 사이의 상호 작용과 정보 교환을 위한 인터페이스로 [[컴퓨터 상호 작용]](HCI : human-computer interaction) 혹은 인간-기계 인터페이스(MMI : man-machine interface)라고도 한다. [[사용자 인터페이스]]는 크게 입력과 출력의 두 가지 방법을 제공한다. 입력은 사용자가 시스템을 조작하는 방법을 정의하고, 출력은 사용자가 조작에 따라 시스템이 생성한 결과를 제시하는 수단이다. 좋은 사용자 인터페이스는 심리학과 생리학에 기반하여 사용자가 필요한 요소를 쉽게 찾고 사용하며 정확한 결과를 손쉽게 얻어낼 수 있도록 설계해야 한다.<ref name="인터페이스"></ref> | |
− | |||
− | |||
==장점== | ==장점== | ||
50번째 줄: | 45번째 줄: | ||
인터페이스를 이용하면 클래스의 선언과 구현을 분리할 수 있기 때문에 실제 구현에 독립적인 프로그램을 작성하는 것이 가능하다. | 인터페이스를 이용하면 클래스의 선언과 구현을 분리할 수 있기 때문에 실제 구현에 독립적인 프로그램을 작성하는 것이 가능하다. | ||
클래스와 클래스 간의 직접적인 관계를 인터페이스를 이용해서 간접적인 관계로 변경하면, 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않는 독립적인 프로그래밍이 가능하다.<ref>널, 〈[https://blog.naver.com/js_team_cc/221047621360 인터페이스의 장점]〉《MY BLOG》, 2017-07-09</ref> | 클래스와 클래스 간의 직접적인 관계를 인터페이스를 이용해서 간접적인 관계로 변경하면, 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않는 독립적인 프로그래밍이 가능하다.<ref>널, 〈[https://blog.naver.com/js_team_cc/221047621360 인터페이스의 장점]〉《MY BLOG》, 2017-07-09</ref> | ||
+ | |||
+ | ==활용== | ||
+ | 인터페이스는 아래와 같이 4단계를 통해 구현 및 사용이 된다. | ||
+ | * View : 인터페이스 정의(Define) 및 인터페이스와 컨트롤러 연결(Setter) 구현 | ||
+ | * Controller : 인터페이스와 컨트롤러 연결(Setter에 인터페이스 전달 하여 호출) | ||
+ | * Controller : 인터페이스 함수 구현(Import 혹은 Implements) | ||
+ | * View : 인터페이스 함수 실행(Run)<ref>순수하지않은개발자, 〈[https://codeasy.tistory.com/2 (개념이해)자바의 인터페이스 이해]〉《쉽게배우는안드로이드》, 2016-12-27</ref> | ||
{{각주}} | {{각주}} | ||
==참고자료== | ==참고자료== | ||
− | * | + | * 〈[https://terms.naver.com/entry.nhn?docId=2837557&cid=40942&categoryId=32828 인터페이스]〉《네이버 지식백과》 |
* 밤바, 〈[https://phrack.blog.me/80035424952 Interface의 특징]〉《codelabor.org - Bomber's Note》, 2007-03-06 | * 밤바, 〈[https://phrack.blog.me/80035424952 Interface의 특징]〉《codelabor.org - Bomber's Note》, 2007-03-06 | ||
− | * 널, 〈[https://blog.naver.com/js_team_cc/221047621360 인터페이스의 장점] | + | * 〈[https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4 사용자 인터페이스]〉《위키백과》 |
+ | * 순수하지않은개발자, 〈[https://codeasy.tistory.com/2 (개념이해)자바의 인터페이스 이해]〉《쉽게배우는안드로이드》, 2016-12-27 | ||
+ | * 널, 〈[https://blog.naver.com/js_team_cc/221047621360 인터페이스의 장점]〉《네이버블로그》, 2017-07-09 | ||
+ | |||
== 같이 보기 == | == 같이 보기 == | ||
* [[프로토콜]] | * [[프로토콜]] | ||
* [[컴퓨터]] | * [[컴퓨터]] | ||
− | * [[ | + | * [[자바]] |
* [[하드웨어 인터페이스]] | * [[하드웨어 인터페이스]] | ||
* [[소프트웨어 인터페이스]] | * [[소프트웨어 인터페이스]] | ||
* [[사용자 인터페이스]] | * [[사용자 인터페이스]] | ||
* [[추상클래스]] | * [[추상클래스]] | ||
+ | * [[GUI]] | ||
− | {{인터넷| | + | {{인터넷|검토 필요}} |
+ | {{프로그래밍}} |
2024년 4월 8일 (월) 09:17 기준 최신판
인터페이스(interface)란 사물과 사물 사이 또는 사물과 인간 사이의 경계에서, 상호 간의 소통을 위해 만들어진 물리적 매개체나 프로토콜을 말한다. 주로 컴퓨터 분야에서 사용되는 용어이며, I/F로 축약하여 사용하기도 한다. 크게 하드웨어 인터페이스, 소프트웨어 인터페이스 그리고 사용자 인터페이스의 세 가지로 구분된다.[1]
[아사달] 스마트 호스팅 |
목차
역사[편집]
- 1945~1968년(배치 인터페이스) : 배치(batch) 시대에 컴퓨팅 전력은 매우 희소했고 비쌌다. 사용자 인터페이스들은 초보적인 수준이었다. 사용자들은 컴퓨터들에 순응하는 것 외에는 다른 방도가 없었다. 즉, 사용자 인터페이스들은 간접적인 비용으로 간주되었고, 소프트웨어는 프로세서가 가능한 부하를 줄이면서 최대한 이용할 수 있도록 설계되었다.
- 1969년~현재: 명령 줄 사용자 인터페이스
- 1985년(SAA 사용자 인터페이스 / 텍스트 기반 사용자 인터페이스) :1985년 마이크로소프트 윈도우와 기타 그래픽 사용자 인터페이스의 시작과 함께 IBM은 이른바 시스템 애플리케이션 아키텍처(SAA) 표준을 만들었으며 여기에는 IBM 공통 사용자 접근(CUA) 파생물이 포함되어 있다. CUA는 사람들이 윈도우에서 인지하며 사용하고 있는 것을 만들어냈으며, 근대의 도스 및 윈도우 콘솔 애플리케이션들 또한 이 표준을 사용하게 된다.
- 1968년~ 현재: 그래픽 사용자 인터페이스
- 1968년: 더글러스 엥겔바트가[마우스, 포인터, 하이퍼텍스트, 다중 창을 사용하는 NLS를 시연하였다.
- 1970년: 제록스 팰로앨토 연구 센터의 연구원들(다수가 SRI 출신)이 WIMP 패러다임을 개발한다. (창, 아이콘, 메뉴, 포인터)[2]
특징[편집]
100% 추상 클래스[편집]
인터페이스의 모든 메소드는 자동으로 퍼블릭 추상 메소드(public abstract method)가 된다. 따라서 이를 구현하는 하위 클래스는 반드시 해당 메소드의 body를 구현해야 한다. 추상 클래스(abstract class)와 구분하기 위해 선언 시에는 클래스(class) 키워드 대신 인터페이스(interface) 키워드를 사용한다.
다형성 제공[편집]
상위 객체에 하위 객체를 참조하게 하여신규로 추가되는 하위 객체에 대해서도 동일한 규약을 가지게 하는 것처럼 인터페이스(interface)도 추상클래스(abstact class)로서 같은 역할을 수행할 수 있다.
상속 트리에 무관하게 적용 가능[편집]
상위 객체와 하위 객체의 관계와는 달리상속 트리 상의 계보를 타지 않더라도전혀 다른 트리상의 객체에 대해서도 인터페이스를 적용할 수 있다. 이 경우 인터페이스는 하위 객체에서 반드시 구현해야하므로규약의 성격을 발휘하면서도 하나의 "역할"을 부여하는 기능을 한다.
여러개 인터페이스 구현[편집]
자바에서 다중 상속을 막는 것과는 달리 인터페이스는 DDD(Deadly Diamond of Death)를 발생하지 않으므로 하위 클래스는 여러개의 인터페이스를 구현할 수 있다.[3]
종류[편집]
하드웨어 인터페이스[편집]
컴퓨터 등 정보 기기의 하드웨어 간 통신을 위해서 존재하는 입출력 포트의 전기적 연결 장치인 커넥터(connector), 신호의 송수신 방법(프로토콜) 등을 말한다. 컴퓨터 관련 버스, 저장장치 및 다양한 입출력 기기들 내에 존재하며, 주로 병렬연결과 직렬연결로 나누어진다. 컴퓨터 내부 장치나 구성 요소 간의 상호 접속을 가능하게 하는 플러그, 커넥터, 카드 등이 하드웨어 인터페이스에 속한다. 하드웨어 인터페이스의 종류로는 USB(Universal Serial Bus)와 같은 직렬 커넥터, RS-232C와 같은 통신용 직렬 인터페이스, SCSI와 같은 병렬 인터페이스 장치 등이 있다.
소프트웨어 인터페이스[편집]
소프트웨어 간의 통신을 위해 메시지를 전달하는 방식 등이 결정된 것으로, 다양한 레벨에서 다양한 종류의 인터페이스가 존재한다. 운영체제(OS)와 하드웨어들 사이의 인터페이스, 운영체제와 응용 프로그램이 상호 작용하는 인터페이스, 객체 지향 프로그래밍에서 응용 내의 객체들이 서로 상호 작용할 수 있도록 하는 메소드 등이 소프트웨어 인터페이스에 속한다. 소프트웨어 설계 시 자원에 대한 접근을 잘 정의된 진입점(entry point), 즉 인터페이스를 통해서만 가능하도록 함으로써 시스템 자원에 대한 기능성과 안정성을 제공할 수 있다.
사용자 인터페이스[편집]
기계, 특히 컴퓨터와 사용자(인간) 사이의 상호 작용과 정보 교환을 위한 인터페이스로 컴퓨터 상호 작용(HCI : human-computer interaction) 혹은 인간-기계 인터페이스(MMI : man-machine interface)라고도 한다. 사용자 인터페이스는 크게 입력과 출력의 두 가지 방법을 제공한다. 입력은 사용자가 시스템을 조작하는 방법을 정의하고, 출력은 사용자가 조작에 따라 시스템이 생성한 결과를 제시하는 수단이다. 좋은 사용자 인터페이스는 심리학과 생리학에 기반하여 사용자가 필요한 요소를 쉽게 찾고 사용하며 정확한 결과를 손쉽게 얻어낼 수 있도록 설계해야 한다.[1]
장점[편집]
- 개발 시간을 단축할 수 있다.
일단 인터페이스가 작성되면, 이를 사용해서 프로그램을 작성하는 것이 가능하다. 메서드를 호출하는 쪽에서는 메서드의 내용과 관계없이 선언 부만 알면 되기 때문이다. 그리고 동시에 다른 한쪽에서는 인터페이스를 구현하는 클래스들 작성하도록 하여, 인터페이스를 구현하는 클래스가 작성될 때까지 기다리지 않고도 양쪽에서 동시에 개발을 진행할 수 있다.
- 표준화가 가능하다.
프로젝트에 사용되는 틀을 인터페이스로 작성한 다음, 개발자들에게 인터페이스를 구현하여 프로그램을 작성하도록 함으로써 보다 일관되고 정형화된 프로그램의 개발이 가능하다.
- 서로 관계없는 클래스들에 관계를 맺어 줄 수 있다.
서로 상속 관계에 있지도 않고, 같은 조상 클래스를 가지고 있지 않은 서로 아무런 관계도 없는 클래스들에 하나의 인터페이스를 공통으로 구현하도록 함으로써 관계를 맺어줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
인터페이스를 이용하면 클래스의 선언과 구현을 분리할 수 있기 때문에 실제 구현에 독립적인 프로그램을 작성하는 것이 가능하다. 클래스와 클래스 간의 직접적인 관계를 인터페이스를 이용해서 간접적인 관계로 변경하면, 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않는 독립적인 프로그래밍이 가능하다.[4]
활용[편집]
인터페이스는 아래와 같이 4단계를 통해 구현 및 사용이 된다.
- View : 인터페이스 정의(Define) 및 인터페이스와 컨트롤러 연결(Setter) 구현
- Controller : 인터페이스와 컨트롤러 연결(Setter에 인터페이스 전달 하여 호출)
- Controller : 인터페이스 함수 구현(Import 혹은 Implements)
- View : 인터페이스 함수 실행(Run)[5]
각주[편집]
참고자료[편집]
- 〈인터페이스〉《네이버 지식백과》
- 밤바, 〈Interface의 특징〉《codelabor.org - Bomber's Note》, 2007-03-06
- 〈사용자 인터페이스〉《위키백과》
- 순수하지않은개발자, 〈(개념이해)자바의 인터페이스 이해〉《쉽게배우는안드로이드》, 2016-12-27
- 널, 〈인터페이스의 장점〉《네이버블로그》, 2017-07-09
같이 보기[편집]
|