2012-07-16 4 views
5

데이터 소스가 필요한 매우 간단한 응용 프로그램이 있습니다. 현재 플랫 파일이지만 나중에 데이터베이스로 변경됩니다. 상속이나 인터페이스 사용에 대한 의견이 필요합니다. 어느 쪽이 더 낫겠습니까? 왜? 내 의견은 유연하기 때문에 인터페이스를 사용하지만 그때 나도 추상 클래스로 데이터 소스를 만들 수 있습니다.Java에서 상속 또는 인터페이스를 사용하는 경우?

답변

8

모든 구현에서 액세스해야하는 공통 기능이있는 추상 클래스를 사용합니다. 여기서는 데이터베이스와 파일 구현이 너무 다르므로 공통점이 없으므로 인터페이스와 함께 갈 것입니다.

+0

하지만 여전히 인터페이스로 데이터 소스를 만든 다음 FileDataSource에서 구현하는 것이 합리적일까요? – Phoenix

+0

@Phoenix : 내가 원하는 것을 얻지 못하고있다. 물론 인터페이스가 있다면 뭔가 구현해야합니다. –

2

데이터에 액세스하기위한 메소드와 유형 만 동일하게 유지되는 경우 인터페이스를 사용합니다. 공유해야 할 것들 사이에 공통 코드/기능이있을 때 상속을 사용합니다.

이 경우 인터페이스가 충분하고 일반적인 코드가없는 추상 클래스를 사용하면 낭비가 될 것입니다. 인터페이스를 사용하는 것이 종종 잊혀지는 이점 중 하나는 한 번에 여러 개의 인터페이스를 구현할 수있는 반면 한 개의 상위 클래스에서만 상속 할 수 있다는 것입니다.

0

이 경우 인터페이스를 사용하는 것이 더 편리합니다.

구현 세부 사항을 추상화하면 플랫 파일과 백업 된 데이터베이스에서 모두 사용할 수있는 공용 인터페이스를 제공 할 수 있습니다. 변경할 시간이되면이 인터페이스를 구현하는 코드 만 변경되며이를 사용하는 코드는 변경되지 않습니다.

0

나는 추상적 인 클래스로 갈 것이다. 순수한 객체 지향 접근법에 대해 살펴보면, 클래스는 매우 작고 필요성 만 다음 하위 클래스에 객체의 모든 매개 변수와 값을 포함하게합니다.

계획중인 데이터베이스를 준비하는 데 필요한 추상 클래스의 예는 고유 ID에 대해 int입니다.

0

게시물에서 언급했듯이 데이터 소스에서 수행 할 수있는 작업을 정의하는 인터페이스를 만드는 것이 가장 좋습니다. 각 단일 데이터 소스에 대해 해당 인터페이스를 구현하는 클래스를 작성할 수 있습니다.

플랫 파일에서 작동하려면 클래스 FileDataWrapper implements DataWrapper을 구현하면됩니다. 여기서 클래스 FileDataWrapper는 데이터 소스에서 수행 할 수있는 작업을 구현합니다. 나중에 데이터베이스로 변경하면 DatabaseDataWrapper implements DataWrapper 클래스를 구현하기 만하면됩니다.

관련 문제