[개발] 클린코드(Clean Code)
-
클린 코드 작성의 중요성과 팁 소프트웨어 개발에서 클린 코드는 필수적인 요소입니다. 깨끗하고 명확한 코드는 유지보수성을 높이고, 협업을 원활하게 하며, 버그 발생을 줄이는 데 중요한 역할을 합니다. 특히 대규모 프로젝트나 여러 개발자가 협업하는 환경에서는 클린 코드의 중요성이 더욱 강조됩니다. 이 글에서는 클린 코드의 중요성과 클린 코드를 작성하기 위한 구체적인 팁들을 소개하겠습니다. 클린 코드의 중요성 1. 유지보수성 향상 클린 코드는 읽기 쉽고 이해하기 쉬운 코드를 의미합니다. 코드의 가독성이 높을수록 다른 개발자가 코드를 이해하고 수정하기가 용이합니다. 이는 개발자 간의 협업을 원활하게 하고, 코드의 수명을 연장시킵니다. 유지보수가 어려운 코드는 시간이 지남에 따라 기술..
[코딩] 클린 코드 작성의 중요성과 팁클린 코드 작성의 중요성과 팁 소프트웨어 개발에서 클린 코드는 필수적인 요소입니다. 깨끗하고 명확한 코드는 유지보수성을 높이고, 협업을 원활하게 하며, 버그 발생을 줄이는 데 중요한 역할을 합니다. 특히 대규모 프로젝트나 여러 개발자가 협업하는 환경에서는 클린 코드의 중요성이 더욱 강조됩니다. 이 글에서는 클린 코드의 중요성과 클린 코드를 작성하기 위한 구체적인 팁들을 소개하겠습니다. 클린 코드의 중요성 1. 유지보수성 향상 클린 코드는 읽기 쉽고 이해하기 쉬운 코드를 의미합니다. 코드의 가독성이 높을수록 다른 개발자가 코드를 이해하고 수정하기가 용이합니다. 이는 개발자 간의 협업을 원활하게 하고, 코드의 수명을 연장시킵니다. 유지보수가 어려운 코드는 시간이 지남에 따라 기술..
2024.06.24 -
1. 클래스는 작아야 한다!클래스를 만들 때 첫 번째 규칙은 크기다. 클래스는 작아야 한다. 두 번째 규칙도 크기다. 더 작아야 한다. 2. 단일 책임 원칙단일 책임 원칙 Single Responsibility Principle, SRP은 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야 한다는 원칙이다. SRP는 '책임'이라는 개념을 정의하며 적절한 클래스 크기를 제시한다. 클래스는 책임, 즉 변경할 이유가 하나여야 한다는 의미다. 3. 개방 폐쇄 원칙OCP Open-Closed Principle 란 클래스는 확장에 개방적이고 수정에 폐쇄적이어야 한다는 원칙이다.새 기능을 수정하거나 기 존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다. 이상적인 시스템이라면 새 기능을 추가할 때..
클린 코드 대신 읽어드립니다 _ 10. 클래스(정리, 요약, 후기)1. 클래스는 작아야 한다!클래스를 만들 때 첫 번째 규칙은 크기다. 클래스는 작아야 한다. 두 번째 규칙도 크기다. 더 작아야 한다. 2. 단일 책임 원칙단일 책임 원칙 Single Responsibility Principle, SRP은 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야 한다는 원칙이다. SRP는 '책임'이라는 개념을 정의하며 적절한 클래스 크기를 제시한다. 클래스는 책임, 즉 변경할 이유가 하나여야 한다는 의미다. 3. 개방 폐쇄 원칙OCP Open-Closed Principle 란 클래스는 확장에 개방적이고 수정에 폐쇄적이어야 한다는 원칙이다.새 기능을 수정하거나 기 존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다. 이상적인 시스템이라면 새 기능을 추가할 때..
2024.02.16 -
1. TDD 법칙 세 가지 첫째 법칙 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 둘째 법칙 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 셋째 법칙 : 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 2. 깨끗한 테스트 코드 유지하기 테스트 코드 깨끗해야하는 이유는 결국 유지보수성? 실제 코드가 진화하면 테스트 코드도 변해야 한다. 그런데 테스트 코드가 지저분할수록 변경하기 어려워진다. 테스트 슈트가 없으면 개발자는 자신이 수정한 코드가 제대로 도는지 확인할 방법이 없다. 테스트 슈트가 없으면 시스템 이쪽을 수정해도 저쪽이 안전하다는 사실을 검증하지 못한다. 3. 테스트는 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 ..
클린 코드 대신 읽어드립니다 _ 9. 단위 테스트(정리, 요약, 후기)1. TDD 법칙 세 가지 첫째 법칙 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 둘째 법칙 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 셋째 법칙 : 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 2. 깨끗한 테스트 코드 유지하기 테스트 코드 깨끗해야하는 이유는 결국 유지보수성? 실제 코드가 진화하면 테스트 코드도 변해야 한다. 그런데 테스트 코드가 지저분할수록 변경하기 어려워진다. 테스트 슈트가 없으면 개발자는 자신이 수정한 코드가 제대로 도는지 확인할 방법이 없다. 테스트 슈트가 없으면 시스템 이쪽을 수정해도 저쪽이 안전하다는 사실을 검증하지 못한다. 3. 테스트는 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 ..
2024.02.08 -
1. 오류 코드보다 예외를 사용하라 오류가 발생하면 예외를 던지는 편이 낫다. 그러면 호출자 코드가 더 깔끔해진다. 논리가 오류 처리와 뒤섞이지 않으니까. 예시 2. Try-Catch-Finally 문부터 작성하라 예외에서 프로그램 안에다 범위를 정의한다는 사실은 매우 흥미롭다. try-catch-finally문에서 try블록에 들어가는 코드를 실행하면 어느 시점에서든 실행이 중단된 후 catch 블록으로 넘어갈 수 있다. 어떤 면에서는 try 블록은 트랜잭션과 비슷하다. try 블록에서 무슨 일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다. 그러므로 예외가 발생할 코드를 짤 떄는 try-catch-finally 문으로 시작하는 편이 낫다. 그러면 try 블록에서 무슨 일이 생..
클린 코드 대신 읽어드립니다 _ 7. 오류 처리 (정리, 요약, 후기)1. 오류 코드보다 예외를 사용하라 오류가 발생하면 예외를 던지는 편이 낫다. 그러면 호출자 코드가 더 깔끔해진다. 논리가 오류 처리와 뒤섞이지 않으니까. 예시 2. Try-Catch-Finally 문부터 작성하라 예외에서 프로그램 안에다 범위를 정의한다는 사실은 매우 흥미롭다. try-catch-finally문에서 try블록에 들어가는 코드를 실행하면 어느 시점에서든 실행이 중단된 후 catch 블록으로 넘어갈 수 있다. 어떤 면에서는 try 블록은 트랜잭션과 비슷하다. try 블록에서 무슨 일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다. 그러므로 예외가 발생할 코드를 짤 떄는 try-catch-finally 문으로 시작하는 편이 낫다. 그러면 try 블록에서 무슨 일이 생..
2024.02.02 -
1. 디미터 법칙 디미터 법칙은 잘 알려진 휴리스티heuristic으로, 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다. 객체는 자료를 숨기고 함수를 공객한다. 즉, 객체는 조회 함수로 내부 구조를 공개하면 안 된다는 의미다. 디미터 법칙 위반의 예 final String outputDir = ctxt.getOptions().getScratchDir().getAboslutePath(); : getOptions() 함수가 반환하는 객체의 getScratchDir() 함수를 호출한 후 getScratchDir() 함수가 반환하는 객체의 getAbsoutePath() 함수를 호출하기 때문이다. 2. 기차 충돌 흔히 위와 같은 코드를 기차 충돌 train wreck이라 부른다. 여러 객차가 한 ..
클린 코드 대신 읽어드립니다 _ 6. 객체와 자료 구조 (정리, 요약, 후기)1. 디미터 법칙 디미터 법칙은 잘 알려진 휴리스티heuristic으로, 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다. 객체는 자료를 숨기고 함수를 공객한다. 즉, 객체는 조회 함수로 내부 구조를 공개하면 안 된다는 의미다. 디미터 법칙 위반의 예 final String outputDir = ctxt.getOptions().getScratchDir().getAboslutePath(); : getOptions() 함수가 반환하는 객체의 getScratchDir() 함수를 호출한 후 getScratchDir() 함수가 반환하는 객체의 getAbsoutePath() 함수를 호출하기 때문이다. 2. 기차 충돌 흔히 위와 같은 코드를 기차 충돌 train wreck이라 부른다. 여러 객차가 한 ..
2024.02.02 -
형식을 맞추는 목적 - 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다. 1) 세로 밀집도 - 줄바꿈이 개념을 분리한다면 세로 밀집도는 연관성을 의미한다. 즉, 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다는 뜻이다. 2) 변수 선언 - 변수는 사용하는 위치에 최대한 가까이 선언한다. 3) 종속 함수 - 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다. 또한 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다. 그러면 프로그램이 자연스럽게 읽힌다. 규칙을 일관적으로 적용한다면 독자는 방금 호출한 함수가 잠시 후 정의될리라는 사실을 예측한다. 4) 들여쓰기 무시하기 - 때로는 간단한 if문, 짧은 while문, 짧은 함수에서 들여쓰기 규칙을 무시하고..
클린 코드 대신 읽어드립니다 _ 5. 형식 맞추기 (정리, 요약, 후기)형식을 맞추는 목적 - 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다. 1) 세로 밀집도 - 줄바꿈이 개념을 분리한다면 세로 밀집도는 연관성을 의미한다. 즉, 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다는 뜻이다. 2) 변수 선언 - 변수는 사용하는 위치에 최대한 가까이 선언한다. 3) 종속 함수 - 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다. 또한 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다. 그러면 프로그램이 자연스럽게 읽힌다. 규칙을 일관적으로 적용한다면 독자는 방금 호출한 함수가 잠시 후 정의될리라는 사실을 예측한다. 4) 들여쓰기 무시하기 - 때로는 간단한 if문, 짧은 while문, 짧은 함수에서 들여쓰기 규칙을 무시하고..
2024.01.26