2016. 4. 14. 10:39

인터페이스(Interface)란 컴퓨터 용어에서 많이 등장합니다.

대표적으로 User Interface 입니다. 줄여서 UI라고 자주 부릅니다.

Interface를 어원을 찾아보면 Inter(중간) + face(맞대고 있다)입니다. 즉, 어느 중간 사이에서 맞대고 있는 부분을 의미를 가집니다.

User Interface, UI란 사용자 그러니까 플레이어와 컴퓨터 '중간' 사이에서 '맞대고 있어' 일어나는 상호작용을 매개하는 것을 말합니다.


지금부터 설명할 객체 지향 언어에서도 인터페이스란 객체와 객체 '중간' 사이에서 '맞대고 있어' 일어나는 사이에서 상호 작용의 매개로 쓰인답니다.


Java에서는 Interface라는 키워드를 통해서 Interface를 바로 생성할 수 있습니다.

interface로 할 수 있는 일이 무엇이냐 하면 클래스의 기본적인 틀을 제공하면서 다른 객체 사이에서의 '중간' 매개 역할도 담당한다는 것입니다.

그럼 자바를 이용해서 직접 인터페이스를 선언해 봅시다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
public interface Book{    //여기서 I는 인터페이스의 i입니다.
    private String _author;    //작가
    private String _title;    //제목
    private String _text;    //본문
    public void Show_Information(){
    }
}
public class Cartoon implements Book{
    //_author와 _title, _text에 접근 할 수 있음
    public void Show_Information(){
        // 꼭 구현해야함
    }
}
public class Novel implements Book{
    //_author와 _title, _text에 접근 할 수 있음
    public void Show_Information(){
        // 꼭 구현해야함
    }
}
cs


이처럼 인터페이스 선언하고 클래스를 선언할 수 있습니다.

이경우는 즉 Book 클래스가 인터페이스 클래스가 된것입니다.

즉 다음과 같이 사용 할 수 있습니다.


1
2
3
4
5
6
7
void main(){
    Book mCartoon = new Cartoon();
    mCartoon.Show_Information();//만화책 정보
    Book mNovel = new Novel();
    mNovel.Show_Information();//소설책 정보
}
 
cs


즉, 이렇게 Book이라는 클래스 하나로, Cartoon과 Novel을 선언하여 공통된 함수를 불러서 관리 할수있습니다.

손쉽게 표현하면 위처럼 사용하는게 아니라,


1
2
3
4
5
6
7
8
9
 
 
void main(){
    Book[] mBooks = new Book[2];
    mBooks[0= new Cartoon();
    mBooks[1= new Novel();
    for(int i=0; i<2++i)
        mBooks[i].Show_Information();//책정보 
}
cs


이처럼 한가지의 클래스로 묶어서 사용할 수 있습니다.


사용 용도 및 방법은 무궁무진합니다.


게임에서 적이 가진 모든 총알을 _IBullet 이라 선언하고 관리해도 되고, 모든 오브젝트를 _IObject 라고 하여 관리해도됩니다.

이 모든걸 다합쳐서 _IRef 로 인터페이스 선언하여 관리하면 정말 간단하겠죠?



C++에서 선언법은 다음과 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "stdafx.h"
#include <iostream>
 
class _IRef{
public:
    virtual ~_IRef(){}
    virtual void _Update() = 0;
};
 
class Node : public _IRef{
public:
    ~Node(){}
    void _Update(){ std::cout << "Node Update" << std::endl; }
};
 
class user{
public:
    void Something(_IRef* Ir){ Ir->_Update(); }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    Node* c = new Node;
    user u;
    u.Something(c);
 
    return 0;
}
 
 
 
cs






Posted by 시리시안