코드 냄새 11 - 코드 재사용을 위한 하위 분류

8382 단어 tutorialoopcodenewbie
코드 재사용이 좋습니다. 그러나 서브클래싱은 정적 결합을 생성합니다.

요약: 상속보다 구성을 선호합니다. 언제나. 기간.

문제


  • 커플링
  • 유지 보수 용이성

  • 솔루션


  • 구성을 부탁합니다.

  • 예외


  • 계층 구조가 원칙을 따르면 안전합니다.

  • 샘플 코드



    잘못된




    public class Rectangle {
    
        int length;
        int width;
    
        public Rectangle(int length, int width){
            length = length;
            width = width;
        }
    
        public int area(){
            return length * width;
        }
    }
    
    public class Square extends Rectangle {
    
         public Square(int size){
            super(size, size); 
        }
    
        public int area(){
            return length * length;
        }
    }
    
    public class Box extends Rectangle{    
    
    }
    

    오른쪽



    abstract public class Shape{
    
        abstract public int area();
    }
    
    public final class Rectangle extends Shape {
    
        int length;
        int width;
    
        public Rectangle(int length, int width){
            length = length;
            width = width;
        }
    
        public int area(){
            return length * width;
        }
    }
    
    public final class Square extends Shape {
    
         int size;
    
         public Square(int size){
            size = size; 
        }
    
        public int area(){
            return size * size;
        }
    }
    
    public final class Box {
    
        Square shape;
    
        public Box(int size){
            shape = new Square(size); 
        }
    
        public int area(){
            return shape.area();
        }
    }
    

    발각


  • 구체적인 메서드를 서브클래싱할 때 재정의하면 경고가 발생할 수 있습니다.
  • 깊은 계층 구조(3개 이상의 수준)도 잘못된 하위 분류의 단서입니다.

  • 태그


  • 구성

  • 결론



    레거시 시스템에서는 Deep Hierarchies 및 메서드 재정의가 매우 일반적이므로 이를 리팩터링하고 구현적인 이유가 아닌 본질적인 이유로 하위 클래스를 분류해야 합니다.

    처지







    더 많은 정보


  • Liskov Substitution

  • 학점



    사진 제공: Brandon Green on Unsplash


    이 기사는 CodeSmell 시리즈의 일부입니다.




    최종 업데이트: 2021년 6월 15일

    좋은 웹페이지 즐겨찾기