이렇게하는 주된 이유는 인터페이스의 특정 구현에서 코드를 분리하기 위해서입니다. 이 같은 코드를 작성하는 경우 :
는
List list = new ArrayList();
코드의 나머지는 해당 데이터가 당신이 쉽게와 List
인터페이스가 다른 구현 사이를 전환 할 수 있기 때문에 바람직하다 유형 List
,이다 알고있다.
예를 들어 상당히 큰 타사 라이브러리를 작성 중이며 LinkedList
으로 라이브러리의 핵심을 구현하기로 결정했다고 가정 해 보겠습니다.라이브러리가 이러한 목록의 요소에 액세스하는 데 크게 의존하는 경우 결국 디자인 결정이 잘못되었다는 것을 알게됩니다. LinkedList
(O (n) 액세스 시간을 제공) 대신 ArrayList
(O (1) 액세스 시간을 제공)을 사용해야 함을 알게 될 것입니다. 인터페이스로 프로그래밍했다고 가정하면 그러한 변경을 쉽게 수행 할 수 있습니다. 당신은 단순히
List list = new LinkedList();
List list = new ArrayList();
에에서
List
의 인스턴스를 변경할 것입니다 그리고 당신은 당신이
List
인터페이스가 제공하는 계약을 따르도록 코드를 작성했기 때문에이 일 것이라는 점을 알고있다.
한편, LinkedList list = new LinkedList()
을 사용하여 라이브러리의 핵심을 구현 한 경우 나머지 코드가 메소드를 사용하지 않는다고 보장 할 수 없으므로 그러한 변경을하는 것이 쉽지는 않습니다. LinkedList
클래스에만 적용됩니다.
전체적으로 선택은 디자인의 문제 일 뿐이지 만 이러한 디자인은 나중에 대규모 구현 프로젝트에서 특히 중요합니다. 기존 코드.
오. 죄송 해요. 왜냐하면 나는 '객체'로 바뀌기 때문에 그것을 잊어 버린다. – hqt
@duffymo - 그 질문은 왜'new List
중복 질문이 아닙니다. 가능한 중복에는 일반적인 질문이 있지만 구체적인 세부 사항이 있습니다. 제목에서이 질문이 더 관련이 있는지/실제로 실제로 질문 한 내용과 동기화되어 있음을 발견했습니다. – Dexters