노마드코더 개발자북클럽 Clean code TIL 8 : 8-9장. 경계-단위 테스트

        오늘 TIL 3줄 요약 프로그램에 필요한 인터페이스만 클래스에서 제공하여 코드를 이해하기 쉽지만 오용하기 어렵게 한라. 실제 코드와 맞먹을 정도로 방대한 테스트 코드는 심각한 관리 문제를 유발하기도 한다. 테스트 함수 하나는, 개념 하나만 테스트하고 개념당 assert 문 수를 최소로 줄여라. 깨끗한 테스트의 다섯 가지 규칙, FIRST Fast : 테스트는 빨리 돌아야 한다. 빨리 돌아서 자주 실행해야 한다. Independent : 각 테스트가 서로 의존하면 안 된다. Repeatable : 테스트는 어떤 환경에서도 반복 가능해야 한다.                       테스트가 돌아가지 않는 환경이 하나라도 있다면                       (QA, Production, Test, local development 등)                       실패의 변명이 생긴다. Self-validating : 부울 값으로 결과를 내야 한다.                            성공 아니면 실패다.                            텍스트 or 로그 파일에 따로 만들어서 결과를 비교하지 않는다. Timely : 테스트는 적시에 작성해야 한다.              ...

노마드코더 개발자북클럽 Clean code TIL 7 : 7장. 오류 처리

이미지
       오늘 TIL 3줄 요약 논리가 오류 처리 코드와 뒤섞이지 않으므로 오류가 발생하면 예외를 던지는 편이 낫다. 확인된 예외는 OCP를 위반한다. 하위 단계의 코드 변경이 상위 단계 메서드 선언부 전부를 고치게 만들기 때문이다. 외부 라이브러리, API 가 던지는 예외를 전부 잡아내지말고 감싸는 클래스, Wrapper를 사용하여 의존성을 줄이자. 가능하다면, 예외 유형 하나로 오류를 구분하자. TIL (Today I Learned) 날짜 2025. 06.03 오늘 읽은 범위 7장. 오류처리 기억하고 싶은 내용을 써보세요. 오류 플래그, 호출자에게 오류 코드 반환하기  vs 예외 던지기. 에외를 지원하지 않는 프로그래밍 언어가 많았다. try-catch-fianally try 블록은 트랜잭션과 비슷하다. catch 블록에서 예외 유형을 좁혀라. 확인된 예외는 OCP를 위반한다. 하위 단계의 코드 변경이 상위 단계 메서드 선언부 전부를 고치게 만들기 때문이다. 예외에 의미를 제공하라. 특히, 애플리케이션이 로깅을 제공한다면 catch 블록에서 오류를 기록하도록 충분한 정부를 넘겨준다. 오류를 처리하는 대부분의 로직. 1) 오류를 기록하고 2) 프로그램을 계속 수행해도 좋은지 확인한다. 정상 흐름부터 정의하라. NULL을 반환하지 마라. 호출자에게 문제를 떠넘기는 것이다. NULL확인이 누락된 코드를 고치는 게 아니라 특수 사례 객체를 통해 NULL확인을 만들지 마라! NULL을 전달하지 마라. null을 전달받는 쪽에서 처리하지 말고 null 을 전달하는 쪽에서 전달을 막아라. 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요 NULL을 확인할 일 자체를 최소화해야겠다. NULL대신 적합한 기본값을 사용하자. 깨끗한 코드는 가독성도 좋아야하지만 안전성이 높아야한다. 그리고 이 둘은 시간-공간 개념처럼 Trade off되는, 상충되는 개념이 아님. 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면...

