Java/클린코드
-
[클린코드] 단위테스트Java/클린코드 2022. 4. 27. 00:20
제로베이스 클린코드 요약 정리 글입니다. 목차 테스트 코드의 중요성 테스트의 종류 Unit Test 작성 FIRST 원칙 1. 테스트 코드의 중요성 테스트 코드는 실수를 바로잡아준다. 테스트 코드는 반드시 존재해야하며, 실제 코드 못지 않게 중요하다. 테스트 케이스는 변경이 쉽도록한다. 코드의 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 단위 테스트이다. 테스트 커버리지가 높을수록 버그에 대한 공포가 줄어든다. 지저분한 테스트 코드는 테스트를 안하느니만 못하다. 테스트의 중요성 테스트는 실사용에 적합한 설계를 끌어내준다. 테스트를 작성해서 얻게 되는 가장 큰 수확은 테스트 자체가 아니다. 작성 과정에서 얻는 깨달음이다. 테스트는 자동화 되어야 한다. Build -> Test -> Provide In..
-
[클린코드] 경계Java/클린코드 2022. 3. 2. 22:22
제로베이스 클린코드 요약 정리 글입니다. 모호한 경계를 구분짓기 경계란 경계 짓기 (1) 우리 코드를 보호하기 경계 짓기 (2) 외부 코드와 호환하기 외부 라이브러리 테스트하기 - Learning Test 1. 경계란 내부 코드 |경계| 외부 코드 시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다. 오픈소스, 라이브러리를 안쓰는 프로젝트는 없으며 내부 코드와 외부 코드를 병합해야하는 상황이 생긴다. 우리코드(내부 코드) 와 외부 코드를 깔끔하게 병합시키려면 경계를 잘 지어야 한다. 2. 경계 짓기 (1) 우리코드 보호 하기 캡슐화 (Encapsulation) 갭슐화 : 객체의 실제 구현을 외부로부터 감추는 방식 다시 말해 Public 메소드는 외부에 공개하지만 내부 Data, 내부 메소드는..
-
[클린코드] 오류 처리Java/클린코드 2022. 3. 1. 21:34
제로베이스 클린코드 요약 정리 글입니다. 예외 처리 방식 Unchecked Exception 을 사용하라 Exception 잘 쓰기 실무 예외 처리 패턴 1. 예외 처리 방식 오류 코드를 리턴하지 말고, 예외를 던져라 오류 코드 사용 예시 public class DeviceController { ... public void sendShutDown() { DeviceHandle handle = getHandle(DEV1); // 디바이스 상태를 점검한다. if (handle != DeviceHandle.INVALID) { // 레코드 필드에 디바이스 상태를 저장한다. retrieveDeviceRecord(handle); // 디바이스 일시정지 상태가 아니라면 종료한다. if (record.getStatus..
-
[클린코드] 객체와 자료구조Java/클린코드 2022. 2. 23. 00:34
01 자료구조 vs 객체 자료구조 데이터 그 자체 자료를 공개한다. 변수 사이에 조회 함수와 설정 함수로 변수를 다룬다고 객체가 되지 않는다. (getter, setter) 객체 비즈니스 로직과 관련 자료를 숨기고, 추상화한다. 자료를 다루는 함수만 공개한다. 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있다. 자료구조 예시 public interface Vehicle { double getFuelTankCapacityInGallons(); double getGallonsOfGasoline(); } public class Car implements Vehicle { double fuelTankCapacityInGallons; double gallonsOfGasoline; p..
-
[클린코드] 형식 맞추기Java/클린코드 2022. 2. 15. 22:54
01 포맷팅이 중요한 이유 02 클린코드 포맷팅 03 Java Class Declarations 04 Coding Convention 포맷팅이 중요한 이유 가독성에 필수적이다. 클린코드 포맷팅 적절한 길이 유지 ~ 200 lines < 500 lines 밀접한 개념은 가까이 둔다. 행 묶음은 완결된 생각 하나를 표현하기 때문에 개념은 빈 행으로 분리한다. 변수는 사용되는 위치에서 최대한 가까이 선언한다. public class BoldWidget extends ParentWidget { public static final String REGEXP = "'''.+?'''"; private static final Pattern pattern = Pattern.compile("'''(.+?)'''", Patt..
-
[클린코드] 주석Java/클린코드 2022. 2. 11. 01:26
주석을 최대한 쓰지 말자 좋은 주석 주석보다 annotation JavaDoc 주석을 최대한 쓰지 말자 주석은 나쁜 코드를 보완하지 못한다. // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if((employee.flags & HOURLY_FLAG) && employee.age > 65)) // 의미있는 이름을 지으면 해결된다. if (employee.isEligibleForFullBenefits()) 주석으로 설명하지 말고 개선하는데 시간을 보내야 한다. 코드로 의도를 표현할 수 있어야 한다. 주석은 방치된다. 코드의 변화에 따라가지 못하고, 주석은 방치된다. 코드는 컴파일되어 호출되지만, 주석은 그저 주석이기 때문에 그 자리에 방치되고 의미없는 텍스트가 되어버린다. 좋은 주석 구현에 대한 정..
-
[클린코드] 함수Java/클린코드 2022. 2. 7. 23:57
클린코드 3장(함수) 을 읽어보며. 작게 만들어라! 한 가지만 해라 함수당 추상화 수준은 하나 이야기 처럼 읽여야 한다 (내려가기 규칙) 서술적인 이름을 사용해라 (하지만 동사) 함수 인수는 가능한 적게! 명령과 조회를 분리해라 오류 코드 보다는 예외를 사용하기 (오류처리도 한가지 작업) 반복하지 말자 단위 테스트를 작성해가면서 첫 장황한 함수를 개선해나가자 함수를 작성할때는.. SOLID 방식을 사용하자 SRP (단일 책임 원칙) : 한 클래스는 하나의 책임만 가져야 한다. OCP (개방-폐쇄 원칙) : 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야한다. LSP (리스코프 치환 원칙) : 서브 타입은 언제나 기반 타입으로 교체할 수 있어야 한다. ISP (인터페이스 분리 원칙) : 자신이..
-
깨끗한 코드 그리고 의미있는 이름Java/클린코드 2022. 2. 6. 23:27
나쁜 코드 클린코드를 이야기 하기 앞서 나쁜코드의 예시는 다음과 같다. 성능이 나쁜 코드 : 불필요한 연산을 개선할 여지가 있는 코드 의미가 모호한 코드 : 이해하기 어렵거나 네이밍과 내용이 다른 코드 중복된 코드 : 비슷한 내용인데 중복됨으로 버그를 낳는 코드 왜 나쁜 코드를 짜는 걸까? 시간이 없어서 영향 범위 (Side Effect) 가 넓어서 클린 코드란? 클린 코드는 나쁜 코드의 반대라고 할 수 있다. 성능이 좋은 코드 의미가 명확한 코드 (가독성이 좋은 코드) 중복이 제거된 코드 유명하고 노련한 프로그래머들의 클린 코드 의견은 다음과 같다. 비야네 스트롭스트룹 - C++ 창시자 깨끗한 코드는 한 가지를 제대로 한다. 그래디 부치 - 객체지향 대가 깨끗한 코드는 잘 쓴 문장처럼 읽힌다. 빅 데이..