클린코드 17

[스터디] 클린코드 17장 (2022년 9월 14일)

앞에 작성하지 않는 단원들은 JAVA 친화적으로 너무 보기 싫어서 안 봤다 ㅋㅋ 몰라 마지막 단원으로 17장 읽고 클린 코드는 여기서 마무리! 솔직히 17장만 읽어도 이 책이 어떤 말을 하려는지 알 수 있는 것 같다. 주석 극단적인것 까지는 아니지만 주석은 99% 필요 없다고 생각을 가지고 있다. 물론 이 책을 읽으며 생각이 점점 확고해지지만 확실히 코드를 보다 보면 관리되는 주석을 본 적이 없다. 그럴 바엔 차라리 안 쓰는 게 좋다는 생각이 점점 커지는 중... 부적절한 정보 주석은 코드와 설계에 기술적인 설명을 부연하는 수단이다. 예를 들어, 소스 코드 관리 시스템, 버그 추적 시스템, 이슈 추적 시스템, 기타 기록 관리 시스템에 저장할 정보는 주석으로 적절하지 못하다. 이러한 것들은 git을 이용해..

[스터디] 클린코드 13장 (2022년 8월 25일)

스터디 끝나고 일주일이 지났다. 오늘은 14장을 진행하는 날인데 아무도 준비하지 않았다 ㅋㅋㅋㅋ 그래서 저번에 올리지 못한 13장을 올릴꺼다. 이번 내용은 같은 팀원의 요약을 가져왔찌만 이해는 못했따. 동시성과 깔끔한 코드는 양립하기 어렵다. 동시성이 필요한 이유 구조와 효율을 개선하기 위해 응답 시간과 작업 처리량을 개선하기 위해 무엇과 언제를 분리하게 되면 시스템 구조가 크게 달라진다. 하지만 동시성이 성능을 항상 개선하는 것도 아니고, 부하를 유발하고 복잡하고 버그도 재현하기 어렵다. 동시성 코드로 인해 발생할 수 있는 문제로부터 시스템 방어하는 방법 단일 책임 원칙 동시성 코드는 다른 코드와 분리하라. 임계영역의 수를 줄인다 보호할 임계영역은 synchronized 키워드로 보호하라고 권장하는데,..

[스터디] 클린코드 12장 (2022년 8월 17일)

17일 스터디를 진행하고 벌써 일주일째 다되어가서 늦은 업로드 휴가를 쓰면 공부도 하기 싫고 일상으로 돌아오기가 더 힘든 것 같다 창발적 설계로 깔끔한 코드를 구현하자 여기서 창발적이란 집단 지성? 같은 의미인 것 같다. 개별적으로 보면 크지 않지만 모이면 시너지가 생기는 그런 느낌 켄트 벡이 제시한 단순한 설계 규칙 네 가지 모든 테스트를 실행한다. 중복을 없앤다. 프로그래머 의도를 표현한다. 클래스와 메서드 수를 최소로 줄인다. 단순한 설계 규칙 1: 모든 테스트를 실행하라 의도한 대로 돌아가는 시스템을 내놓아야 한다. 테스트 케이스를 많이 작성할수록 결합도를 낮춰야 한다. 테스트 케이스를 작성하면 설계 품질이 높아진다. 단순한 설계 규칙 2~4: 리팩터링 테스트 케이스를 모두 작성했다면 점진적으로 ..

[스터디] 클린코드 11장 (2022년 8월 10일)

11장 시스템 도시를 세운다면? 도시가 돌아가는 이유 중 하나는 적절한 추상화와 모듈화 때문이다. 소프트웨어 팀도 도시처럼 구성한다. 시스템 수준에서도 깨끗함을 유지하는 방법을 살펴보는 장이다. 시스템 제작과 시스템 사용을 분리하라 제작(construction)과 사용(use)은 아주 다르다. 소프트웨어 시스템은 준비 과정과 런타임 로직을 분리해야 한다. (프론트엔드 관점에서는 무슨 말인지 1도 모르겠다) 시작 단계는 관심사 분리를 해야한다. 책에서 소개하는 초기화 지연(Lazy Initialization), 계산 지연(Lazy Evaluation)이 있다. 따로 간단하게 정리를 해두어서 링크로 대신한다. (지연 초기화) 초기화 지연, 지연 초기화 어떤 단어가 맞는지 잘 모르겠다. 확장 개발을 할 때 우..

[스터디] 클린코드 10장 (2022년 8월 3일)

10장 클래스 클래스... 자바를 1도 모르는 나에겐 너무 먼 얘기다. 점점 클린 코드 책도 멀어지는 것 같다. 클래스 체계 클래스를 정의하는 표준 자바 관례라는 것이 있다. 가장 먼저 변수 목록이 나온다. 정적 공개 상수 -> 정적 비공개 상수 -> 비공개 인스턴스 그다음 공개 함수가 나온다. 자신을 호출하는 공개 함수 직후에 넣는다. 즉 추상화 단계가 순차적으로 내려간다. 함수 파트에서도 나온 말이지만 추상화 단계가 순차적으로 내려가 신문 기사처럼 읽힌다는 얘기를 여기서 또 하고 있다. 그만큼 중요하신 거겠지... 현재 리액트를 사용하면서도 추상화 레벨을 맞추려고 노력하고 있는데 노력한 만큼 코드는 깔끔해지는 것 같다. 캡슐화 이 부분을 읽고 이해를 하지 못해 조금 더 찾아보았다. 클래스를 사용하는 ..

