Programming/Study

public 함수와 private 함수의 배치 위치

JKROH 2023. 11. 20. 16:01
반응형

 이전까지 클래스에 함수들을 정의할 때, 나는 public함수를 무조건 private함수보다 위에 위치시켰다. 이유는 다음과 같다.

  1. public 함수는 공개된 API이다. 즉, 각 클래스가 담당하는 핵심 기능이다.
  2. 이런 핵심 기능들은 코드를 읽는 사람들에게 먼저 공개해야 한다.
  3. 따라서 소스파일의 상단에 위치시켜 코드를 읽는 사람들이 해당 클래스의 기능을 빠르게 파악할 수 있게 한다.

 이렇게 배치시켰을 때 장점은 확실했다. 소스파일을 읽을 때 크게 고민할 필요가 없었다. 내가 이 클래스를 왜 만들었는지를 쉽게 보여줄 수 있었다.

 

 문제는 오류가 발생하거나, 리팩터링을 할 때 나타났다.

 

 하나의 public 함수는 세부 구현을 많은 private함수에게 넘긴다. 다시 말하면, 오류가 어디서 발생했는지를 보려면 private 함수를 살펴봐야 하고, 리팩터링을 위해 세부 기능을 확인하기 위해서도 private 함수를 살펴봐야 한다. 그런데 public함수와 멀찍이 떨어진 곳에 private 함수들이 있으니 이를 확인하는 데 지나치게 오랜 시간이 걸렸다.

 

 내가 정의한 상세 기능이 어디에 있는지를 찾는 데에 어려움을 겪는 것은 차라리 나았다. private 함수가 다른 private 함수를 호출할 때 이 함수를 찾는 과정은 너무 어려웠다. 특히 이런 경우에는 비슷한 개념이라 네이밍 컨벤션이 같은 경우가 많아 더욱 구분이 어려웠다. 그런데 최근 프로젝트를 진행하면서 '굳이 public을 무조건 위로 빼야하나?'라는 생각이 들었다.

 

 public 함수를 모두 상단에 정의한 이유는 위에서처럼 공개 API를 먼저 노출시키기 위해서다. 그런데, 굳이 이렇게 하지 않고도 공개 API를 노출시키는 방법도 있다. Interface를 통해 공개 API의 이름을 선언하고, 이를 구현한 클래스에서 기능을 구현하면 된다. 이렇게 기능과 구현을 분리하고 Interface를 엔트리 포인트로 사용하면 공개 API의 가독성은 더 높아진다.

 

 Interface에서 이미 공개 API를 가독성 높게 정의했으니, 구현 클래스에서는 굳이 public 함수들은 억지로 위로 올려놓고 private 함수들은 억지로 아래로 내려놓지 않아도 된다. public함수가 호출하는 private 함수는 한 덩어리로 묶어서 작성할 수 있다. public - public - private- private - private 의 구조가 public - private - private - public - private - private이 될 수 있는 것이다.

 

 물론 호출하는 public 함수가 먼저 작성되어야 하는 것은 맞다. 코드 가독성을 위해 좀 더 추상적인 개념을 먼저 소개하고, 이게 어떤 함수인지를 세부 구현으로 표현하기 때문이다. 그렇다고 '다른 개념들을 억지로 한 군데에 몰아넣을' 필요는 없다는 것이다.

 

 특히 IDE에서는 추상 메서드들을 구현한 구현 메서드의 위치까지 확인할 수 있다. 중간 중간에 private 함수가 껴있다고 public 함수들의 위치를 찾아 헤매는 일도 없다는 것이다. 이번 프로젝트에서는 이런 코드 작성법을 적용하고자 한다. 어떤 차이가 있을지는 직접 체험해봐야 알겠지만, 높은 확률로 훨씬 가독성 높은 코드가 될 것이라 생각한다.

반응형