토비 ttub-nii 일과 미래, 고민과 걱정을 종이에 떨어트려 보려고 해요. /@@fgPf 2023-03-28T02:04:53Z 시스템 - 높은 추상화 수준에서 클린라이프벳 유지하기 /@@fgPf/18 2025-02-16T18:46:31Z 2025-02-16T14:54:46Z 이번 장은 어떻게 하면 높은 추상화 수준(= 시스템 수준)에서도 깨끗함을 유지할 수 있는지 그 방법에 대해 설명한다. 하지만 자바와 스프링 AOP와 같은 자바 프레임워크, AspectJ 언어라는 것에 빗대어 설명하기 때문에 나의 이해에 한계가 있을뿐더러 사실 기반의 정보 요약은 그다지 유의미할 것 같지도 않아 느낀 점 위주로 기록해보려 한다. 일단 처음부<img src= "https://img1.라이프벳.net/thumb/R1280x0.fjpg/?fname=http%3A%2F%2Ft1.라이프벳.net%2Fbrunch%2Fservice%2Fuser%2FfgPf%2Fimage%2Fr3SEaDhVcOS0mKj7__A-0kyLb6U.jpeg" width="500" / 클래스 - 첫째도 둘째도 작게 또 작게 /@@fgPf/17 2025-02-10T13:23:56Z 2025-02-09T11:27:53Z 클래스를 정의하는 표준 관례에 따르면 가장 먼저 변수 목록이 나온다. 그중에서도 상수가 먼저 선언되고 변수가 선언되는데 순서는 static public &rarr; static private &rarr; private 인스턴스가 선언된다. 변수 목록 다음에는 public 함수가 나온다. private 함수는 자신을 호출하는 public 함수 직후에 선언한다. 즉, 추상화 단<img src= "https://img1.라이프벳.net/thumb/R1280x0.fjpg/?fname=http%3A%2F%2Ft1.라이프벳.net%2Fbrunch%2Fservice%2Fuser%2FfgPf%2Fimage%2FynmkF0NBpKmEbOY6O4kFQ6UBTxs.jpeg" width="500" / 단위 테스트 - 테스트 라이프벳는 이류 시민이 아니다. /@@fgPf/16 2025-05-06T04:29:52Z 2025-02-02T14:03:45Z 이전 장에서 외부 라이프벳 빠르게 학습하기 위한 방법으로 테스트 라이프벳 작성할 것을 추천했었다. 이어지는 이번 장에서는 테스트 라이프벳 잘 작성하기 위한 방법을 소개한다. 읽으면서 느끼는 점이지만 책의 흐름이 참 자연스럽고 치밀하게 유기적이다.&nbsp;밥 선생님(클린코드의 저자)은 목차도 대충 지으신 것이 아닌 게 분명하다. 지독한 완벽주의자... 97년도만 해도<img src= "https://img1.daumcdn.net/thumb/R1280x0.fjpg/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2FfgPf%2Fimage%2FM3F6yr2rYde7QxVXGYij5sU9P7I" width="430" / 경계 - 경계를 경계하기 /@@fgPf/15 2025-01-26T12:55:19Z 2025-01-26T07:35:22Z 모든 소프트웨어를 직접 개발하는 경우는 드물다. 패키지, 오픈 소스, 사내 다른 팀에서 제공하는 컴포넌트를 사용하기도 한다. 이번 장에서는 외부 라이프벳 우리의 코드에 깔끔하게 통합하기 위한 기법과 기교를 살펴본다. 읽으면서 재밌던 점은 인터페이스의 제공자와 사용자 사이에 긴장감이 존재한다고 언급한 부분이었다. 실제로 이전 회사에서 B2B 서비스를 하면서 <img src= "https://img1.daumcdn.net/thumb/R1280x0.fjpg/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2FfgPf%2Fimage%2FNq0TPIGZwZTK6gCilJcFJ8jKlWM.jpeg" width="500" / 오류 처리 - 잘못될 가능성은 늘 존재라이프벳. /@@fgPf/14 2024-12-22T12:44:20Z 2024-12-22T06:46:16Z 깨끗한 라이프벳와 오류 처리는 확실히 연관성이 있다. 오류 처리 라이프벳로 인해 논리를 이해하기 어려워진다면 깨끗한 라이프벳라 부르기 어렵기 때문이다. 이번 챕터에서는 우아하고 고상하게 오류를 처리하는 기법을 소개한다. if/else로 정상 동작과 예외 동작을 케이스로 나누는 것보다는 try/catch로 정상 동작만 작성하고 예외를 던져 버리는 편이 낫다. 그러면 <img src= "https://img1.daumcdn.net/thumb/R1280x0.fjpg/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2FfgPf%2Fimage%2FxpbeW_A0kQAQhgFfshcajrryk8g.jpeg" width="500" / 객체와 자료구조 - 객체는 동작을 공개하고 자료를 숨긴다. /@@fgPf/13 2024-12-15T14:21:59Z 2024-12-15T13:23:26Z 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 고민해야 한다. 아무 생각 없이 get/set 함수를 추가하는 방법이 가장 나쁘다. public&nbsp;protocol&nbsp;Vehicle {&nbsp;&nbsp;&nbsp;&nbsp;func&nbsp;getFuelTankCapacityInCallons() -&gt; Double&nbsp;&nbsp;&nbsp;&nbsp;func&nbsp;getFallonsOfGasoline() -&gt; Double} pub<img src= "https://img1.라이프벳.net/thumb/R1280x0.fjpg/?fname=http%3A%2F%2Ft1.라이프벳.net%2Fbrunch%2Fservice%2Fuser%2FfgPf%2Fimage%2FJ9WyeUWfAFozYMwpIxipn87G_tY.jpeg" width="500" / 형식 맞추기 - 라이프벳의 형식으로 의사소통하다. /@@fgPf/12 2024-12-08T03:31:00Z 2024-12-08T00:00:08Z 깨끗한 라이프벳 짜기 위한 도구들을 갖췄다. 변수의 이름 짓는 법을 배웠고, 함수를 만드는 법을 배웠고, 주석을 작성하는 법을 배웠으니 이제 어떻게 이들을 합칠 것인지 배울 차례다. 이번 장은 라이프벳 짜는 '형식'에 대해 소개한다. 라이프벳 짜는 형식이 왜 중요한지에 대해서는 기록하지 않겠다. 이미 5번째 챕터까지 읽었다면 왜 코드가 클린해야 하고 읽기 쉬워<img src= "https://img1.daumcdn.net/thumb/R1280x0.fjpg/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2FfgPf%2Fimage%2FPPNQ8vavniHVsJfvo4wcavtSH7k.jpeg" width="500" / 주석 - 나쁜 라이프벳에 주석을 달지 마라 /@@fgPf/11 2024-12-04T06:29:05Z 2024-12-01T00:00:09Z 개발자가 프로그래밍 언어를 사용해 의도를 표현할 능력이 있다면 주석은 거의, 아니 전혀 필요하지 않다. 코드로 의도를 표현하지 못해 주석을 사용했다면 '실패'한 것이니 주석을 달 때마다 스스로를 질책하고 반대로 코드로 의도를 표현했다면 스스로를 칭찬하라고 한다. 이토록 주석의 필요성에 대해 강하게 부정하는 이유는 여러 가지가 있다. (1) 나쁜 라이프벳 라이프벳 - 가장 기본적인 단위 /@@fgPf/9 2024-11-24T14:40:41Z 2024-11-24T12:06:26Z 앞 장에서 라이프벳가 깨끗해야 하는 이유와 그 첫 번째 방법인 네이밍을 잘하는 방법을 배웠다. 이번 장에서는 어떤 프로그램이든 가장 기본적인 단위가 되는 함수, 함수를 잘 만드는 법을 소개한다. 함수를 잘 만드는 방법, 시작은 '작게 만들기'부터다. 밥 선생님(클린라이프벳의 저자)은 오랜 시행착오를 바탕으로 함수를 작게 만드는 것이 이해하기 수월하다는 걸 체감하<img src= "https://img1.daumcdn.net/thumb/R1280x0.fjpg/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2FfgPf%2Fimage%2FIUgg8unF9SBj8_WpNiRqPGYFfq8.jpeg" width="500" / 의미 있는 이름 - 이름은 어디에나 붙인다. /@@fgPf/6 2024-11-17T00:14:07Z 2024-11-16T15:00:09Z 왜 코드는 깨끗해야 하는지 앞장에서 충분히 공감했다. 그럼 어떻게 깨끗한 라이프벳 작성할 수 있을까? 그 첫 번째는 이름을 잘 지어주는 것부터 시작한다. 개발자라면 응당 공감할 네이밍의 중요성. 뭔가 특별한 비법 소스 같은 게 있으려나 두근거리면서 장을 넘긴 나는 꽤 실망했다. 네이밍을 잘해야 된다는 건 수도 없이 들어봤고, 어쩌면 식상하다고 생각했다. '네<img src= "https://img1.daumcdn.net/thumb/R1280x0.fjpg/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2FfgPf%2Fimage%2F20eo3pt-WV6F7GPgHCkfu44ry2Q.heic" width="500" / 팀워크의 부활 - 책 &라이프벳;팀워크의 부활&gt;을 읽고 워크숍을 한 건에 대하여 /@@fgPf/4 2024-11-26T02:31:36Z 2024-11-11T10:50:00Z 안녕하세요. iOS 개발하는 토비입니다. 바야흐로 올해 4월, 브런치의 조직 개편이 있었는데요. 도메인별로 분리되어 있던 조직에서 APP / SERVER / FE 가 한 데 모이면서 팀으로서 도약하기 위해 워크숍을 진행했습니다. 워크숍은 책 &lt;팀워크의 부활&gt;을 읽고 그 내용대로 팀원들과 함께 따라 해 보는 방식으로 진행했는데요, 어떤 순서로 진행했고 무슨<img src= "https://img1.daumcdn.net/thumb/R1280x0.fjpg/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2FfgPf%2Fimage%2Frxd3IrXx6qsr_7i2laGLHx4gzxE.jpeg" width="500" / 깨끗한 라이프벳 - 왜 라이프벳는 깨끗해야 할까? /@@fgPf/5 2024-11-11T10:50:28Z 2024-11-09T15:00:09Z 2~3년 정도 프로그램을 만들면서 신규 피쳐를 개발하고 버그도 개발(?)하고, 동료의 라이프벳 리뷰하고 내 코드도 리뷰하다 보면 어느 시점 그런 생각이 드는 때가 있다. 나에게 '코드 감각'이 있나? (1) 나쁜 라이프벳 감지하고 (2) 깨끗한 코드로 바꿀 수 있는 능력이 내게 있는지 의문이 들었다. 그때쯤 클린 라이프벳 읽어야겠다고 다짐하게 된 사건(?)이 <img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2FfgPf%2Fimage%2FnnkzqPuxCzCQZBXdzdOS6f92QzA.png" width="500" /