클린 코드(Clean Code)
-
나쁜 코드 & 인지 부하 줄이기클린 코드(Clean Code)/프로그래머의 뇌 2024. 1. 22. 00:01
코드 스멜은 인지 부하를 만들어낸다 마틴 파울러가 22가지 코드 스멜에 대한 리팩터링이란 책을 소개하였습니다. 예를 들어 긴 매개변수, 긴 메서드등은 효율적인 청킹을 막고 단기 기억 용량을 초과시킵니다. 또한 메서드의 이름등이 부정확한 경우도 인지 부화를 초래합니다. 예를 들어 getProfiles이지만 내부에서는 프로필을 반환하고, 업데이트를 수행하는 경우에는 getProfilesAndUpdate로 변경하는 것이 좋습니다. 또는 isValid 변수명이지만 boolean 타입을 가지지 않고 List를 반환하는 경우라면? 더 헷갈릴 수 있습니다. 복잡한 문제를 더 잘 해결하는 방법 책에서는 첫 번째로 "자동화"라는 개념을 소개합니다. 자동화의 의미는 특별히 생각하지 않고도 수행하는 작업을 의미합니다. 예를..
-
생각의 버그 & 이름 잘 짓기클린 코드(Clean Code)/프로그래머의 뇌 2024. 1. 16. 00:01
생각의 전이 우리는 새 바지를 살 때 어떻게 단추를 닫아야 하는지 안다. 우리는 새로운 노트북을 사더라도 키보드를 어떻게 사용할지 안다. 생각이 전이되기 때문에 우리는 새로운 경험을 하더라도 기존 경험을 활용합니다. 이미 아는 것은 저주인가 축복인가? 무언가를 알고 있어 새로운 일을 배울 때 도움이 될 수 있습니다. 하미잔 기존에 알던 지식이 새로운 일을 배울 때 악영향이 될 수 있습니다. 예를 들어 자바에서는 초기화 없이 변수를 사용할 수 없어서 매번 초기화해야 합니다. 하지만 경험 많은 자바 프로그래머는 파이썬은 그럴 필요가 없지만 파이썬에서도 모든 변수를 초기화해야 하며 그렇지 않으면 컴파일러가 경고를 보낸다고 가정할 수 있습니다. 또한 객체 지향 언어에 익숙해진 상태에서 F#이라는 함수형 언어를 ..
-
코드를 더 깊이 있게 이해하기 & 문제 더 잘 해결하기클린 코드(Clean Code)/프로그래머의 뇌 2024. 1. 12. 00:01
코드를 깊이 이해하기 만약 코드를 어느 정도 이해하고 나면 코드에 대해 더 깊이 이해하는 것이 좋습니다. 새로운 기능은 어디에 추가해야 할까? 다른 방식으로 설계하면 어떤 것이 가능할까? 이해를 넘어 응용하기 위한 단계로 나아갑니다. 코드를 어떻게 하면 깊이 이해할 수 있을까? 텍스트 구조 지식과 계획지식을 이해해야 합니다. 텍스트 구조 지식은 프로그래밍의 키워드가 하는 일 혹은 변수의 역할등 이해하는 것입니다. 계획 지식은 프로그래머가 프로그램을 작성할 때 무엇을 달성하려고 했는가 이해하는 것입니다. 책에서는 코드를 깊이 이해하기 위한 절차를 소개합니다. 초점을 잡는다 - 어디서 부터 읽어야 할지 초점으로부터 지식을 확장한다. 관련된 객체로 개념을 이해한다. 여러 객체에 걸쳐 있는 개념을 이해한다. 프..
-
프로그래밍 문법 빠르게 배우기 & 복잡한 코드 읽는 방법클린 코드(Clean Code)/프로그래머의 뇌 2024. 1. 8. 00:01
프로그래밍 문법을 기억해야 하는 이유 System.out.println() 우리가 흔히 모두 알고 있을 법한 자바를 처음 배웠을 때 배운 출력 문법입니다. 우리는 모든 문법들을 기억하고 있지 않습니다. 문법은 검색을 통해 찾을 수 있으니 문법에 대한 지식을 갖는 것은 중요하지 않다고 생각할 수 있습니다. 하지만 코드를 효율적으로 이해하기 위해서는 장기기억 + 단기기억이 필요하고 이때 문법을 기억하게 되면 장기기억 측면에서 도움을 받을 수 있습니다. 또한 업무를 수행하다가 다른일을 하고 업무로 돌아가는 경우로 약 15분 정도 걸린다는 연구결과도 존재합니다. 코드를 읽다가 문법을 찾게 되는 경우가 이런 경우에 해당하는 것 같습니다. 어떻게 하면 문법을 오래 기억할 수 있을까? 마법 같은 일은 없으며 오랫동안..
-
코딩 중 겪는 혼란에 대한 이해, 신속한 코드 분석클린 코드(Clean Code)/프로그래머의 뇌 2024. 1. 1. 01:01
세 가지 언어로 N을 이진수로 변환해 보기 세 가지 언어에서 모두 혼란스러운 부분이 존재하였습니다. APL 2 2 2 2 2 T n T에 대한 지식이 부족하기 때문에 혼란스럽다! T는 어떤 수의 값을 다른 진법의 수로 변환해 주는 이항 부호화함수이다! Java Integer.toBinaryString(n); 내부동작을 잘 모르기 때문에 혼란스럽다! 베이식 LET N2 = ABS(INT(N)) LET B$ = "" FOR N1 = N2 TO 0 STEP 0 LET N2 = INT(N1/2) LET B$ = STR$(N1 - N2 * 2) + B$ LET N1 = N2 NEXT N1 PRINT B$ 모든 단계를 이해하는 처리 능력이 부족하기 때문에 혼란스럽다! 변수들이 중간에 어떤 값을 갖는지 종이에 적으면..
-
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 등의 키워드를 활용하여 공유 상태를 활용하고 싶을..