개인적으로 생각했을 때 스스로 타고난 성향 중에 하나가
규칙이 있으면 지켜야 한다고 생각하는 것이다.
합리적이지 않은 룰이 있더라도 속으로는(겉으로도... 조금은) 툴툴대지만 그래도 규칙이니까 마음은 썩 내키지 않지만 지키려고 한다.
그래서 그런지 Java
공부를 시작하기 전에,
그니까 코드 한줄을 치기 이전에 자바 컨벤션을 먼저 익히고 코드를 치기 시작했다.
정확히 기억은 나지 않지만 구글 자바 컨밴션, 네이버 핵데이 Java 컨밴션, 그리고 우테코 intellij Java code style을 정독했었던 것 같다.
해당 컨밴션들이 조금씩 상이하기에 컨밴션의 합집합을 정리해 컨밴션을 익히고 인텔리제이에 코드 스타일을 적용하고 코딩을 시작했다.
부트캠프에서도 팀 프로젝트를 진행할 때 마찬가지로 항상 코딩 컨밴션, 커밋, 이슈, PR, 컨밴션을 먼저 정하고 시작했다.
그러다 최근 "왜 규칙을 지켜야 하는지?"에 대한 생각을 하지 않았다는 것을 깨닫게 되었다.
사이드 프로젝트를 하면서 코드 리뷰를 하는데, 다른 팀원이 서비스 단에 상수를 다음과 같이 작성한 것을 발견했다.
(예시)
private final int DEFAULT_AGE = 15;
그래서 나는 큰 고민을 하지 않고 다음과 같이 리뷰를 남겼다.
"
필드가 상수면 private final
보다 private static final
로 작성하는 것이 좋지 않을까요?
"
그렇게 리뷰가 끝날 줄 알았는데 얼마 있다가 "띠링" 깃허브 알림 소리가 폰에 울리며 댓글이 달린 것을 확인했다.
"
그런데 스프링은 어차피 싱글톤이니까 private final
로 작성해도 상관없지 않나요?
꼭 static
일 필요가 있을까요?
"
순간 머리가 띵해졌다. 아... 맞는 말이다. 왜 나는 한번도 이런 생각을 못했지?
그런데 규칙을 지키지 않는 것이 불편했다. 불편함을 해소하고 싶은데 다음과 같은 말 이외에는 반박할 말이 없었다.
"어... 그런데 자바 컨밴션이니까 지켜야 하지 않을까요...?"
그러면서 내가 지금까지 습관적으로 작성하는 코드들을 돌아보며 누군가가 깊게 질문을 했을 때
"자바 컨밴션이에요!"
"규칙이에요! "
...라고 말하는 것 외에 설득력 있는 얘기를 할 수 있을까? 하면 아니었다.
"규칙을 왜 지켜야 하는가?"에 대한 얘기를 하자면 개인적인 의견으로는 사실 크게 보면 두가지가 있는 것 같다.
하나는 규칙을 지키면 팀원이 누가와도 쉽게 이해할 수 있는 것
마치 mvc
구조로 짠 코드를 보면 mvc
에 익숙한 사람이면 Spring mvc
던, nest.js
던 누구나 쉽게 이해할 수 있는 것처럼.
또 다른 하나는 코드를 작성하면서 비즈니즈 로직 외에 고민을 줄여줄 수 있는 것.
상수도 선언하는 방법이 되게 많다.
Enum
, private static final
, 아니면 abstact
클래스나 final
클래스에 변수를 public static final
로 다 몰아넣는 것도 방법이겠다.Spring
을 사용한다면 yml
로 값을 주입받아서 관리하는 것도 방법일 수 있다.
"No silver Bullet"이라고 프로그래밍에 있어서는 사실 어떤 방법이든 장, 단점이 있기 마련이기에
이런 부분을 컨밴션을 정해둔다면 사소한 부분에 대한 고민을 줄이고 메인 로직에 대한 고민에 집중할 수 있게 해줄 수 있다고 생각한다.
그리고 컨벤션을 지킨 코드는 팀원이 바뀌어도 다른 사람의 코드를 읽을 때 이해하고 적응하는 속도가 더 빠르다고 생각한다.
하지만 컨밴션에 대한 지식이 하나도 없는 누군가가
"왜 이렇게 해야 하나요?"
질문했을 때 설득력 있게 이해한 상태에서 써야 한다고 생각이 들었다.
습관적으로 상수는 private static final
, 자바 + 스프링을 쓰면서 사용하는 빌더 패턴, 그리고 Lombok
을 사용하지만 Lombok
의 위험성으로 인해 사용하지 않는 일부 어노테이션 등...
"이렇게 코드를 짠 이유가 뭐에요?"라고 물었을 때 "그냥요" 라는 말을 제일 싫어했던 내가,
"컨밴션"이라는 이유로 습관적으로 코드를 치면서 왜 그렇게 해야되는지에 대한 이유도 깊게 생각하지 않고
왜 그런 컨밴션이 만들어졌는지 고민도 않고 어느 순간 기계적으로 짜고 있는 모습이 보였다.
습관적으로 코딩하는 것에 대한 경계가 필요하다고 생각이 들었다.
적어도 배경 지식이 아무도 없는 사람이 왜 그렇게 해야 하냐고 물어봤을 때 "컨밴션을 찾아보세요"라는 말을 하기보다
설득력 있는 말을 할 수 있는 사람이 되고 싶다.
코드스쿼드에서 마스터 강의를 들을 때 JK인지 크롱이 하신 말씀인지 정확히 기억은 나지 않지만 이런 말씀을 하셨다.
(기억이 잘못되었다면... 죄송합니다... ;ㅅ;)
"만약에 지금 당연하게 하고 있는 것이 있다면, 그것이 진짜 당연하게 해야 하는 것인지 생각해야 한다."
최근에는 내가 짠 코드를 남한테 설명할 일이 없다보니 생각없이 습관대로 코딩하는 시간이 많은데,
상황이 그렇다면 주기적으로 스스로의 코딩 상태를 돌아봐야겠다는 생각이 들었다.
'💬 생각 정리' 카테고리의 다른 글
프로그래머의 자질 (2) | 2024.08.25 |
---|---|
내가 만들어가는 거대한 레거시 (0) | 2024.08.16 |