3.20(화) 함수의 설계 원칙 정리

from Study/C언어 2007/03/20 18:30 view 21569
함수를 작성하는 문법과 호출하는 방법, 인수를 받아들이고 리턴하는 방법을 익히는 것은 그다지 어렵지 않지만

정말로 함수답게 잘 나누고 디자인하는 것은 무척 어렵고 단기간에 체득되지 않는다. 함수는 프로그램을 구성하는

단위로서 잘 나누어 놓으면 프로그램의 구조가 탄탄해지고 확장하기도 쉽고 재사용성도 좋아진다.

함수디자인은 오로지 많은 분석과 실습만으로 얻어지는 경험이다. 꾸준한 연습만이 해결책이라 할수있다.


함수를 잘 만드는 기본적인 지침

1. 함수의 이름을 최대한 설명적으로 작성하여 이름만으로 무엇을 하는 함수 인지, 이왕이면 어떻게 쓰는 것인지도

알 수 있도록 한다. Score, Draw, Test 라는 이름보다도 GetScore, DrawScreen, TestGameEnd와 같이 기능을

명시해주는게 보기도 좋고 효율적이다. 자바를 이용하여 코딩해 보면 GET,SET 을 주로 함수앞에 써서 값을

얻거나 정해줄때를 명확히 표현해준다.


2. 두번이상 중복된 코드는 반드시 함수로 분리한다. 3번도 아니고 2번인 이유는 해당 동작을 수정해야 할때를

생각해 보면 된다. 만일 2번의 중복된 코드가 있는데 이 코드가 논리적으로 맞지 않다면 수정을 해줘야 할 것이다.

그러나 일일이 찾아가서 두개를 모두 고친다는 보장은 없다.(나같은 놈은...특히) 실수로 한 곳을 고치지 않으면

이것이 바로 버그의 원흉이 된다. 또한 두번 중복되는데 3번은 안되고 그이상은 안되겠는가 .. 미래를 위해서라도..


3. 반복되지 않더라도 한 단위로 볼 수 있는 작업은 함수로 만든다. 설사 이 함수를 딱 한번만 호출하고 다른

곳에서 호출할 확률이 희박하더라도 이렇게 하는 것이 좋다. 코딩을 하다보면 출력을 해야 하는 부분이 있고

입력을 해야 하는 부분이 있을 것이다. main 함수내에서 이를 전부 처리해도 문제는 없다.

하지만 어디가 출력부인지 입력부인지 가독성이게 표시를 할 수 있나가 문제이다. 물론 주석으로 일일히

표시해 줘도 되지만 가독성이 떨어 진다. 함수로 객체와 비스무리하게 나눠 주면 재사용도 좋고 보수하기도 좋고..


4. 함수는 한번에 하나의 작업만 해야 한다. 함수는 프로그램을 구성하는 부품이며 부품이란 전체를 구성하는

원자적인 단위이다. 함수 하나가 출력도 하고 입력도 받는다면 굳이 함수를 쓸 필요가 있을까 고장이 나도

구조가 간단한 부품에서 나야 하지 않을까 .. 함수도 마찬가지라 생각이 든다.


5. 입력과 출력이 직관적이고 명확해야 한다. 인수는 함수에게 주어지는 작업거리인데 함수가 하는 일에

꼭 필요한 정보만 최소한의 인수로 받아들여야 한다.

void CheckStr(char *str, int len);

과 같이 함수에 인수를 넘기고자 했을 때 굳이 문자열의 길이 len을 넘겨주지 않아도 strlen이라는 함수로

문자열의 길이를 판별할 수 있다는 것이다. 불필요한 입력이 생겨버린 셈이다.


6. 함수는 자체적으로 에러 처리를 해야 한다. 파일을 처리한다든지(fopen) 초를 계산한다든지(mktime)

할 때 에러가 발생하면 이들은 -1 , null 을 반환 해준다. 이러한 반환값을 함수내에서 에러 처리를 해줘서

어떤 프로젝트로 가져 가든 별도의 수정없이 재사용 가능한 부품이 되게 해줘야 한다. 만일 에러처리를 모두

메인 함수가 담당한다면 이 또한 함수의 사용의미를 잃어 버리는게 아닐까..
Tag |

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다