기초적인 메소드 이름 만드는 법

일반적으로 메소드 이름을 아래와 같이 만들 것을 많은 곳에서 권하고 있다.

1. 동사 + 명사형 이름으로 만들 것 : getData() / set Data() / calculateData() / computeData


하지만 조금만 더 이해하고 나면 더 좋은 메소드를 만들 수 있다. 아래의 내용을 먼저 이해하고 넘어가도록 하자.


객체는 수동적(passive)이다

객체는 외부에서 메소드를 호출해 주지 않으면 아무 일도 하지 않는다. 객체는 완벽하게 수동적이기 때문이다. 따라서 메소드 명칭은 수동적인 객체에게 무언가를 시키는 형태의 이름이 되어야 한다. 즉 객체에게 명령하는 형식의 이름이어야 한다. 따라서 객체의 메소드 이름 만드는 규칙은 정확하게 말하면 아래와 같다.


메소드 명칭 = 명령형 동사 + 목적어

단순히 동사 + 명사형으로 생각하지 않기 바란다. 예를 들어 getData()라는 메소드 명칭은 "데이터를 가지고 온다."라는 의미로도 해석 할 수 있지만 좀 더 명확하게는 "데이터를 내놔!" 이다. 이렇게 해석하는 것이 좋은 이유는 객체를 구현할 때 좀 더 구현을 정확하게 할 수 있기 때문이다. 객체를 구현할 때 getData() 메소드를 구현하면서 "데이터를 가지고 온다" 라고 해석하고 구현하기 시작하면 구현이 꼬이기 시작한다. 반대로 객체가 "데이터를 내놔!"라는 명령을 받았을 때 해야 할 일을 getData() 메소드에 구현하면 된다고 생각하고 구현을 시작하면 구현이 매우 명료해 진다.


메소드 이름을 해석하는 관점

실제로 잘 되어 있는 오픈 소스들은 객체가 수동적이라는 관점으로 메소드 이름을 작성한다. 따라서 메소드를 해석할 때에도 이와 같은 관점에서 해석해야 한다. 객체가 sendEvent()라는 메소드를 가지고 있을 때 이를 "이벤트를 보낸다"라고 해석하지 말고 "이벤트를 보내라!"라고 명령하는 것으로 해석해야 한다. 유사하게 make(만들어라), add(더해라, 또는 집어 넣어라), remove(제거해라), initialize(초기화해라) 등으로 해석하는 편이 훨씬 소스를 이해하는데 도움이 된다.

Posted by 이세영2
,