클린 코드(Clean Code)/좋은 코드, 나쁜 코드 요약
-
11장 - 단위 테스트의 실제클린 코드(Clean Code)/좋은 코드, 나쁜 코드 요약 2023. 12. 20. 00:01
테스트의 장점을 극대화하는 방법들 기능뿐만 아니라 동작을 시험하기 테스트만을 위해 퍼블릭으로 만들지 않기 한 번에 하나의 동작만 테스트하기 공유 설정을 적절하게 사용하기 적절한 assert 구문 활용하기 의존성 주입 활용하기 기능뿐만 아니라 동작을 시험하기 함수당 하나의 테스트 케이스만 있으면 적절하지 않을 때가 많습니다. 함수 단위로 테스트하는 것이 아니라 실제 행위에 대한 테스트를 수행하는 것이 좋습니다. 신뢰도를 높이기 위해 여러 가지 값과 경계 조건을 테스트하는 것도 좋습니다. 특정 라인을 삭제해도 테스트가 통과되는지, if문의 논리를 반대로 해도 상관없는지, 상수값이나 하드 코딩된 값을 변경해도 테스트가 통과하는지에 대해 변경해 보고 모든 동작이 잘 수행되는지 확인해 볼 수 있습니다. 또한 정상..
-
10장 - 단위 테스트의 원칙클린 코드(Clean Code)/좋은 코드, 나쁜 코드 요약 2023. 12. 19. 00:01
시스템이 멈추면 개발자 하는 유명한 말 딱 한 줄 고쳤는데요.. 코드 변경은 언제나 위험합니다. 테스트는 이런 수정에 대한 안정장치입니다. 단위 테스트라는 정의에 너무 크게 신경 쓸 필요 없습니다. 중요한 것은 코드를 잘 테스트하고 이 작업을 유지보수할 수 있는 방법으로 수행하는 점입니다. 형편없는 테스트는 아예 테스트가 존재하지 않는 경우이지만 테스트가 존재해도 좋은 테스트를 작성하는 것이 중요합니다. 좋은 단위 테스트 작성방법 훼손의 정확한 감지 세부 구현 사항에 독립적 잘 설명되는 실패 - 우리가 흔히 쓰는 assert구문을 쓰면 실패에 대한 설명을 명확하게 알 수 있다. 이해할 수 있는 테스트 코드 - 테스트 코드도 유지보수 해야 할 수 있기 때문에 읽기 쉽게 만들어야 한다. 쉽고 빠르게 실행 -..
-
9장 - 코드를 재사용하고 일반화할 수 있도록 하라클린 코드(Clean Code)/좋은 코드, 나쁜 코드 요약 2023. 12. 18. 00:01
재사용의 장점 향후에 재사용이 가능하도록 의도적으로 코드를 작성하고 구조화하는 것이 초기에 노력이 좀 더 필요할 수 있지만 장기적으로 보면 자신과 팀 동료들의 시간과 노력을 절약할 수 있습니다. 불필요한 가정 피하기 만약 getAllImages() 함수에서 비즈니스 규칙상 이미지가 하나만 있을 것이라고 가정하고 코드 작성자가 하나의 이미지만 찾아 반환한다면 사용하는 쪽에서는 모든 이미지를 가져올 것이라 가정했지만 하나의 이미지만 가져오게 됩니다. 오히려 이름을 getOnlyImageSection으로 주어 가정을 드러내거나 불필요한 가정을 하지 않는것이 좋습니다. 가정이 필요하다면 이점이 비용보다 큰지 잘 고려해야 합니다. 전역 상태를 주의하기 static 등의 키워드를 활용하여 공유 상태를 활용하고 싶을..
-
8장 - 코드를 모듈화하라클린 코드(Clean Code)/좋은 코드, 나쁜 코드 요약 2023. 12. 17. 00:01
모듈화의 목적 코드가 향후 어떻게 변경되거나 재구성될지 정확히 알지 못한 상태에서 변경과 재구성이 용이한 코드를 작성기 위함 모듈화를 잘 구성해 두면 요구사항 중 하나가 변경된다면, 해당 요구사항이나 기능에 관련된 부분만 수정하면 됩니다. 코드 모듈화를 잘하는 방법 의존성 주입 사용을 고려하기 인터페이스에 의존하기 상속보다는 합성(compose) 활용하기 관련 있는 데이터 캡슐화하기 반환 유형에 구현 세부 정보가 유출되지 않도록 주의하라 의존성 주입 사용을 고려하기 Spring Framework를 활용하다 보면 자연스러운 DI라는 개념입니다. interface를 활용하고 있으며 클래스의 인스턴스를 생성할 때 생성자를 통해 의존성을 주입하여 다양한 구현 클래스들을 활용할 수 있게 됩니다. 이렇게 되면 구현..
-
7장 - 코드를 오용하기 어렵게 만들라클린 코드(Clean Code)/좋은 코드, 나쁜 코드 요약 2023. 12. 16. 00:01
코드를 잘못 사용할 수 있는 몇 가지 사례 호출하는 쪽에서 잘못된 입력 다른 코드의 부수 효과 (입력 매개변수 수정 등) 정확한 시간이나 순서에 따라 함수를 호출하지 않음 관련 코드에서 가정과 맞지 않게 수정 발생 코드를 오용하게 어렵게 만드는 방법 불변 객체로 만드는 것을 고려하자 - 가변 객체는 추론하기 어렵고, 다중 스레드에서 문제가 발생할 수 있음 이때 객체 내부의 List 등은 가변으로 내버려 두는 실수를 할 수 있는데 깊은 수준까지 불변적으로 만드는 것을 고려하면 좋습니다. Int, Double과 같은 일반 데이터 유형보다 Moeny과 같은 value class 등을 고려해 보자 시간등을 활용할 때는 ms, second 등 다양하게 활용된다 Duration 객체와 같은 것들을 고려해 보자 데이..
-
6장 - 예측 가능한 코드를 작성하라클린 코드(Clean Code)/좋은 코드, 나쁜 코드 요약 2023. 12. 15. 00:01
예측가능한 코드를 작성하는 방법 매직값을 반환하지 않기 널 객체 패턴을 적절하게 활용하기 예상하지 못한 side-effect 피하기 불변 객체 활용 또는 방어적 복사 활용하기 열거형을 처리할 때는 미래를 고려하자 그냥 테스트를 잘 작성하면 되지 않을까?? 매직값을 반환하지 않기 오류가 발생했을 때 -1을 반환한다면 정상적인 반환값으로 오인하기 쉽습니다. js에서 배열에 대해 indexOf()를 호출할 때 이런 경우가 종종 있습니다. 사용자의 평균 연령을 계산하려고 하는데 나이를 반환할 때 존재하지 않으면 -1을 반환하는 경우 함수의 작성자가 이를 예측하지 못하면 평균값 계산이 -1이 포함되기 때문에 잘못된 연산이 발생할 수 있습니다. 대안책으로는 null, Optional, 오류를 반환하면 됩니다. 언어..
-
5장 - 가독성 높은 코드를 작성하라클린 코드(Clean Code)/좋은 코드, 나쁜 코드 요약 2023. 12. 14. 00:01
어떻게 하면 가독성 높은 코드를 작성할 수 있을까? 서술적인 이름을 지어라 적절한 주석활용 간결하지만 이해하기 어려운 코드를 피하라 스타일 가이드를 채택하고 따르자 깊이 중첩된 코드를 피하자 함수 호출에 사용되는 인수도 가독성이 있어야 한다. 매직 넘버를 활용하지 말자 언어의 새로운 기능을 활용해보자 서술적인 이름을 지어라 예를 들어 토스터라는 부엌에 있는 가전제품에 이름을 지을 때 객체 A라고 아무렇게나 이름을 짓는 대신 무엇가를 굽는다는 뜻인 "토스터"라고 이름을 짓듯이 소프트웨어에서도 같은 원리를 적용해야 합니다. 이름을 지을 때는 최대한 변수, 함수 및 클래스가 별도의 설명할 필요가 없이 자명하면 제일 좋습니다. 적절한 주석활용 대부분의 경우에는 무분별한 주석대신에 이름을 효과적으로 짓는것이 더 ..
-
4장 - 오류클린 코드(Clean Code)/좋은 코드, 나쁜 코드 요약 2023. 12. 13. 00:01
런타임은 불안정해 사용자가 잘못된 값 입력 외부 시스템 다운 내가 작성한 코드에서 버그 이런 점들을 고려했을 때 오류는 불가피합니다. 따라서 오류 사례에 대해서 잘 구분하여 잘 처리해야 신뢰성 높은 코드를 작성할 수 있습니다. 복구 가능한 오류 사용자가 값을 잘못 입력했는데 전체 시스템이 작동을 멈춘다면 어떨까요? 이는 바로 좋지 않은 사용자 경험으로 이어지게 됩니다. 그보다는 사용자가 유효하지 않은 입력을 수행하면 오류 메시지를 제공하고 올바른 번호를 입력받도록 요청할 수 있습니다. 이외에도 통계를 기록하는 부분과 같이 비즈니스에 중요하지 않은 부분이나, 몇 초 뒤에 다시 시도해서 해결되는 네트워크 오류 등은 복구 가능한 오류입니다. 이런 오류들은 일어날 가능성이 높다고 판단해야 하며 오류가 발생해도..