결론부터 이야기하면 써도 된다. 아니, 써야 한다. 근데 '잘' 써야지 대충 쓰면 망한다.


이는 싱글턴과도 그 맥락을 같이 한다. 아마 싱글턴 쓰지마라! 소리도 정말 많이 들어봤을 것.


그럼 왜 그런가? 한 번 알아보자.



객체지향을 알고 있는 고수들을 위한 설명



고수들에게는 설명이 필요 없겠지만 그래도 풀어 설명하자면


이유는 단순하다. '사용자를 위해'.


이 때의 사용자는 미래의 내가 될 수도 있고, 내가 같이 일할 팀원이 될 수도 있다.




함수는 기능이고, 클래스는 함수의 집합이다. 따라서 클래스는 기능의 집합이라고 볼 수도 있을 것이다.


이 중에는 기능을 구현하기 위한 함수(내부구현)도 있을 것이고, 밖에서 끌어다 쓰기 위한 함수(기능이용)도 있을 것이다.


근데 모든게 public이면 어떻게 될까? 사용자 입장에서는 뭐가 뭔지 알 수 없게 된다.




예를 들어 세탁기를 생각해보자.


세탁기에는 정말 많은 기능이 있다. 통을 돌리거나 물을 채우거나 적당한 때가 되면 세제를 투입하거나... 뭐 건조기능이 있는 세탁기도 있고.


근데 사용자 입장에서는 이걸 다 알 필요가 없다. 사용자가 알아야 하는 일은 딱 한 가지 사실이다.


바로 "세탁물을 넣고 버튼을 누르면 2시간 쯤 뒤에 세탁이 끝난다".



그럼 사용자가 세탁기에 대해 알아야 할 사실은 '버튼을 누른다'는 행위 뿐이다. 이게 올바른 public 사용의 용례다.


세탁기가 모든 기능을 public으로 뒀다고 생각해보자.


그럼 어떤 모습이 될까? 세탁기 전면부가 버튼으로 도배된 모습이 나타날 것이다. 물추가 버튼 통돌이버튼 세제 투입 버튼...


개중에는 원래대로 원클릭으로 사용할 수 있는 버튼도 있겠지. 그럼 사용자 입장에서는 이 원클릭 버튼을 찾고 싶은데 노출된 기능이 너무 많아서 뭐가 뭔지 모르고 미치고 팔짝 뛸 일이 생긴다.


어쩌다가 겨우겨우 찾아서 세탁을 진행해도? 다음에 진행할 때 쯤이면 또 까먹게 된다.


그러면 어떻게 세탁기를 디자인해야하는지 알겠지? 꼭 필요한 기능만 public으로 빼두고 나머지는 private으로 감춰둬야한다.

 



왕초보들을 위해



여기까지 읽고도 이해가 안 가는 사람들이라면 아마 코드 구조를 제대로 짜지 못하는 사람일 가능성이 높다.


나 역시 그랬다... 그래서 처음 게임개발을 시작했을 때 정말 많이 헤맸다. 이걸 왜 하지 말라는 거임?? 하고...


하나의 클래스가 모든 일을 다 맡아서 하는 경우도 더러 있다. 이런 경우 정말 이해할 수가 없게 된다.

왜냐하면 public이나 private이나 그게 그거니까. 엥? 퍼블릭 쓰면 인스펙터에서 볼 수도 있던데 그럼 더 좋은 거 아닌가?? 하는 생각만 든다.




그러면 기능을 잘 분할하는 것부터 시작해야한다. 클래스가 하나의 역할만 할 수 있게 잘 분리해보자.


그리고 클래스 내부에서도 앞서 말했듯이 1. 내부구현과 2. 기능이용을 위한 부분으로 나누어 두어야 한다. 이게 엉키기 시작하면 재앙은 나중에 찾아온다.


구체적으로 어떻게 되느냐? 조금 만들다가 아! 이렇게 했으면 더 좋았을 것 같은데... 아 지금 고치기엔 너무 멀리왔네.


"그냥 새로 만들자."


그리고 다시 1일차로 돌아간다. 이걸 수 차례 반복하다보면 출시와는 점점 멀어지고 그냥 '가능성 있는 상태'에 머무는 고시낭인처럼 되거나 아니면 개발에 흥미를 잃고 떠나게 된다.




그러니까 지금이라도 클래스와 클래스를 분할하고 private과 public을 구분하며, 기능과 기능들을 묶어 함수로 만들어보자.


단!! 오버엔지니어링은 주의할 것. 초보자가 쉽게 빠지기 쉬운 함정인데 노엔지니어링(?)이나 오버엔지니어링이나 결국 저 위의 '새로 만들자'는 결론으로 귀결된다.


정 반대의 가치관인데 어떻게 같은 결론으로 도달하냐고? 저도 알고 싶지 않았어요.



이렇게 구분하다보면 외부 클래스에서 다른 클래스의 기능을 가져다 쓸 때


요즘은 다 인텔리센스같은거 쓰잖아?? 탭 누르면 나오는 기능들이 훨씬 깔끔해지고, 필요한 기능만 노출된다는 것을 알게 된다. 이게 생산성 측면에서도 훨씬 편함.





밥 먹어야 해서 급하게 마무리하느라 제대로 설명 못한 부분이 있을텐데, 혹시라도 궁금한 점 있으면 질문 바람. 아는 선에서 최대한 설명해줄게.



아참! 도움이 되셨다면 저희 게임 찜목록 한 번 씩 부탁드립니다 (넙죽)


Frostrain2 on Steam

Become the last conductor and rule over the final train society in a frozen world. Gather, expand, and forge your train while building powerful synergies with mighty artifacts. Your position—and the safety of your passengers—now rests in your hands.

store.steampowered.com