[스터디] 클린코드 9장 (2022년 7월 20일)

9장 단위 테스트 테스트하면 TDD가 떠오르는데 일단 공부해야 될 목록에 추가는 해두었지만... 그냥 테스트를 어떻게 하면 좋을지? 기준을 두고 읽어 보았다. TDD 법칙 세 가지 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 깨끗한 테스트 코드 유지하기 테스트코드는 실제 코드 못지않게 깨끗하게 짜야한다. 클린 코드 책을 읽다 보면 모든 코드를 구분 없이 깨끗하게 짜야 되는 것 같다. 물론 당연한 말이지만... 그래도 책으로 한번 보면 더 각인된다고 해야 되나? 테스트는 유연성, 유지보수성, 재사용성을 제공한다. 테스트 케이스가 있으면 변경이 ..

[스터디] 클린코드 8장 (2022년 7월 13일)

8장의 제목은 경계이다. 경계란 외부 코드를 내 코드에서 호출하는 부분을 뜻한다. 이번 장은 외부 코드를 어떻게 내 코드에 녹일 것인지에 대해 중점을 두고 보면 될 것 같다. 경계 살피고 익히기 외부 코드를 사용하면 적은 시간에 더 많은 기능을 출시하기 쉬워진다. 외부 패키지 테스트는 우리 책임은 아니지만 우리가 사용할 코드를 테스트하는 편이 바람직하다. 개발을 하며 직접 만들어서 사용하기도 하지만 라이브러리 같은 외부 코드를 사용하면 많은 시간을 절약할 수 있다. 하지만 무조건적으로 라이브러리를 사용하지말고 잘 비교해보고 사용해야 한다. 학습 테스트는 공짜 이상이다 학습 테스트란 기능 구현을 위한 테스트라기 보다 어떻게 동작하는지를 검증하기 위한 테스트이다. 학습 테스트에 드는 비용은 없다. 오히려 필..

[스터디] 클린코드 7장 (2022년 7월 5일)

7장은 오류처리에 관한 단원이다. 프론트 개발을 하다 보면 개발자가 원했던 입력 값을 사용하지 않는 경우는 흔하다. 오류처리는 가이드라인을 정하는 그런 느낌으로 책을 읽어보았다. 오류 코드보다 예외를 사용하라 try catch 문을 사용해라 함수 내에서 오류코드를 확인해라 form에서 try catch문으로 예외상황을 처리한다. Try-Catch-Finally 문부터 작성하라 try-catch-finally 문에서 try 블록에 들어가는 코드를 실행하면 어느 시점에서든 실행이 중단된 후 catch 블록으로 넘어갈 수 있다. try-catch 구조로 범위를 정의했으니 TDD를 사용해 나머지 논리를 추가한다. 미확인(unchecked) 예외를 사용하라 사실 미확인 예외라는 말을 처음 들어봐서 검색해보았다. ..

[스터디] 클린코드 6장 (2022년 6월 29일)

6장의 제목은 객체와 자료 구조이다. 제목부터 어렵다... 확실히 자바를 공부하지 상태에서 읽으니 모르겠다... 요약정리만 간단히 했다. 자료 추상화 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. 자료를 세세하게 공개하는 것보다 추상적인 개념으로 표현하는 편이 좋다. 구현을 모른 채 자료를 조작하는 것이 진정한 의미의 클래스이다. 자료/객체 비대칭 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료 구조는 자료를 그대로 공개하면서 별다른 함수를 제공하지 않는다. 다형성이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것 객체와 자료 구조는 근본적으로 양분된다. 디미터 법칙 디미터 법칙은 잘 알려진 휴리스틱이다. 휴리스틱 ..

[스터디] 클린코드 5장 (2022년 6월 22일)

5장. 형식 맞추기 5장은 코드를 조금 더 깔끔하게? 보이게 하는 법을 적어놓은 것 같다. 형식을 맞추는 코드 코드 형식 -> 의사소통의 일환 -> 의사소통은 개발자의 일차적 의무 유지보수의 용이성과 확장성을 위해 가독성이 좋은 코드를 작성해야 한다. 적절한 행 길이를 유지하라 긴 코드를 보는 것보다 짧은 코드를 보는 것이 이해하기 쉽다. 개념은 빈 행으로 분리하라 빈 행을 사용함으로써 개념적으로 분리되어있는 것을 표현할 수 있다. 세로 밀집도 서로 밀접한 코드는 세로로 가까이 놓아야 한다. 수직 거리 변수는 사용하는 위치에서 가장 가까지 선언한다. 종속 함수 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다. 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다 (?) 이 구절은..