데이터 소스가 필요한 매우 간단한 응용 프로그램이 있습니다. 현재 플랫 파일이지만 나중에 데이터베이스로 변경됩니다. 상속이나 인터페이스 사용에 대한 의견이 필요합니다. 어느 쪽이 더 낫겠습니까? 왜? 내 의견은 유연하기 때문에 인터페이스를 사용하지만 그때 나도 추상 클래스로 데이터 소스를 만들 수 있습니다.Java에서 상속 또는 인터페이스를 사용하는 경우?
답변
모든 구현에서 액세스해야하는 공통 기능이있는 추상 클래스를 사용합니다. 여기서는 데이터베이스와 파일 구현이 너무 다르므로 공통점이 없으므로 인터페이스와 함께 갈 것입니다.
데이터에 액세스하기위한 메소드와 유형 만 동일하게 유지되는 경우 인터페이스를 사용합니다. 공유해야 할 것들 사이에 공통 코드/기능이있을 때 상속을 사용합니다.
이 경우 인터페이스가 충분하고 일반적인 코드가없는 추상 클래스를 사용하면 낭비가 될 것입니다. 인터페이스를 사용하는 것이 종종 잊혀지는 이점 중 하나는 한 번에 여러 개의 인터페이스를 구현할 수있는 반면 한 개의 상위 클래스에서만 상속 할 수 있다는 것입니다.
이 경우 인터페이스를 사용하는 것이 더 편리합니다.
구현 세부 사항을 추상화하면 플랫 파일과 백업 된 데이터베이스에서 모두 사용할 수있는 공용 인터페이스를 제공 할 수 있습니다. 변경할 시간이되면이 인터페이스를 구현하는 코드 만 변경되며이를 사용하는 코드는 변경되지 않습니다.
나는 추상적 인 클래스로 갈 것이다. 순수한 객체 지향 접근법에 대해 살펴보면, 클래스는 매우 작고 필요성 만 다음 하위 클래스에 객체의 모든 매개 변수와 값을 포함하게합니다.
계획중인 데이터베이스를 준비하는 데 필요한 추상 클래스의 예는 고유 ID에 대해 int
입니다.
게시물에서 언급했듯이 데이터 소스에서 수행 할 수있는 작업을 정의하는 인터페이스를 만드는 것이 가장 좋습니다. 각 단일 데이터 소스에 대해 해당 인터페이스를 구현하는 클래스를 작성할 수 있습니다.
플랫 파일에서 작동하려면 클래스 FileDataWrapper implements DataWrapper
을 구현하면됩니다. 여기서 클래스 FileDataWrapper는 데이터 소스에서 수행 할 수있는 작업을 구현합니다. 나중에 데이터베이스로 변경하면 DatabaseDataWrapper implements DataWrapper
클래스를 구현하기 만하면됩니다.
DAO 디자인 패턴과 공장을 사용할 수 있습니다. 예를 들어 Advanced DAO programming에서 찾을 수 있으며 자세한 내용은 Core J2EE Patterns - Data Access Object입니다.
- 1. 상속 또는 인터페이스를 사용해야합니까?
- 2. Java에서 디자인 패턴을 구현할 상속 또는 인터페이스를 선택 하시겠습니까?
- 3. Java에서 freopen을 사용하는 경우
- 4. COM 인터페이스를 사용하는 경우 System.InvalidCastException
- 5. Java에서 다른 인터페이스를 확장하는 빈 인터페이스를 사용하는 목적은 무엇입니까?
- 6. java에서 cloneable 인터페이스를 사용하는 것은 무엇입니까?
- 7. Java에서 BufferedInput/OutputStreams를 사용하는 경우?
- 8. Java에서 인터페이스 구현의 상속
- 9. Java에서 Jruby rb가 클래스 상속 지원 또는 해결 방법을 생성했습니다.
- 10. EF4 : 인터페이스를 사용한 Compex 상속
- 11. objective-c가있는 Java에서 인터페이스를 시뮬레이트하십시오.
- 12. 동일한 메서드를 사용하는 두 인터페이스를 사용하여 다중 상속 구현
- 13. Objective C에서 Java에서 intern()을 사용하는 경우
- 14. Java에서 네트워크 인터페이스를 지정하는 방법
- 15. 상속 인터페이스를 상속 할 때 확인되지 않은 기호
- 16. Java에서 동일한 인터페이스를 사용하는 다른 클래스에 대한 Dispatched 함수 호출
- 17. Java에서 인터페이스를 구현하는 모든 클래스 테스트
- 18. 인터페이스를 사용하지 않고 다중 인터페이스 상속
- 19. Java에서 기본 생성자 및 상속
- 20. 클래스가 제네릭 인터페이스를 상속 받는지 테스트합니다.
- 21. 하위 유형을 사용하는 방법? - Java에서 재정의 및 상속
- 22. pathParams 또는 QueryParams를 사용하는 경우
- 23. 쿼리 또는 코드를 사용하는 경우
- 24. 코드 계약 : 상속 된 인터페이스를 다루는 방법?
- 25. 포인터를 통해 배열을 사용하는 경우 또는 그 반대로 사용하는 경우
- 26. Java에서 클로저로 인터페이스를 대체/보완하는 방법은 무엇입니까?
- 27. 암시 적 상속 Java에서 작동
- 28. Java에서 파생 클래스의 인터페이스를 구현할 수 있습니까?
- 29. ISynchronizeInvoke 인터페이스를 사용하는 방법?
- 30. Java에서 인터페이스에 인터페이스를 넣으려는 이유는 무엇입니까?
하지만 여전히 인터페이스로 데이터 소스를 만든 다음 FileDataSource에서 구현하는 것이 합리적일까요? – Phoenix
@Phoenix : 내가 원하는 것을 얻지 못하고있다. 물론 인터페이스가 있다면 뭔가 구현해야합니다. –