JavaRush /Java Blog /Random-KO /인터페이스란 무엇입니까?
fog
레벨 18

인터페이스란 무엇입니까?

Random-KO 그룹에 게시되었습니다
인터페이스는 일부 동작을 설명하는 공개적이고 일반적으로 허용되는 계약(합의)입니다. 그들은 무엇을 위해 필요합니까? 예를 들어 문자열 목록을 가리키는 링크가 있다고 가정해 보겠습니다. 처음에 이 목록에 많은 요소가 추가된 다음 전체 목록이 한 번 처리된다고 가정해 보겠습니다. 잘 알려진 권장 사항을 따르고 클래스를 사용하기로 결정했다고 가정해 보겠습니다ArrayList.
ArrayList<String> list = new ArrayList<>();
우리는 이 문자열 목록을 사용하고 성능을 최적화하기 위해 클래스별 방법을 사용하는 100,500줄의 코드로 프로그램 동작을 작성했습니다 ArrayList. 예를 들어, verifyCapacity() 입니다 . 목록 끝에 줄을 추가하기만 하면 모든 것이 잘 작동하고 빠르게 작동합니다. 그러나 이제 우리는 프로그램의 방향을 약간 다른 작업 유형으로 변경해야 합니다. 여기서 행은 주로 목록의 시작 부분에 추가됩니다. 이러한 유형의 하중에는 훨씬 더 적합합니다 LinkedList. 그러나 100,500줄의 코드로 구성된 프로그램을 레일로 번역하려면 LinkedList특정 방법의 사용을 찾아서 제거해야 하며 ArrayList, 아마도 어떤 곳에서는 프로그램의 개별 섹션의 논리를 크게 변경해야 할 것입니다. ArrayList, 및 에서 모두 사용할 수 있는 메서드만 사용했다면 LinkedList이 작업을 수행할 필요가 없습니다. 코드 한 줄, 즉 목록 선언을 변경할 수 있습니다.
LinkedList<String> list = new LinkedList<>();
이러한 클래스에 대한 공통 메서드 선언을 추상 클래스(예: )에 배치하는 것이 더 편리하다는 것을 알 수 있습니다 AbstractList. 이 경우 목록을 다음과 같이 선언할 수 있습니다.
AbstractList<String> list = new ArrayList<>();
그리고 다음과 같이 구현을 신속하게 전환할 수 있습니다.
AbstractList<String> list = new LinkedList<>();
하지만 이 경우 프로그램에서 사용할 수 있는 클래스는 클래스의 자손이 아니지만 동일한 동작과 동일한 메소드를 갖는 AbstractList더 적합한 클래스가 있더라도 클래스의 자손으로만 제한됩니다. AbstractList어떻게 해야 하나요? 이것이 인터페이스가 발명된 이유입니다 . 인터페이스는 완전히 관련되지 않은 클래스가 커밋할 수 있는 일련의 메서드와 해당 동작에 대한 규칙으로, 해당 클래스 중 하나를 단일 참조로 참조할 수 있습니다. 예를 들면 다음과 같습니다.
List<String> list;
list = new ArrayList<>();
list = new LinkedList<>();
list = new AnotherListClass<>();
AnotherListClass클래스에 공통 조상 클래스 ArrayList가 없더라도 . 인터페이스의 좋은 예는 자동차의 스티어링입니다. 자동차에는 스티어링 휠, 페달 및 기어박스가 있습니다. 대부분의 자동차에서 이러한 요소는 동일한 동작 규칙을 따릅니다. 예를 들어, 핸들을 시계 반대 방향으로 돌리면 자동차 제조사에 상관없이 속도가 빨라지지 않고 왼쪽으로 회전합니다. 이러한 컨트롤을 사용하는 방법을 알면 모델, 연식, 제조사 또는 엔진 유형에 관계없이 모든 자동차를 쉽게 다룰 수 있습니다. 또한 완전히 다른 유형의 운송 수단(예: 우주선)이 자동차와 동일한 제어 인터페이스를 갖는 상황을 상상할 수 있습니다. 자동차를 운전하는 방법을 아는 당신이 그러한 배의 조종석에 앉아 있다면 이러한 상황에서 길을 잃는 것을 피할 수 있습니다. 다시 한 번 반복해 보겠습니다.LinkedListObject
  • 인터페이스는 행동에 관한 계약(합의)입니다.
  • 상속으로 관련되지 않은 클래스라도 많은 클래스는 이 계약(인터페이스 구현)을 준수하는 데 동의한다고 선언할 수 있습니다.
  • 별도의 인터페이스에 동작 설명을 배치하면 코드의 유연성이 향상되어 인터페이스의 구현(인터페이스를 구현하는 클래스)을 상속과 관련되지 않은 클래스로 전환할 수 있으므로 매우 편리합니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION