*이 글은 정보를 공유하기 위함이 아닌, 제 생각을 아무렇게나 정리한 글입니다.
나는 항상 파이썬 위에서 코드를 어떻게 짜면 효율적으로 짤 수 있을지 고민을 하곤했다.
이런게 피곤하고 허레허식 같다는 생각을 하기도 하지만, 클린코드에 대해 생각하지 않고 프로젝트가 절정에 다다를 때 쯤이면 항상 문제가 터지곤 한다.
그러나 클린 코드를 지향하면서 코딩을 해도 문제가 터진다.
이는 나의 신념의 문제 같다고 느낀다.
그 근거로, 알고리즘을 시작할때 쯤에는 이분탐색 문제가 지옥같았다. 코드는 전혀 이해할 수 없었고, 번번히 내가 원하는 대로 결과가 나오지 않았다. (함정 케이스에 항상 걸리곤 했다)
시간이 지나고 다른 사람의 코드를 참고해서 나만의 메뉴얼을 머릿속에 만들기 시작했다. 예컨데 while문은 항상 left <= right 로 해야한다고 정했다.
이러한 노하우를 알고난 후 이분탐색을 이해하기 시작했고, 머릿속에 있는 로직을 곧바로 코드로 담아낼 수 있었다.
지금은 이 문제를 푸는 유일한 최상의 답은 없다고 생각한다.
여러 방법이 있고, 각자 익숙한 방법을 사용하면 된다. 다만, 그 선택의 길에서 내가 좋아하는 하나의 방법을 고수해야 해야 한다고 생각한다.
이러한 생각을 나는 신념이라고 생각한다. (단어가 너무 웅장하지만 그냥 뭐~)
의존성 관리하는 법, 객체를 생성하는 법, db와 서비스를 분리하는 법도 이처럼 좋은 방법을 찾고 싶다. 방법이 여러가지고, 누군가 이게 답이야! 라고 알려주지 않는다.
하지만.. 경험이 적어서 그런지 여전히 잘 모르겠다.
그러던 중, 유튜브 추천 알고리즘이 날 아래 동영상으로 인도했다.
주제는 좀 다르지만, 클래스와 함수로 디자인 패턴을 구현하는 예시를 보여준다.
처음에는 보면서 "함수가 좋지 암암" "역시 함수만 써야해!" "함수형 프로그래밍 최고!" 라는 생각을 했지만 템플릿 메서드 패턴에서 함수의 구린내가 나기 시작했다. (pandas 마냥 인자가 너무 많다!)
그리고 또 문제가 있다. 함수로는 상태를 저장할 수가 없다. 서브 루틴은 구현이 가능하지만, 상태를 가진다면 힘들것이다.
그래서.. 단순한 코드는 함수로, 복잡하고 상태를 가지는 코드는 클래스/객체로 구현해야 한다고 결론지었다.
예컨데 객체를 생성하는 팩토리는 함수로, 설정값이나 다른 서비스를 가져야 하는 서비스는 클래스로 구현해야겠다.
'프로그래밍 > 끄적끄적' 카테고리의 다른 글
이상한 Real World의 테스트 (0) | 2023.02.21 |
---|---|
다 쓴 객체 참조를 해제하자! (0) | 2022.10.24 |