문제

저는 지난 6 년간 Java 프로그래머로 일했으며 올해 초부터 게임 프로그래밍에 관심을 갖게되었습니다. 그래서 나는 인기있는 게임으로 시작하는 것이 좋은 생각이라고 생각했고 Java에서 Pac-Man Ms. Ms. Pac-Man을 구현했습니다. 내 구현은 원래 게임과 약 90% 유사하게 보이고 가능한 한 많은 디자인 패턴과 모범 사례를 사용하려고 노력했습니다. 왜냐하면 이것은 기본 2D 게임을 코딩하는 법을 배우는 개인 프로젝트 일뿐입니다.

이제 코딩을 마쳤으므로 19 개의 인터페이스와 17 개의 클래스가 있다는 것을 깨달았습니다! 그래서 나는 인터페이스를 과도하게 사용하고 있는지 궁금해하기 시작합니다.

다음은 내가 사용하는 몇 가지 클래스/인터페이스의 예입니다.

수업 - FullGame (FullGameInterface 및 FullGameObservable 구현)

수업 - View1 (FullGameObserver 구현)

상호 작용 - FullGameInterface (기본 기능 방법 : 이력서, 일시 정지, 재생 등)

상호 작용 - FullGameObservable (업데이트 알림을 위해 뷰를 등록 할 수 있습니다)

상호 작용 - FullGameObserver (알림을 받기 위해 게임의 두 가지 다른보기에 의해 구현 됨)

인터페이스를 과도하게 사용하고 있습니까?

당신의 의견 것입니다?

도움이 되었습니까?

해결책

인터페이스가 좋습니다. 많은 것을 갖는 것은 문제가되지 않습니다.

특히 첫 번째 게임 만 구현 한 경우. 더 많은 게임을 구축하기 위해 코드 기반을 재사용하면 인터페이스를 재사용하기 때문에 다형성이 더 많을 것입니다. 그러나이 시점에서 인터페이스보다 구현에 더 많은 방법이있는 경우 인터페이스가 목적을 제공하고 있습니다. 이에 따라 인터페이스를 준수 해야하는 클라이언트의 구현 세부 사항을 숨기고 있습니다. , oo의 진정한 이점 인 다형성을 가능하게합니다.

다른 팁

구현을 변경하려면 인터페이스를 사용하십시오.

FullGame 객체와 같은 경우 인터페이스가 필요하지 않을 것입니다.

FullGame의 기능을 변경하려면 인터페이스를 만드는 것을 고려하여 FullGameInterface를 위해 인스턴스화하는 객체를 전환 할 수 있습니다.

편집 2 : 필요할 때만 코드를 더 복잡하게 만듭니다. 인터페이스가 필요하다고 생각되면 먼저 중지하십시오. 이미 가지고있는 수업을 사용하십시오. (그러나 사용하는 동안 발신자를 구현 세부 정보에서 벗어나게하십시오.) 두 번째 유사한 클래스가 있으면 실제로 인터페이스와 구현이 무엇인지 알아낼 수 있습니다. 발신자가 여전히 공통 인터페이스에 넣기가 어색한 구현 세부 정보가 필요하다면, 당신은 그것들을 충분히 깨끗하게 분리하지 않습니다.

보다 완전한 답변을 보려면 편집 :

인터페이스는 실제 객체 (구현)에서 객체 (인터페이스)에 액세스하려는 메소드를 분리하는 데 유용합니다. 이것은 여러 상황에 좋습니다.

  1. 동일한 의미와 일반 운영이 있지만 다른 기본 구현을 통해 이러한 방법을 하나 이상 구현할 수 있습니다. 예를 들어, List, ArrayList, 그리고 LinkedList. List 많은 컬렉션 기반 방법을 수락 할 수있는 일반적인 인터페이스입니다. ArrayList 또는 a LinkedList. 그만큼 Collection 인터페이스는 모든 컬렉션에 대해 유사한 배열을 허용합니다.
  2. 건축상의 이유로 인터페이스를 구현과 분리해야합니다. 예를 들어, 한 컴퓨터에서 호출 객체와 다른 기계에 구현 객체를 가질 수 있습니다. 호출 기계의 프록시는 인터페이스를 구현하여 네트워크를 가로 질러 실제 객체로 호출합니다. 인터페이스는 발신자가 차이를 알 필요가 없음을 의미합니다. Java RMI 가이 작업을 수행했습니다.
  3. 객체가 호출되는 방식을 수정할 수 있어야합니다. 예를 들어 인터페이스를 사용하십시오 Image 그리고 두 개의 구현 자, FileImage 그리고 FileImageProxy. 프록시가로드됩니다 FileImage 주문형 및 통과 통과 Image 실제 객체와의 인터페이스. 고객은 이미지를 얻는 방법, 실제로로드되었는지 여부를 알지 못하거나 신경 쓰지 않습니다. 그들은 단지 거기 있다는 것을 알고 있습니다 Image 그리고 그들은 그것을 사용할 수 있습니다.

코드를 제어하고 하나의 구현 만있는 경우 인터페이스가 무의미하다는 것이 좋은 신호입니다 (예 : 테스트하고 싶을 때 유용 할 수도 있지만). 내부 수업도 수업이라는 것을 기억하십시오.

인터페이스의 여러 상속 및 구현은 일반적으로 나쁜 생각입니다.

나는 종종 인터페이스를 사용하여 내 디자인을 살펴 봅니다. 나는 그것들을 철저히 기록하고 이것은 내 수업의 책임을 통해 생각하게한다. API와 클래스 내부 내부 사이에는 항상 일부 차이가 있으므로 여러 구현 (아직)의 구현이 없더라도 일반적으로 인터페이스를 지정하는 것이 아프지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top