예상 가능한 개발을 하는 개발자
개발을 전혀 모르는 친구에게 오늘 하루 있었던 일을 얘기했다.
“편의점에서 아이스크림을 사려면 어디로 가야 하지?”
“냉동실.”
“그럼 내가 냉동실에서 고른 물건이 아이스크림인지 아닌지 확인해야 할까?”
“그걸 굳이?”
“그런데 꺼내왔더니 아이스크림이 아니라 주스야. 그럼 어쩌지.”
“왜 그걸 거기다가 놔.”
“내 말이 그 말이야! 아이스크림은 냉동실에, 주스는 냉장고에, 그래서 냉동실에 꺼내온 물건이 아이스크림인지 확인하지 않아도 되고, 냉장고에서 꺼낸 물건이 주스인지 확인하지 않아도 되잖아.”
“응”
“그게 내가 일하고 싶은 방식이야.”
“….?”
최근에 업무 중 있었던 일이다. 어떤 상품에 대한 고유번호를 idx로 부여하고, 이에 대한 내용을 검토하던 중이었다. 그런데 코드를 보다 보니, idx의 변수 타입이 double이었다. 심장이 미친 듯이 뛰었다. 몇 가지의 생각이 스쳤다. 고유번호를 실수로 부여해야 하나? 고유번호가 정수 범위가 아닌 소수점 범위가 되는 이유가 무엇일까? long을 지원하지 않는 것일까? 그리고 해당 코드를 작성한 개발자분께 이유를 물었다. 그런데 되려 돌아온 답은 그게 뭐가 문제냐는 것이다. double 이면 메서드를 통해, long 으로 형 변환을 하면 되는 거 아니냐는 것이다. 여러분들은 어떻게 생각하시는지 궁금하다.
추가 히스토리에 대해서 이야기하자면, 이것은 Room 안에 테이블 내용에 관한 것이었다. Room 은 SQLite를 편하게 사용하기 위한 라이브러리이다. 그리고 Room을 사용한다는 것은 데이터 베이스에 관련된 내용을 다룰 때, Room을 통해 접근하기 때문에, SQLite 이전에 Room에 대한 이해가 있어야 한다고 생각한다. SQLite는 long이라는 데이터 타입이 없다. 개발자의 항변은, SQLite 에는 long 이 없기 때문에 Room에 사용하는 colmunInfo에 double을 사용했다는 것이다. 그런데 아이러니하게, Room 은 long을 지원한다. 뭐가 문제냐고 묻는다면, idx 값을 부르는 누군가가, 이 값이 double 인지 long 인지 고민해야 하는가이다. idx 값은 데이터 베이스 이외의 메모리에 모든 영역에서 long이었다. 냉동실에서 꺼낸 물건이 아이스크림인지 주스인지 우리가 고민해야 하는가?
이 이야기를 듣고 나는 내가 생각하는 개발의 방향에 대해서 설정하고, 이에 대한 검증과 개선을 거치고 싶었다. 여러 가지 개발 방법론이 있다. 스치듯 지나간 다양한 방법론들을 접했을 때는 사전적 의미를 이해하는 것 마저도 힘들었다. 개발 4년 차인 지금, 나는 내가 가고 싶은 프로그래머의 길을 정의해야 한다고 생각한다. 이런 다양한 방법론을 공부하기 전에 나의 중심을 잡아야 한다고 생각한다. 그래서 이 글을 작성한다.
사는 대로 생각하지 않고, 생각하는 대로 살기 위해서
개발을 하면서 내가 쾌재를 불렀던 순간 중 가장 기억에 남고 아직도 희열인 것은, 내가 기억도 못하는 코드가, 내가 예상하는 대로 있을 때이다. 우리가 list 형식이면 자연스럽게 list의 크기를 알기 위해 size라는 메서드를 기대하는 것과 같은 맥락이다. 나는 누군가와 함께 일할 때 더 행복하고, 퍼포먼스를 극대화할 수 있다고 믿는다. 그렇기 때문에 항상 협업을 고민한다. 당장 한 달만 지나도 내가 작성했던 코드에 대한 히스토리는 머릿속에서 하얗게 지워진다. 과거의 내가, 미래의 내가 나와 함께 협업하는 사람이라고 생각하고 일한다. 그래서 예상 가능한 패턴, 룰, 네이밍이 중요하다고 생각한다. 이런 것들은 아침에 출근할 때, 지갑이 어디 있는지 찾을 필요가 없이 항상 그 자리에 있는 것처럼, 중요하다.
객체지향 언어에서 말하는 여러 가지 특성이 있지만, 정보의 은닉화 즉 캡슐화가 협업을 위해 정말 중요하다고 생각한다. 위의 예시로 들었던 아이스크림을 먹기 위해서 우리가 알아야 하는 것은 무엇일까? 아이스크림이 어떻게 만들어졌는지? 아이스크림의 제조 공장의 위치가 어디인지? 아이스크림을 제조하는 공장에서 다루는 식품이 어떤 것들이 있는지? 정작 아이스크림을 사 먹고 싶은 고객에게 필요한 정보는 오직 아이스크림을 구매하고 먹는 방법이다. 오직 고객이 원하는 것에만 집중하고 나머지는 드러낼 필요도, 고객이 이해할 필요도 없다. 숨겨라. 그리고 이를 사용하는 고객이 기대하는 효과를 제공하라. 생각할 필요조차 없게.