재구성은 무섭지 않아요.


무엇이 재구성입니까?
이 문제의 답안은 네가 전체 과정을 이해하는 데 매우 중요하다.재구성은 코드를 바꾸는 것이지 기능을 바꾸는 것이 아니다.
겸사겸사 여쭙겠습니다. 제가 말한 것은 과정입니까?네, 해냈습니다. 이것은 지속적인 과정이기 때문에 우리는 이 점을 자주 잊어버립니다.최근에 나는 우리 회사의 한 프로그래머 동료에게 물었다. "그럼 어떻게 개발 과정과 재구성을 통합합니까?"그는 "매번 돌진한 후에 우리는 재구성할 시간이 있다"고 말했다.그렇다면, 왜 이것은 나쁜 방법입니까?완전한 sprint 이후에, 너는 모든 기능을 작성할 때처럼 그렇게 많은 상하문이 없기 때문이다.너는 반드시: 코드를 읽고, 코드를 이해하고, 다른 기능으로 전환하고, 중복해야 한다.이 새로운 것들을 작성할 때 얼마나 효율적일지 생각해 봐라.
그래서 다시 한 번 강조하지만 재구성은 코드를 작성하는 것과 병행하는 과정이다!

우리는 왜 재구성해야 합니까?
답은 간단하다. 재구성은 미래의 원가를 절약할 수 있다.
점점 커지는 모든 항목도 갈수록 복잡해진다.만약 코드의 질이 복잡성에 부합되지 않는다면, 모든 사람들이 그것을 읽는 데 더 많은 시간을 들일 것이다.새로운 녹지 프로젝트라도 코드를 쓰거나 읽는 비율은 30%/70%일 수 있다(더 큰 프로젝트에서는 5%/95% 정도로 상승할 수 있다).70% 를 최적화하고 팀원 수를 곱하면 엄청난 절약을 가져올 수 있다.지금, 당신의 코드를 더욱 읽을 수 있게 하는 것이 미래에 큰 도움이 될 것이라고 생각하지 않습니까?

어떻게 재구성합니까?
새로운 기능을 실현하고 있으며, 새로운 클래스를 만들어서 작업을 처리하고 있다고 가정하십시오.학급 규모가 확대됨에 따라 너는 더욱 많은 결점을 보게 될 것이다.너는 어떻게 그것들을 발견할 수 있니?결백한 코드로 구출!
  • 함수 길이는 대략 7-20행 코드여야 한다.아니에요.특정한 경우, 이 점을 실현할 수 없지만, 명명할 수 있는 코드 줄을 발견할 때, 그것들을 새로운 함수로 추출하기만 하면 된다. (if,while 등을 전체 줄로 계산하지 않고 주체만 계산할 수 있다.)
  • 함수 매개 변수는 약 3개의 매개 변수를 포함해야 한다.이상적인 상황에서, 당신은 0 파라미터를 사용하고 싶을 뿐만 아니라, 모든 데이터는 클래스의 속성에서 추출될 것입니다.항상 가능한 것은 아니니 적어도 세 개는 넘지 않도록 하세요.
  • 클래스 길이는 약 150줄 코드여야 합니다.왜?SOLID Single Responsibility Principle 를 깨뜨릴 가능성이 높기 때문이다. 한 종류는 한 가지 일만 해야 하고, 잘 해야 하기 때문이다.
  • 눌린 흔적의 깊이는 약 2급이다.명확하게 보기 위해서 우리는 예를 하나 들자.
  • public void doSomething() {
        while(conditionIsMet()) {
            if (anotherConditionIsMet()) {
                doSomeLogic();
            }
        }
    }
    
    이 점을 뛰어넘지 마라, 너는 갈 수 있다.더 깊이 들어가려면 - 함수를 추출해!
  • 함수 이름에 단어 and를 사용해야 한다면 문제가 있습니다.다시 Single Responsibility Principle의 고체.
  • 변수와 함수를 추출할 때마다 그 용도에 대한 명확한 정보를 제공할 수 있습니다.특히 순환체를 함수로 추출하고 숫자/문자열 문자를 상수로 추출합니다!
  • 이전:
      product.grossValue = product.price * 1.23;
    
    다음:
    product.grossValue = calculateGrossValue(product.price);
    
    public double calculateGrossValue(int productPrice) {
      return productPrice * PRODUCT_FEE;
    }
    

  • 추출 조건을 통해 조건을 간소화하다.이전과 유사하지만, 현재 우리는if,while,for문장 등의 조건을 겨냥하고 있다
  • 이 특정 장면에서if문장의 조건이 무엇인지 쉽게 알 수 있다
    if (!inventory.cars.isEmpty()) {
      doSomething();
    }
    
    그런데 얘가 더 읽기 쉬워지지 않아요?
    if (carsInInventoryNotEmpty()) {
      doSomething();
    }
    
    private boolean carsInInventoryNotEmpty() {
      return !inventory.cars.isEmpty();
    }
    
  • 코드 중복은 절대 허용되지 않습니다!만약 한 곳에서 오류가 발생한다면, 다른 곳을 덮어써야 하며, 그 중 하나를 놓칠 수도 있다.반대로 추출할 수 있는 스마트 추상을 찾아라.Design patterns는 곤경에서 벗어나는 데 매우 도움이 된다.
  • 리뷰를 사용하지 마십시오.반대로 함수와 변수를 더 잘 명명하려고 시도합니다.TODO, FIXME (Master branch에 있지는 않지만), 특수한 상황만 논평할 수 있습니다. 이 경우, 메커니즘이 아니라 자신의 의도를 설명해야 합니다.
  • 이것들은 나의 코드를 깔끔하고 질서정연하게 유지하기 위한 경험의 법칙이다.너는 밥 아저씨의 책이나 인터넷상의 많은 다른 자원에서 다른 규칙을 이해할 수 있다.
    read more도 볼 수 있고, 코드를 개선하기 위해 더 많은 도구를 볼 수 있다.가장 기본적인 재구성도 IDE에서 제공해야 한다.가능한 한 그것을 사용하라. 왜냐하면 당신의 IDE는 지능적이기 때문이다. 만약 그것이 어떤 것도 파괴한다면, 그것은 당신을 재구성하지 못하게 할 것이다.
    catalog of refactorings
    요약
    재구성된 이념은 매사를 동시에 완벽하게 만드는 것이 아니다.반대로 코드에 긍정적인 영향을 미치는 작은 변화를 많이 하고 싶어요.매번 당신이 변화를 할 때마다 나 자신에게 물어봐라. 나와 다른 이런 상황을 만날 수 있는 사람들이 더 쉽게 이해할 수 있을까?만약 답이 긍정적이라면, 너는 그것을 보류해야 한다.
    기억해라, 너는 기계가 아닌 인간을 위해 코드를 생성한 것이다.네, 할 수 있어요.
    당신은 이 화제에 대해 어떤 견해를 가지고 있습니까?댓글로 최고의 실천 공유!

    좋은 웹페이지 즐겨찾기