책의 항목 22와 41 사이의 명백한 모순을 살펴보겠습니다.
항목 22: "유형을 정의하고 싶지 않다면 인터페이스를 사용하지 마세요."
이 항목은 실제 유형이나 구체적인 기능을 나타내지 않는 것에 대해 인터페이스를 사용해서는 안 됨을 시사합니다. 예를 들어 단지 상수를 저장하기 위해 인터페이스를 사용하는 것은 좋은 습관이 아닙니다. 클래스가 구현해야 하는 계약이나 동작을 정의하려면 인터페이스를 사용해야 합니다.
항목 41: “정말로 유형을 정의하려면 인터페이스를 사용하세요.”
이 항목은 인터페이스, 특히 마커 인터페이스를 사용하여 컴파일 타임에 확인할 수 있는 방식으로 클래스를 분류하거나 표시하는 유형을 정의하는 방법에 대해 설명합니다. 마커 인터페이스는 메소드를 정의하지 않지만 컴파일 타임에 클래스의 동작을 확인하는 데 사용할 수 있는 논리 유형을 정의합니다.
항목 조정
두 항목을 이해하는 핵심은 유용한 유형을 정의하는 것과 인터페이스를 적절하게 사용하는 것의 차이입니다.
항목 22에서는 특정 기능이나 관련 동작이 없는 항목에는 인터페이스를 사용하지 말라고 나와 있습니다. 클래스가 따라야 하는 명확한 계약을 정의하려면 인터페이스를 사용해야 한다는 아이디어입니다.
항목 41에서는 특정 목적을 위해 클래스를 분류하거나 표시하고 컴파일 시간 확인에 사용할 수 있는 유형을 정의하려는 경우 인터페이스(마커 포함)를 사용할 것을 권장합니다.
실용적 적용
항목 22: 다음을 피하세요.
public interface Constants { String SOME_CONSTANT = "value"; int ANOTHER_CONSTANT = 42; }
이것은 유형이나 동작을 정의하지 않습니다. 이는 단지 상수의 컨테이너일 뿐이며 이는 인터페이스를 잘못 사용하는 것입니다.
항목 41: 인터페이스를 사용하여 유형을 표시하세요.
public interface PhysicalProduct { // Interface marcadora sem métodos } public class Book implements PhysicalProduct { // Implementação da classe que indica que é um produto físico }
여기서 PhysicalProduct 인터페이스는 배송 계산과 같은 특정 목적으로 확인하고 사용할 수 있는 논리적 유형을 정의하여 실제 제품만 고려되도록 합니다.
결론
두 항목 모두 인터페이스를 적절하게 사용하는 방법과 시기에 대한 지침을 제공하여 서로를 보완합니다. 전제는 동작을 정의하는 메서드를 통해서든, 논리적이고 유용한 방식으로 클래스를 분류하는 마커로든 인터페이스를 사용하여 의미 있는 유형과 명확한 계약을 정의해야 한다는 것입니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3