안드로이드

멧돼지 개발신조 우리의 결의!!!

강한 맷돼지 2024. 1. 10. 14:23

뭐 항상 그렇지만 나는 내가 나중에 보려고 글을 쓴다. 하지만 이번 글이야 말로 정보 전달의 목적이 1도 없다.

어떻게 보면 당연한 소리를 계속 외치는 것처럼 보일수도 있고 어쨋든 개발하면서 내가 나한테 하는 이야기를 적어보려한다.

 

요즘 진짜 타인이 작성 해놓은 오래된 레거시 코드를 보며 “이렇게 짜면 남이 알아듣기 힘들구나” 라는 교훈을 절실히 얻고있다.

물론 그 코드를 비판하기에는 그 코드를 작성한 분들도 눈물겨운 사연이 분명 있을것이 분명하다…….(갑자기 너무 슬픔)

 

나 또한 옛날에 공부 했던 내용을 찾아보려 우테코 때 열심히 만들었던 옛날 레포들 뒤적뒤적 하다보면 하루종일 앉아서 고민만 했는데 왜 이따구로 짰지?? 라는 생각이 10초에 한번꼴로 든다.

그만큼 진짜 뭔짓을 해도 실수는 하기 마련이고 남의것은 잘보이는데 자기가 짠거는 잘 안보인다.(내새끼는 왠만하면 예뻐보임)

 

사실 유명한 책들 클린 시리즈들, 이펙티브 시리즈들 등 어쨋든 “예쁜 코드를 짜봐” 라고 주장하는 책들이 하지말라는 행위를 공감하지 못했는데 요즘 진심으로 너무 공감되어서 눈물이 줄줄 흐를 지경이다.

 

그래서 우테코때 코드좀 예쁘게 짜봐라 차원에서 널리 사용했던 코드 스멜 체크 리스트인 “소트웍스 앤솔로지”책의 “객체지향 생활 체조 원칙“ 에서 영감을 받아 멧돼지의 개발 행동강령을 만들어보려한다.

 

사실 저 “객체지향 생활체조 원칙도” 그냥 어떤 개발자 아져씨가 포스트잇으로 본인의 코드를 점검하기위해 작성 해놓은 하나의 체크리스트라고 한다.

그런 차원에서 나도 멧돼지 개발신조 하나 만들어서 군대에서 복무신조 맨날 아침마다 외치듯이 출근 하자마자 개발신조 우리의 결의!!!!!! 건물이 떠나가라 외치고 시작해야겠다.

 

그래서 뭐 꼭 객체지향만 논하는게 아니라 그냥 개발 모든 측면의 내가 경계 해야하는 점을 적어보려한다.

 

지금 만약 밑의 규칙들이 공감이 안간다면 지금 보송보송하게 좋은 환경에 있어서 그런거다.

이 원칙을 꾸준히 지켰기 때문에 그런 환경이 조성된것이다.

진짜 이거 안지키면 최종적으로는 지옥도가 펼쳐질것이다.

 

최초에는 별거 없겠지만 앞으로 느끼는바가 있을때마다 하나씩 와서 업데이트 하려한다.

그럼 시작해보자

멧돼지 개발신조

공통사항

  1. 개발보다 사람의 인성이 중요하다. 다가오는 동료들에게 항상 친절하자
  2. 내일 아니라고 관심 끄지말자. 내일부터 그 작업이 내것이 될수도 있다.

 

 

개발사항

  1. 아키텍처 패턴같은 어려운것을 논하기 이전에 함수 분리, 클래스 분리부터 하자
    • 함수분리는 진짜 알잘딱하게 꼭 하자 SRP에 맞는지 항상 생각해보고 주의하자(진짜 함수분리만 해도 코드 가독성이 확 좋아진다.)
    • 함수 네이밍 진짜 중요하다. 빈말이 아니라 추후에 코드 파악할 때 무슨일을 하는 함수인지 나타내어주는 최고의 지표다. 정신차리고 작명하자
    • 클래스 분리 중요하다. 클래스 분리안하면 진짜 나중에가면 상상하지도 못할 크기의 클래스를 만나게 될것이다.
  2. 매직넘버 쓰지마라 꼭 이름 붙여써라 → 진짜 유지보수할때 골때린다. 그 기능을 완벽히 이해하지 않는 이상 무슨 내용인지 파악하기 힘들어진다. 매직넘버 하나로 유지보수하는 개발자를 암살해 버릴 수 있다.
  3. 주석을 너무 혐오할 필요는 없다. 진짜 가끔 가뭄에 단비처럼 내려오는 주석들이 있다. 하지만 주석을 달꺼라면 팀차원에서 지속적인 관리가 필수이다.(주석과 코드가 맞지 않게 엉키는순간 그것도 지옥도 시작이다)
  4. 하지만 주석을 달때는 한참 생각하고 달아야한다. -> 주석을 달지 않고도 알잘딱하게 설명할 수 있는 방법이 세상에는 차고 넘친다.
  5. 클린의 기준은 제각기 다르다. 본인의 클린을 타인에게 강요하지 말자
  6. 내가 라이브러리를 만든다면 SRP 원칙이 제일 중요한것 같다.(편하라고 넣어준 기능이 사용자를 괴롭힐수 있다.)
    ex) 네이버맵 지도 패딩 설정하는 기능에 네이버 로고 같이 움직임 , 네이버맵 현위치 설정을 위한 객체 fusedLocationSource 객체 생성 로직에 권한체크 들어있음
  7. 회사 코드가 안깔끔해 보이는가?
    "여기 이거 왜있지?" 이런 경우 대부분 방어코드이다 짧은 식견으로 모든것을 판단하지말자
  8. 프래그먼트를 쓴다면 생명주기 관련하여 꼭 많은 테스트를 거쳐보자 특히 액티비티 프래그먼트에서 공통으로 사용하는 컴포넌트를 빼는 순간 더 주의를 기울여야한다.