전체 글145 [클린 코드] 8장 경계 외부 코드(오픈 소스 등)를 사용하지 않을 수 없음, 있지만 매우 비효율적 => 외부 코드와 우리의 코드를 깔끔하게 통합하기 위한 이야기 외부 코드 사용하기 인터페이스 제공자는 많은 고객을 유치하기 위해 범용성을 추구 인터페이스 사용자는 자신의 서비스에 특화되길 원함 예시로 java.util.Map을 들면 // Sensor 라는 객체를 담는 Map을 만든다면 Map sensors = new HashMap(); 위와 같이 Map 인스턴스를 이곳 저곳에 넘긴다면 Map 인터페이스에 변경이 생길 시 수정할 코드가 많아진다. (현재로선 java.util.Map이 더 이상의 수정이 가해질 것 같지 않은 상태이지만, 이러한 상태에 도달하기 전까지 수정이 있었다는 것을 생각해야할 것) public class Sens.. 독서 기록/클린 코드 2023. 4. 24. [클린 코드] 7장 오류처리 오류코드 보다 예외를 사용해라 오류 플래그를 설정하거나 호출자에게 오류 코드를 반환하는 경우 논리와 오류 처리 코드가 섞이기에 호출자 코드가 복잡해짐 + 호출 즉시 오류 확인해야 함 Try-Catch-Finally 문부터 작성하라 try 블록의 트랜잭션 범위부터 구현하게 되어 범위 내에서의 트랜잭션 본질을 유지하기 쉬워짐 미확인(unchecked) 예외를 사용하라 확인된 예외는 OCP(Open Closed Principle)를 위반 => 하위의 메서드에서 확인된 예외를 던지면 상위의 선언부에 해당 예외를 정의해야 함 즉, 캡슐화가 깨진다. 이로 인해 발생하는 의존성이라는 비용은 이익보다 큰 경우가 대다수이다. 예외에 의미를 제공해라 예외를 던질 때는 전후 상황을 충분히 덧붙여 오류가 발생한 원인과 위치를.. 독서 기록/클린 코드 2023. 4. 23. Lombok @Builder vs @Accessor vs Setter 서론 최근 스프링 개발할 때 Lombok의 @Builder 어노테이션을 많이 쓰고 있는데, 아무리 생각해도 기존의 방식인 get/set 방식이랑 비교해서 너무 편해지고 가독성도 좋기에 분명 성능의 일부를 포기하고 이러한 장점을 얻었을 것이라는 생각이 자연스럽게 들었다. 그렇지만 Setter를 활용하는 것은 코드의 가독성도 해치고 무엇보다 너무 귀찮다. 검색하던 와중 이러한 불편함을 해결하는 @Accessors에 대한 존재도 알 수 있었다. 그래서 @Builder 나 @Accessors 같이 편하게 만들어주는 요소들은 성능의 일부를 포기하는 것이 정말 맞나? 라는 답을 찾기 위해 테스트를 수행하고 결과에 대한 이야기를 하기 전에 @Builder와 @Accessors에 대한 이야기를 먼저 해보고자 한다. @.. TIL/TIL 2023. 4. 21. [마이크로 서비스 패턴] 1장 모놀리식 지옥에서 벗어나라 작은 규모의 소프트웨어에서는 모놀리식이 장점이 많음 개발 편함 쉽게 변경 테스트 용이 배포 용이 업-다운 스케일 용이 서비스가 커지면서, 즉 프로그램 규모가 커질수록 위의 장점은 사라지고 단점들이 많아짐 너무 복잡해서 개발자가 주눅든다 (매우 공감…) 코드 베이스를 이해하기 힘듬 (만악의 근원) 자연스럽게 개발이 더뎌짐 자연스럽게 테스트가 오래걸림 자연스럽게 수정,배포가 어려움 갈수록 한물간 기술 스택에 발목 붙잡히다 아키텍쳐 때문에 어쩔 수 없이 점점 한물간 기술 스택을 쓸 수 밖에 없고, 그 특성상 최신 기술을 사용하고자 전체 모놀리식 어플리케이션을 재작성하는 것은 비용도 비용이고 리스크가 높아 그냥 따라갈 수 밖에없음 💡 == 신한카드의 IT 서비스의 현상황이라고 생각 💡 도입부에서 이미 박수 치고.. 독서 기록/마이크로 서비스 패턴 2023. 4. 20. [클린 코드] 6장 객체와 자료 구조 자료 추상화 // 구체적인 Point 클래스 public class Point{ public double x; public double y; } // 추상적인 Point 클래스 public interface Point{ double getX(); double getY(); double setCartesian(double x, double y); double getR(); } 구체적인 Point 클래스는 구현을 노출한다. 변수를 private으로 하여도 각 값마다 get/set 함수를 제공한다면 구현이 외부로 노출된다. 즉 변수 사이에 함수라는 계층을 넣는다고 구현이 감춰지는 것이 아니다! 구현을 감추기 위해서는 추상화가 필요하고, 그 역할을 해주는 것이 추상 인터페이스이다. 사용자는 추상 인터페이스를 통.. 독서 기록/클린 코드 2023. 1. 25. [클린 코드] 5장 형식 맞추기 코드가 깔끔하고, 일관적이며, 질서정연하려면 글과 동일하다 한 사람이 쓴 것 같이 형식은 통일되고 흐름은 비슷해야한다. 즉 코드 형식을 맞추기 위한 규칙을 정하고 팀원들이 이를 충실히 따라야 한다는 것이다. 형식을 맞추는 목적 유지보수 용이성과 확장성을 가지는 것이다. 세로 형식 적절한 행길이를 유지할 것 일반적으로 너무 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성할 것 신문은 위에서 아래로 읽기에, 첫 문단에 전체 기사 내요을 요약하고 내려오면서 세세한 사실을 설명. 이와 비슷하게 첫 부분은 고차원 개념과 알고리즘을 설명, 아래로 내려올수록 의도를 세세하게 묘사한다. 마지막에는 가장 저차원 함수와 세부 내역을 설명 개념은 빈행으로 분리 빈 행은 새로운 개념을 시작한다는 시각적 단서 pu.. 독서 기록/클린 코드 2023. 1. 24. [클린 코드] 4장 주석 주석은 필요악 프로그래밍 언어로만 모든 의도를 표현하고 서로 이해할 수 있다면 주석은 필요하지 않음 우리는 프로그래밍 언어로만 의도를 전달하는 것을 실패하고 이를 만회하기 위해 주석을 사용한다. 즉 주석은 존재 자체가 표현을 제대로 하지 못한 실패의 산물이라는 것 주석이 악한 이유 주석은 거짓말을 한다. 오래될수록 코드와 멀어지고 그릇될 가능성이 커진다. 왜냐하면 코드를 유지보수하는 것도 어려운데 주석까지 유지 보수를 하는 것은 현실적으로 불가능하기 때문이다. 부정확한 주석은 아예 없는 주석보다 훨씬 더 나쁘다. 주석은 나쁜 코드를 보완하지 못한다 보통 주석을 추가하는 경우 코드 품질이 나쁘기 때문에 이를 보완하기에 작성한다. 하지만 주석을 다는 것보다 코드 품질을 올리는 것이 더 중요하다 // 직원이 .. 독서 기록/클린 코드 2023. 1. 23. [퍼온 글] 노력과 노오력의 차이 겉으로 보기에 한국은 노력의 효용을 (지나치게) 신봉하는 나라로 보인다. 오죽하면 노력이 ‘노오력’이 되었을까. 시골 할머니들이 아이를 낳고도 바로 밖에 나가 밭일을 했다거나, 자수성가한 중년의 사업가가 평생 2시간 이상 자 본 적 없이 일만 했다는 식의 믿거나말거나 고생 배틀부터, ‘우리 부모/조부모 세대는 노력을 많이 해서 재산을 금방 불렸는데 요즘 젊은애들은 게을러서 취업도 못한다’는 한국 고속성장 모델에 대한 맹신에 이르기까지, 온 나라가 노력을 마법의 주문이자 무한의 자원으로 여기는 것 같다. 그런데 이상한 부분이 있다. 한국에는 ‘될성 부른 나무’와 ‘될놈될’의 신화 또한 강력하다. 될 놈은 타고났기 때문에 뭘 해도 되고, 안 될 놈 역시 타고났기 때문에 뭘 해도 안 된다는 식의 운명론이 노력.. 주저리주저리 2023. 1. 23. [클린 코드] 3장 함수 함수는 프로그램의 가장 기본적인 단위 최대한 작게 만들자! 블록과 들여쓰기 if/else 문이나 while문 등에 들어가는 블록은 1줄이어야 한다. 즉 중첩 구조가 생길만큼 함수가 커지면 안된다. 그러므로 들여쓰기 수준도 1단이나 2단을 넘으면 안된다. 그래야 가독성이 좋기 때문이다 하나의 목표에 집중해라 함수는 한가지를 해야 한다. 그 한가지를 잘해야 한다. 그리고 그 한가지만 해야한다. 한 함수내에 추상화 수준이 동일해야 한다 ex) getHtml() 는 추상화 수준이 높다 String pagePathName = PathParser.render(pagepath) 는 추상화 수준이 중간이다. .append("₩n") 같은 코드는 수준이 낮다. 한 함수 안에서 추상화 수준을 섞으면 코드를 읽는 사람이 헷.. 독서 기록/클린 코드 2023. 1. 21. [클린 코드] 2장 의미 있는 이름 의도가 분명하게 이름을 지어라 좋은 이름을 짓는데는 시간이 걸리지만 좋은 이름으로 시간을 절약하는 시간이 더 많다. 만약 따로 주석이 필요하다면 의도를 충분히 드러내지 못한 것이다. 그릇된 정보를 피해라 Ex) 빗변(hypotenuse) 을 hp로 줄인다면 훌륭한 약어처럼 보이겠지만 hp로 빗변을 직관적으로 떠올리거나 다른 의미로 인식할 수 있음 서로 비슷한 이름을 사용하지 않는 것도 중요 유사한 개념은 유사한 표기법을 사용해야한다 일관성이 떨어지는 표기법은 그릇된 정보다 불용어는 중복이다 ex) 변수에 variable은 중복, 표에 table 도 중복 ex2) getActiveAccount(), getActiveAccounts(),getActiveAccountInfo() 중 어떤 메소드가 원하는 메소드.. 독서 기록/클린 코드 2023. 1. 21. [클린 코드] 1장 깨끗한 코드 코드는 요구사항을 표현하는 수단 언어의 추상화 수준은 높아지고, 특정 응용 분야에 특화된 언어가 많아지는 등의 변화 있을 수 있음 But, 요구 사항을 모호하게 줘도 우리의 의도를 정확하게 파악하고 프로그램을 만들 수 있는 기계가 나올 수 없음 그렇기에 코드는 항상 존재할 것 나쁜 코드가 나오는 이유 시간상의 이유 등으로 나쁜 코드를 생산 아예 안돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로 위로하는 일 흔함 그리고 나중에 다시 리팩토링하겠다는 다짐을 하지만 나중은 오지 않는다 (= 르블랑의 법칙) 나쁜 코드는 쌓일수록 생산성이 떨어짐 쌓일수록 수정과 개선의 난이도를 기하급수적으로 늘림 결국 생산성이 0에 수렴하고 재설계를 시도함 ( aka. 차세대, 빅뱅 등...) 재설계를 시도하는 팀은 기존 .. 독서 기록/클린 코드 2023. 1. 16. 근황 + 2023년 각오(?) 12월부터 진행되던 회사 연수과정 이어서 1월에도 하고 있고 그 사이에 1월 2일에는 근로계약서 체결과 사원증을 받았고 그말은 즉슨 1월부터는 연수생이 아닌 정규직 신분으로 연수에 참여중이다. 그리고 sql, 파이썬, 문서 작성(ppt, excel, 기획서...) 등 관련 교육을 매우 짧게 맛배기 정도 느낌으로 받으며, 연말 시상식 같은...?? (연초에 하지만) 행사에서 보여줄 퍼포먼스를 준비하고 있다. 신입사원들이 퍼포먼스를 하는 것이 전통이라 하여 준비하는데 대략 2주 정도 기간동안 하면서 평생 하지 않던 춤을 열심히 추고 있다... ㅎㅎ;; 이 때문에 좀 현타가 온적도 있었고 마음이 착잡했던적도 있지만 덕분에 내가 블로그에 글을 적고 다시 무언가 하고 싶게 되었다. 그리고 다음주 목요일 즉 1월 .. 주저리주저리 2023. 1. 5. 이전 1 2 3 4 5 6 ··· 13 다음 반응형