노마드코더 개발자북클럽 Clean code TIL 6 : 6장. 객체와 자료구조

      오늘 TIL 3줄 요약 구현을 감추려면 추상화가 필요하다. 객체 지향 코드에서 어려운 변경은 절차적인 코드에서 쉽다. 절차적인 코드에서 어려운 변경은 객체 지향 코드에서 쉽다. 모듈은 자신이 조작하는 객체의 속사정을 몰라야한다. -> 특히 기차 충돌 코드를 피하라. TIL (Today I Learned) 날짜 2025. 06.01 오늘 읽은 범위 5장. 형식 맞추기 기억하고 싶은 내용을 써보세요. 도형 클래스는 간단한 자료구조로, 도형 동작 방식은 Geometry 클래스에서 구현한다. 객체라면 내부 구조를 감춰야 한다. 정확히는, 1. 동작을 공개하고  2. 자료를 숨겨라. 함수나 타입을 보호할지 공개할지에 대한 확신이 부족할 때 잡종 구조가 생긴다.  DTO = 자료 전달 객체 db, 통신을 위한 소켓에서 받은 메시지의 구문을 분석하여 db의 raw data를 애플리케이션의 객체로 변환할 때 유용. 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합하다. 새로운 동작을 추가하는 유연성이 필요하다면, 자료구조와 절차적인 코드가 더 적합하다. 활성 레코드는 자료로 취급하며 비즈니스 규칙를 담고 내부자료(높은 확률로 활성 레코드 인스턴스)를 숨기는 객체는 따로 생성한다. 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요 잡종 구조 !! 내가 최근에 구현한 클래스 인 것 같다. 다시 리팩토링 할 까? 한 때는 이론적인 책이구나라고 생각했는데, 이 챕터를 읽고 생각이 바뀌었다. 아주 좋은 실례를 다루고 있어서 고개를 끄덕이면서 읽게 되었다. 특히, 활성 레코드의 취급에 대한 부분이 명쾌했다. 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.   #노개북   #노마드코더   #개발자북클럽  

노마드코더 개발자북클럽 Clean code TIL 5 : 5장. 형식 맞추기

     오늘 TIL 3줄 요약 맨 처음 잡아놓은 구현 스타일은 유지보수 용이성과 확장성에 계속 영향을 미친다. 호출하는 함수를 호출되는 함수보다 먼저 배치한다. 잘 알려진 위치에 인스턴스 변수를 모아라. TIL (Today I Learned) 날짜 2025. 05. 31 오늘 읽은 범위 5장. 형식 맞추기 기억하고 싶은 내용을 써보세요. 200줄로도 큰 시스템을 구축할 수 있다. 적절한 행 길이를 유지한다면. 줄바꿈은 개념을 분리하기 때문에 개념 사이는 빈 행으로 유지한다.  세로 밀집도는 연관성을 의미하며 연관있는 코드끼리는 세로로 가깝게 유지한다. 지역 변수는 각 함수 맨 처음에 선언한다. 연산자 강조를 위한 공백 글쓴이가 2002년 FitNesse 프로젝트를 처음 시작했을 때, 팀과 마주 앉아 구현 스타일을 논의했다(10분 소요). -> 팀규칙  오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요 오른쪽으로 스크롤 할 필요가 없는 가로행 길이로 코드를 짜자. 코드 자체가 최고의 표준이다. 표준이 되는, 귀감이 되는 패키지 하나를 제대로 설계하면 그 패키지의 코드 스타일을 따를 수 있다. 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.   #노개북   #노마드코더   #개발자북클럽  

노마드코더 개발자북클럽 Clean code Mission(1) : 더러운 코드 고치기

1  Hint❕ : 검색하기 쉬운 이름을 사용하세요. blastOFF는 로켓 발사를 의미. 86400000은 하루의 밀리초 (milliseconds) 의미. // What the heck is 86400000 for? setTimeout(blastOff, 86400000); // GOOD 😎 // 위 코드를 깨끗하게 다시 작성해 주세요. ONE_DAY_IN_MILLISECONDS = 86400000 blastOffAfter(ONE_DAY_IN_MILLISECONDS); // 어떻게 고쳤는지, 사례에서 무엇을 배워야 하는지 설명해주세요. 본 코드에서 말하고자 하는 바는 "하루 뒤에 로켓 발사"임. '시간을 정한다' 라는 의미의 함수보다 말하고자 하는 바를 다음과 같이 그대로 표현하였음. '발사한다, 얼마 뒤에? 하루 뒤에.' 2 Hint❕ : 의미있는 이름을 사용해 주세요. const yyyymmdstr = moment().format("YYYY/MM/DD"); // GOOD 😎 // 위 코드를 깨끗하게 다시 작성해 주세요. const now = moment(); const todayDate = now.format("YYYY/MM/DD"); // 어떻게 고쳤는지, 사례에서 무엇을 배워야 하는지 설명해주세요. moment()가 무슨 함수인지 잘 모르겠지만 지금 당장의 시각을 반환하는 , 내가 바꿀 수 없는 표준 함수로 이해했다. 현재 Timestamp에서 yyyy/mm/dd는  오늘의 date에 해당하므로 todayDate라고 명명함 3 Hint❕ : 불필요하게 반복하지 마세요. const Car = {   carMake: "Honda",   carModel: "Accord",   carColor: "Blue" }; function paintCar(car, color) {   car.carColor = color; } // G...

