techbook-study / reading-after-work

Day By Day Reading a Book
0 stars 0 forks source link

2023-06-19 퇴근 후 독서 #9

Closed OikimiO closed 1 year ago

OikimiO commented 1 year ago

객체와 자료구조(P118)

public class Rectangle implements Shape{ private Point topLeft; private double height; private double width;

public int area(){ return width*height; } } ..

- Square, Rectangle 객체는 area()라는 다형성 메서드를 상속받아 그 안의 내용을 구현합니다. 
- class마다 area의 내용은 변경될 수 있으며, Square과 Rectangle의 area를 제외한 나머지 메서드는 접근할 수 없게 됩니다. 

<br/>

- 반대로 자료 구조는 모든 값을 열어두고 필요에 따라 내부에 있는 변수를 공개해 사용하도록 합니다. 
```java
public class Square{
  private Point topLeft;
  private double side;
}

public class Rectangle{
  private Point topLeft;
  private double height;
  private double width;
}

public class Geometry{
  public final double PI = 3.1314;

  public double area(Object shape) throws NoSuchShapeException{
    if(Shape instanceof Square){
      Square s = (Square)shape;
      return s.side * s.side;
    }
    ...
  }
}


limyohwan commented 1 year ago

리팩터링

  1. 리팩터링은 코드의 성능을 향상 시키는 것이 아니라 코드를 다루기 쉽게 만들어 성능 최적화 단계에서 튜닝을 잘할 수 있게 만들어 주는 것임

  2. 코드에서 나는 악취 목록 기이한 이름, 중복코드, 긴 함수(메서드 라인이 김), 긴 매개변수 목록, 전역 데이터, 가변 데이터, 뒤엉킨 변경(srp를 지키지 않음), 산탄총 수술(비슷한 함수끼리 묶기), 기능 편애, 데이터 뭉치, 기본형 집착, 반복되는 switch문, 반복문, 성의없는 요소, 추측성 일반화, 임시 필드, 메시지 체인, 중개자, 내부자 거래, 거대한 클래스, 서로 다른 인터페이스의 대안 클래스들