함수와 함께 동사를 사용하고 클래스와 함께 명사-인터페이스는 어떻습니까? [닫은]


23

좋아, 함수에 동사를 사용하고 클래스에 명사를 사용하는 일반적인 규칙을 이해합니다. 인터페이스는 어떻습니까? 명확하지 않을 수있는 인터페이스 이름을 제시 할 때 어떤 방법론이 있습니까?

분명히하기 위해 이름 앞에 "I"를 넣을 것인지, camelCase 또는 PascalCase를 사용할 것인지에 대해서는 이야기하지 않습니다. 인터페이스의 명확하고 의미있는 이름을 찾는 방법이 궁금합니다.

편집 가장 명확한 방법으로 인터페이스 이름을 지정하는 방법에 집착하고 있습니다. 클래스 이름을 생각할 때 관련 될 수있는 가장 가까운 "실제"세계 객체를 생각하기 때문에 명사 일 필요가 있습니다. 실제 인터페이스는 키보드, 마우스, 리모컨, ATM 화면과 같은 것으로 생각합니다. 그것들은 모두 명사입니다. 어쨌든 인터페이스 이름을 공식화하는 좋은 방법에 대한 추가 통찰력은 높이 평가 될 것입니다.


2
흠 .. 제목을 바탕으로, 이것은 프로그래밍과 영어 사이의 연설 부분을 동일시하는 것이라고 생각했습니다. 이 경우 madlibs 가 가능해 보입니다.
이즈 카타

클래스를 만들 때 해당 클래스에 의해 인스턴스화 된 객체에 대한 인터페이스도 생성한다는 점을 기억하십시오. 또는 다른 방법으로 클래스를 구현하려면 인터페이스 가 구현 됩니다. 따라서 동일한 명명 규칙을 사용해야합니다.
Daniel T.

또한 IMHO "함수에 동사 사용"은 너무 일반적입니다. 명령 에는 동사를 사용 하고 쿼리에는 명사를 사용해야 합니다 .
Daniel T.

답변:


21

인터페이스가 정의한 내용에 따라 다릅니다. 인터페이스가 다소 구체적이고 세부적인 경우에는 명사가 최선이라고 생각합니다. 예는 IList, ICollection입니다.

때로는 인터페이스가 클래스에 특정 일반 기능을 추가하는 것에 관한 것입니다. 이 경우 형용사 가 가장 좋다고 생각합니다 . 예는 IDisposable,, IEnumerable...

아마도 이것에 대해 생각할 수있는 또 다른 방법은 인터페이스가 정의하는 "능력"의 수입니다.

예를 들어, IList<T>인터페이스는 추가, 지우기, 포함, 삽입, 제거 등의 기능을 정의합니다. 이들은 목록의 모든 속성이므로 IList이름이 좋습니다.

IDisposable반면에 한 가지 능력 만 정의합니다 : 처분. 따라서 일회용품에 적합합니다. 따라서 이름 IDisposable입니다.


10
만약 당신의 인터페이스가 당신의 객체에 수행 될 수있는 것들 (예를 들어 IEnumerable)에 의해 명명된다면, "_able"형용사를 사용하는 것이 좋습니다. 예를 들어 IEqualityComparer), 그리고 인터페이스는 그 동작이 그것을 모방 일의 유형 (예를 들어 이름을 딴 경우 일반 명사 IList<T>).
supercat

@supercat의 코멘트가 실제로이 답변에 포함되어야합니다. 말이 되네요
Nikhil Vartak

실제로 인터페이스 이름 앞에 접두사가 붙습니다 I.
user1870400

5

인터페이스는 이름이 너무 말을해야하므로 동작을 설명합니다. 나는 이것에 대한 규칙에 대해 확신하지 못하지만들을 때 그 이름을 알게 될 것입니다.

몇 가지 예 :

Flyable      - Can Fly
Workable     - Can work
Negotiatable - Can negotiate.

개발자는 인터페이스인지 클래스인지 걱정할 필요 가 없기 때문에 인터페이스 이름을 지정 I하고 호출 Set하는 것이 적절하지 않다고 생각합니다 ISet. 나는이 관행이 지금 Java에 존재하지 않는 것을 본다.


+1 "개발자로서 인터페이스 나 클래스에 대해 걱정할 필요가 없습니다."
Kazark

"개발자로서 인터페이스인지 클래스인지 걱정할 필요가 없습니다"-인터페이스 인 경우 구현해야하는 멤버를 알아야하기 때문에 동의하지 않습니다.
Maximus Minimus

@MaximusMinimus로 접두사를 붙이면 I중복되지 않습니다. 그렇다면 왜 추상 클래스 앞에 A, 일반 클래스 C등을 붙이지 않겠습니까 ??
user1870400

@ user1870400-사실이지만, 내가 동의하지 않는 부분은 아닙니다.
Maximus Minimus

4

인터페이스는 실제로 유형의 "무엇"이 아닌 "어떻게"의 표현 일 뿐이므로 적어도 언어 관점에서 클래스 이름을 지정하는 것과 같은 방식으로 이름을 지정합니다. 여기에 추가 할 수있는 유일한 것은 특정 구현 자보다 더 일반적 일 것입니다 (예 : "고객"인터페이스에 "ProspectiveCustomer"및 "PayingCustomer"구현자가있을 수 있음).


0

인터페이스는 클래스처럼 사용됩니다. 따라서 명사로 클래스 이름을 지정할 때 명사로 이름을 지정해야합니다. 클래스가 "Car"및 "Truck"인 경우 "Vehicle"과 같은 추상 명사를 선호하십시오.


0

빠른 답변 : 인터페이스는 엔티티, 클래스, 모델, 개념 등의 기능, 기능, 공통 경계 또는 상호 연결 세트 에 대한 추가 정보입니다 .

클래스와 엔터티에 일반적인 동작을 추가 한 다음 의미있는 이름을 사용하여 실현 된 기능 집합을 식별합니다.

Interface Naming like : IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.아마도 개념을 설명하십시오.


1
예, 인터페이스는 계약 또는 기능을 나타냅니다. 너무 많이 알려져 있습니다. 그러나 이것이 어떻게 그것들의 이름을 짓는 지에 대한 질문에 어떻게 대답합니까? 그 점에서 실제로 말하는 것은 "그것을 생각하면 영감이 당신을 공격 할 것입니다."입니다. 예를 들어, 다음 이름 중 어떤 것을 선택해야하는지에 대한 권장 사항은 제공하지 않습니다. IStateMachineBuilder(명사), IBuildStateMachine(작업 ICanBuildStateMachine이름을 따서 명명 ), (기능 이름을 따서 명명) 등
stakx

0

인터페이스에 메소드 만 포함되어 있으면 "Actions"와 같은 동사를 사용하여 이름을 지정하는 것이 좋습니다. 여기서 일반 클래스 wchich에 static, final 필드가 포함 된 것처럼 "Vehicle"과 같은 일반 명사를 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.