노마드코더 개발자북클럽 Clean code TIL 4 : 4장 주석

    오늘 TIL 3줄 요약 결과를 경고하는 주석은 적절하다. 표준 라이브러리나 프로그래머가 직접 변경할 수 없는 코드라면 의미를 명료하게 밝히는 주석이 유용하다. 되도록이면, 주석이 필요없는, 의도가 명확하게 표현된 코드를 짠다.  TIL (Today I Learned) 날짜 2025. 05. 28 오늘 읽은 범위 4장. 주석 기억하고 싶은 내용을 써보세요. 법적인 이유로 특정 주석을 넣기가 강제되는 경우, 타당한 주석이다. (저작권 정보, 소유권 정보) 이해가 되지 않아 다른 모듈까지 뒤져야 하는 주석은 독자와 제대로 소통하지 않는 주석이다. 코드와 같은 이야기를  중복으로 설명하는 주석을 달지 말자. (함수나 변수와 같은 코드를  또 다시 주석으로 달 필요는 없다.) 지나친 참견의 주석이 많이 있다면, 정작 필요한 주석을 개발자가 무시할 수 있다. 현대에는 VCS, 버전 관리 시스템의 등장으로, 이력을 기록하는 주석을 달 필요가 없어졌으며 저자 또한 기록할 필요가 없다. 위치를 표시하기 위한 주석 //// #### 을 지양하자. 주석으로 처리한 코드는 소스 코드 관리 시스템이 대신 코드를 기억해주기기 때문에 지우기를 주저하지 말자. 너무 많은 기술적, 역사적인 정보를 첨부하지 않기. 모호한 주석으로 주석 자체가 다시 설명을 요구한다면, 좋지 않은 주석이다. 코드 일부에 전역적인 정보에 대한 주석을 달지 않는다. 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요 TODO 주석을 적극적으로 활용하여 개발팀과 소통해야겠다. 함수 + 인수에 대한 정보를 주석으로 제시하기보다, 함수, 인수를 "잘" 명명하자. 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.   #노개북   #노마드코더   #개발자북클럽  

노마드코더 개발자북클럽 Clean code TIL 3 : 3장. 함수

   오늘 TIL 3줄 요약 switch를 사용해야한다면 추상 팩토리에 숨겨라 여러 섹션으로 나뉘어진 다는 것은 여러 일을 하고 있다는 뜻. 부수효과를 일으키지 마라. 이는 남몰래 거짓말하는 것이다. TIL (Today I Learned) 날짜 2025. 05. 26 오늘 읽은 범위 3장. 함수 기억하고 싶은 내용을 써보세요. 오류 오류 처리도 한 가지 작업이며 오류를 처리하는 함수는 오류만 처리해야한다. 함수에 키워드 try가 있다면 catch/fianlly로 끝나야한다. 새 오류 코드를 추가하는 대신 기존 오류 코드를 재사용한다. 오류 코드보다 예외를 사용하라. 명령과 조회 구분하기 함수는  뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 함. 둘 다하면 혼란을 일으킨다. 반복(중복) 소프트웨어에서 중복은 악의 근원이다. 많은 원칙과 기법이 중복을 제어하고 없애기 위해 탄생했다.   ...DB에서 중복을 피하기 위해 정규식을 사용한다. ...OOP에서 - 코드를 부모 클래스로 몰아서 중복을 없앤다. ...구조적 프로그래밍에서 - 함수는 return 문이 하나여야한다. - 루프 내에서 break, continue를 쓰지 말 것.   goto는 절대로 쓰지 말 것, * 처음 작성한 함수가 뒤죽박죽이더라도 다듬으면서 항상 단위 테스트를 통과하게한다. * 대가 프로그래머는 시스템을 구현할 프로그램이 아니라 풀어나갈 이야기로 여긴다. 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요 상당히 빡빡한 기준을 가지고 있으며 한 가치 원칙을 고수하다가 다른 원칙을 무시해버리는 상황이 잘 발생할 것 같다. 특히, 추상적인 작업, 개념을 Class화하는 것은 두려운 작업임. 기준 없이 2개, 3개정도의 함수 인자는 막연하게 괜찮다 생각했는데 될 수 있으면 0개로 유지하라는 덕에 혼난 기분이 든다. 나도 도메인 특화 언어를 작성하고 있는 프로그래머다. 이 사실에 자부심을 가지자! 나는 시스템이라는 이야기를 풀어나가고 ...

이 블로그의 인기 게시물

실무진 면접 경험으로 정리하는 백엔드 (1) : 에듀 테크 기업 면접

Blogger 커스터마이징 : CSS 수정 (sticky-header)

Intel 14th gen CPU의 칩 충돌 사태와 해결 방법