JavaRush /Java Blog /Random-KO /로버트 마틴, 클린 코드. 개발자를 위한 "쿵푸 코드"에 관한 책 리뷰
Artem Murk
레벨 35
Днепр

로버트 마틴, 클린 코드. 개발자를 위한 "쿵푸 코드"에 관한 책 리뷰

Random-KO 그룹에 게시되었습니다
안녕하세요 Javarashevites! 이 글은 로버트 마틴(Robert Martin)의 『클린 코드(Clean Code)』라는 책에 대한 리뷰입니다. 우리는 함께 코드를 개선하고 최적화하는 방법을 살펴보고 마지막에는 작지만 흥미로운 작업이 여러분을 기다립니다.
로버트 마틴의 '클린 코드'.  개발자를 위한 "쿵푸 코드" 책 리뷰 - 1
매일 코드 편집기를 열면 수많은 클래스, 함수, 변수를 접하게 됩니다. 가장 좋은 방법은 코드가 처음부터 작성되고, 한 번 작성되었으며, 줄이 거의 없고, 혼자 작업하고, 편집이 없고 고객의 추가 지원이 없는 경우입니다. 하지만! 실습에서 알 수 있듯이, 이런 일이 일어나지 않는다는 것을 귀하도 이해하고 있다고 생각합니다. 기본적으로 우리는 어떻게든 우리 팀 구성원들과 상호 작용하고 "힌두" 코드를 유지하며 제품을 수백만 줄로 구문 분석해야 합니다. 저는 훈련 동료들로부터 “이 코드는 제가 작성한 것이므로 누구에게도 보여주지 않을 것입니다”라는 답변을 자주 들었습니다. 그러나 이러한 코드에 대한 도움말 요청을 보면 매우 오랜 시간이 걸립니다. 깊이 파고들고 이해하는 시간(때때로 정말 긴 시간) 그 사람이 나에게 무엇을 말하고 싶었는지, 나는 심지어 "지우고 다시 써라"라고 말하고 싶다! 당신을 돕고 싶어하는 사람들의 시간과 에너지에 감사하고, 올바르게 글을 쓰십시오. 방법을 모른다면 배우기에 너무 늦지 않았습니다. Robert Martin의 책은 Java로 된 많은 예제를 포함하고 있다는 점에서 이러한 형식의 책 중에서 단연 돋보입니다. 이것은 내 입장에서는 다소 광신적인 진술일 수도 있지만 OOP 스타일, 즉 부분과 섹션을 작성하는 방식으로 작성되었습니다. 이해하기 쉽고 읽기 쉬우며, 이동 중에도, 저녁 잠자리에 들기 전에도 쉽게 읽을 수 있는 책입니다. 클린코드는 3부분으로 나누어져 있습니다. 첫 번째 부분에서는 책의 이론을 살펴보고 디자인 패턴과 예절의 규칙에 대해 배우도록 요청받습니다. 두 번째 부분은 리팩토링과 작성을 연습하도록 유도하고, 세 번째 부분은 예제의 "냄새" 코드에 대한 최종 요약입니다. 글쎄, 저자는 주로 Java Core에 대한 지식이 필요한 많은 주제를 다루었지만 JUnit 단위 테스트, Log4j 로깅, 디자인의 가장 간단한 패턴에 대한 지식을 다루는 섹션도 있습니다(그러나 위에서 말했듯이 그 중 많은 부분이 있으며 이해할 수 없는 모든 내용은 성공적으로 검색할 수 있습니다. 예, JavaRush 과정에서 분석할 수 있습니다. 책의 모든 장은 서로 연결되어 있지 않으므로 원하는 장부터 성공적으로 읽기 시작할 수 있습니다. 책에서 얻은 주요 아이디어를 간략하게 요약합니다. 이 진술에 대한 귀하의 비전을 공유할 수 있는 귀하의 의견에 감사드립니다.

1. 댓글 == 악.

대부분의 경우 주석은 잘못된 코드를 가리기 위한 수단입니다. 그리고 어떤 경우에는 지속적인 코드 리팩토링이 있는 경우 메서드나 변수의 목적에 대해서도 거짓말을 합니다.

2. 주석 처리된 코드, 데드 코드.

애플리케이션에 이러한 코드 조각을 남겨 두는 것은 쓰레기와 같습니다. 사용되지 않는 코드는 시간이 지남에 따라 누적되어 애플리케이션의 청결성을 방해합니다. 때때로 해당 모듈의 코드를 확인하십시오.

3. 메소드, 클래스 및 변수의 제목.

이 주제에 대해 논의하려면 별도의 기사를 읽어볼 가치가 있습니다. 게으르지 말고 목적을 알 수 있는 이름을 쓰세요. 제목 철자법의 몇 가지 표준을 알아보세요. 이 주제는 자세한 연구를 위해 "필수"입니다.

4. 각 메소드와 변수는 클래스 계층 구조에서 해당 위치를 갖습니다.

일반적으로 클래스에는 변수와 메서드(정적 및 비정적), 생성자, 중첩 및 내부 클래스, 열거형이 포함될 수 있습니다. 간단히 말해서 정보가 너무 많아서 수업에서 모든 사람의 위치를 ​​결정하는 것이 필요합니다. Java 코어 클래스를 보면 구조가 명확하게 구성되어 있고 각 부분이 해당 위치에 있음을 알 수 있습니다. 물론 프로젝트에서는 프로젝트 내에서 변경할 수 있지만 각 클래스에서는 변경할 수 없습니다. 나 자신을 위해 다음과 같은 구성 구조를 정의했습니다. 클래스 시작 부분에는 정적 변수가 있고, 그 다음에는 개체 변수 + Enum이 있습니다. 변수 뒤에는 클래스 생성자를 정의합니다. 그런 다음 수업과 함께 작업하기 위한 메서드를 작성합니다. 메소드 다음에 getter와 setter를 작성합니다. 그리고 마지막에는 내부 수업이 있습니다. 내 구조를 사용하거나 댓글에 직접 작성할 수 있습니다.

5. 메소드의 추상화 수준.

나에게 이것은 최고의 발견이었습니다. 각 메서드에는 한 가지 추상화 수준의 연산자만 포함됩니다. 다단계 작업을 함께 혼합하면 안 됩니다.

6. 오류 처리.

프로젝트에서 사용하는 것이 더 나은 확인된 예외 또는 확인되지 않은 예외(의견 작성)? 나는 Checked의 지지자이지만, 이 책은 Unchecked Exceptions를 외부에서 바라볼 수 있도록 도와줍니다. 실제로 확인되지 않은 예외는 특히 예외가 한 번에 여러 레이어를 "관통"한다는 점을 고려하면 메서드 시그니처를 손상시키지 않습니다. 가장 작은 변경으로 인한 불편함은 이를 포착하기 전에 전체 메서드 체인을 재정의하게 되므로 많은 경우 개발에 매우 ​​불편합니다.

7. 코드 형식화.

올바른 형식의 코드는 명확할 뿐만 아니라 가독성도 높습니다. 대괄호와 내부 동작에 대한 아이디어를 즉시 얻을 수 있습니다. if, else 구문의 조건 예를 사용하면 모든 것을 한 줄에 작성해서는 안 되며 긴 체인을 이동하는 것이 좋습니다.

8. 조건의 부정.

조건에서 거부를 피하려고 노력하십시오. 이것은 심리적 요인에 더 가깝고 우리 뇌는 거부를 잘 인식하지 못합니다. 그렇습니다! 그 표현이 눈에 띄지 않을 수도 있습니다. 예를 들어, 메서드를 다시 작성하는 것이 if(!condition.isTrue)를 부정하는 것이 더 낫다면 다음과 같이 훨씬 쉽게 만들 수 있습니다(condition.isFalse).

9. 함수는 하나의 작업을 수행해야 합니다.

메서드가 많은 작업을 수행하는 경우 단일 작업 메서드로 나눕니다. 이러한 방법은 지원하기가 매우 쉽고, 테스트하기 쉬우며, 필요한 경우 교체하거나 제거할 수 있습니다.

10. 같은 말을 반복하지 마세요.

DRY 코드를 반복하지 마십시오(자신을 반복하지 마십시오). 이는 코드를 크게 줄이는 기본 규칙 중 하나이므로 명심하세요. 반복되는 모든 코드 조각을 별도의 함수에 넣으십시오. 물론 DRY, KISS(Keep it simple Stupid), SOLID , YAGNI에 대해 더 많이 이야기할 수 있습니다. 이러한 용어는 이해와 설계에 필수적입니다. 이 기사는 "Clean Code"라는 책에 대한 리뷰를 다루고 있기 때문에 별도의 기사로 작성할 가치가 있습니다. 아마도 이에 대해 다시 쓸 것입니다.
로버트 마틴의 '클린 코드'.  개발자를 위한 "쿵푸 코드" 책 리뷰 - 2
약속대로 작고 쉬운 작업입니다. 프로그램은 주어진 데이터를 기반으로 비만 지수를 계산해야 합니다. 코드의 오류 및 수정 사항 수를 주석에 적어주세요. 추신 코드가 작동 중이며 올바르게 사용되면 해당 기능을 수행합니다.
//Weight in kg.
//Height in metres.
public class sample {
    public static void main (String[] args) {
        humanIMB humanIMB = new humanIMB(80,1.52);
        System.out.println(humanIMB.Result());
    }
}
class humanIMB {
    public double W; //Weight Human
    public double H; // Height Human
    private static double imb;
    public humanIMB(double w, double h) {
        W = w;
        H = h;
        imb = W / (H * H);
    }
    public double takeW() {
        return W;
    }
    public void putW(double w) {
        W = w;
        imb = W / (H * H);
    }
    public double takeH() {
        return H;
    }
    public void putH(double h) {
        H = h;
        imb = W / (H * H);
    }
    public static double takeImt() {
        return imb;
    }
    public static String Result() {
        String  string = null;
        if (imb >=18.5 & imb <25) {
            string ="Норма, ты в форме!";
        }
        if (imb >=25 & imb <30) {
            string ="Предожирение. Эй, поосторожнее с пирожными ";
        }
        if (imb >=30) {
            string ="Ожирение. SCHWEINE! Хватит жрать, иди на треню!";
        }
        if (imb <18.5) {
            string ="Дефицит массы тела. В модели решил переквалифицироваться?";
        }
        return string;
    }
}
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION