"안녕하세요, 아미고! 오늘은 인터페이스가 존재하는 이유에 대해 말씀드리려고 합니다. 특정 클래스, 객체, 엔티티가 특정 인터페이스를 지원한다는 말을 자주 듣곤 합니다. 인터페이스를 지원한다는 것이 무슨 뜻인가요 ? "

특정 동작을 지원하기 위한 인터페이스가 존재합니다 - 1

넓은 의미에서 모든 인터페이스는 무언가가 다른 것과 상호 작용하는 메커니즘입니다. 예를 들어 TV 리모컨은 원격 인터페이스입니다. 개는 명령을 이해하고 실행합니다. 즉, 개가 음성(제어) 인터페이스를 지원한다는 의미입니다. 요약하자면, 인터페이스는 두 가지가 상호 작용하는 표준화된 방법이며 양 당사자가 표준을 알고 있다고 말할 수 있습니다. 사람이 개에게 "앉아"라고 말하면 그의 명령은 «개 음성 제어 인터페이스»의 일부이며 개가 명령에 순종하면 개가 인터페이스를 지원한다고 말합니다.

그래서 그것은 프로그래밍에 있습니다. 메서드는 개체, 해당 데이터에 대해 수행되는 작업입니다. 그리고 클래스가 특정 메서드를 구현하는 경우 특정 명령의 «실행을 지원»합니다. 메서드를 인터페이스로 결합하여 무엇을 얻을 수 있습니까?

1)인터페이스는 클래스 와 마찬가지로 고유한 이름을 가집니다. 양 당사자는 상대방이 유사한 인터페이스가 아닌 자신이 알고 있는 정확한 인터페이스를 지원한다고 100% 확신할 수 있습니다.

2) 각 인터페이스는 이를 지원할 클래스에 특정 제한을 부과합니다. 클래스(개발자)는 인터페이스에서 상속된 메서드가 호출될 때 수행할 작업을 결정하지만 결과는 합리적인 기대 범위 내에 있어야 합니다. 개에게 "앉아"라고 명령한 다음 5분 동안 제자리에서 뒹굴고 앉으면 인터페이스를 지원합니다. 그러나 그것이 대신 당신의 다리를 붙잡는다면 인터페이스를 지원한다고 말할 수 없습니다. 명령을 실행해도 예상한 결과가 나오지 않았습니다.

당신과 당신의 친구들이 컴퓨터 게임을 만들고 있다고 가정해 봅시다. 그리고 당신은 한 캐릭터의 행동을 프로그래밍하도록 지정되었습니다. 동료 중 한 명이 이미 화면에 모든 문자를 표시하는 코드를 작성했습니다. 게임을 디스크에 저장하는 일을 담당하는 두 번째 동료는 모든 게임 개체를 파일에 저장하는 코드를 작성했습니다. 그들 각각은 많은 코드를 작성했고 그 코드와 상호 작용하기 위한 인터페이스를 만들었습니다. 예를 들어 다음과 같을 수 있습니다.

자바 코드 설명
interface Saveable
{
 void saveToMap(Map<String, Object> map);
 void loadFromMap(Map<String, Object> map);
}
— 지도에서 객체를 저장/로드하기 위한 인터페이스.
interface Drawable
{
 void draw(Screen screen);
}
— 전달된 Screen 개체 내부에 개체를 그리기 위한 인터페이스입니다.
class PacMan implements Saveable, Drawable
{}
— 두 개의 인터페이스를 지원하는 클래스.

즉, 모든 인터페이스(인터페이스 그룹)를 지원하려면 클래스가 다음과 같아야 합니다.

1) 상속

2) 선언된 메서드를 구현합니다.

3) 메서드는 의도한 대로 수행해야 합니다.

그런 다음 클래스와 객체에 대해 전혀 알지 못하는 나머지 프로그램 코드는 클래스와 함께 작동할 수 있습니다.

"코드가 내 클래스에 대해 아무것도 알 수 없는 이유는 무엇입니까?"

"당신이 1년 전에 누군가가 작성한 프로그램에서 코드를 가져왔다고 가정해 봅시다. 또는 당신의 친구가 다른 사람에게서 게임 엔진을 구입/라이선스했다고 가정해 봅시다. 당신은 게임을 위한 작업 코드를 가지고 있습니다. 서로 상호 작용하는 수천 개의 개체. 그리고 그들은 클래스가 올바르게 구현한 인터페이스를 통해 상호 작용이 발생하도록 하면 객체와 올바르게 상호 작용할 수 있습니다 ."

"저 멀리! 그게 가능한지 몰랐어요."

"모든 큰 프로젝트는 이렇게 진행됩니다. 사람들은 오래 전에 처음부터 쓰기를 중단했습니다."

사람들은 또한 매번 수학과 알파벳을 재발명하지 않습니다. 대신 그들은 그들보다 먼저 발명된 모든 것을 연구합니다.