함수 구현시 올바른 방법은?
글쓴이: youngminny / 작성시간: 금, 2004/05/28 - 9:39오후
C에서 함수를 구현할 경우,function(char *p, int flag);
을 구현한다고 가정하고, 여기서는 flag의 값(0,1..)의 값에 따라서 내부에선 별도로 동작하는 함수를 작성했습니다.
이와 비슷하게
function1(char *p); function2(char *p);
와 같이 위 function을 여러개로 쪼개서 만들었습니다.
어떤 방식이 좋은 방식이 될 수 있을까요?
아시는 분의 얘기에 의하면 후자가 좋다고 하시는데, 제가 감각적(?)으로 안 와닿는군요..
여러분은 어떤식으로 function을 구현하시는지요?
Forums:
일단 모듈화가 잘 안되지 않나요..또,,, 단순히 생각하면 if문
일단 모듈화가 잘 안되지 않나요..
또,,, 단순히 생각하면 if문이 들어가므로 비교를 하게되서 미세하게나마 느려지겟내요..
상황에 맞게 사용하심이.....벗뜨...후자에 한표.
상황에 맞게 사용하심이.....
벗뜨...
후자에 한표.
https://nicesj.com
https://blog.nicesj.com
저도 후자가 좋다고 생각합니다.일단, 첫번째 처럼 flag 을 사용하
저도 후자가 좋다고 생각합니다.
일단, 첫번째 처럼 flag 을 사용하여서, 하나의 펑션을 사용하게되면,
return type 이 묶여버립니다.
function overloading 을 하더라도, 넘겨주는 인자들이 변할수는 있지만
함수이름과 리턴 타입은 바뀔수 없기 때문에, 차후에 다른 리턴값을 원하게
될때는, 어쩔수없이 칼을 많이 갖다대야 할겁니다.
lkjt님의 모듈화 문제가 어찌보면 여기에 속하는 문제일수도 있겠군요.
짧은 제 소견이었습니다.
삽질의 대마왕...
함수는... 하나의 기능만 하는 것이 좋습니다. 앞에서 글을 쓰신분들과
함수는... 하나의 기능만 하는 것이 좋습니다. 앞에서 글을 쓰신분들과 거의 같은 맥락인데, 작은 규모의 프로젝트의 경우는 별 문제 없는데,
규모가 커지면서는 상황이 다름니다. 딱하나의 기능이 있는 함수를 제공하고, 좀 더 복잡한 기능이 필요하다면 기존 것을 래핑해서 사용하는 쪽이
여로 모로 유리합니다.
Do you think that's the air you are breathing now?
각각 장단점이 있습니다.두가지 다른, 하지만 비슷한 액션이 하나의
각각 장단점이 있습니다.
두가지 다른, 하지만 비슷한 액션이 하나의 함수안에 구현되어있는 경우와
다른 함수에 있는 경우..
전자는 인터페이스 측면에서 구현해야할 함수가 적기 때문에 깔끔해집니다.
ioctl 과 같은 것을 생각하시면 됩니다. 주로 인터페이스 같이
하위 라이브러리를 만들때 설계시 도입하는 경우가 좋습니다.
후자로 가야하는 경우에는 한쪽이 다른 한쪽을 내부에서 불러쓴다거나 하는
형식으로 공통되는 코드가 없는 것이 좋습니다.
비슷한 코드가 다른 함수에도 있을 때는, 한쪽에 버그가 생길 경우에는
다른 한 쪽도 반드시 생각해야하는 관리상의 약점도 따라옵니다.
반면 공유하는 코드가 적고 인터페이스 측면이 적다면 나눠쓰는 쪽이
훨씬 좋겠죠.
예를 들면 stat, lstat 을 통합할 수도 있는데 나눈 것은 그런 고민의 결과였을 것입니다.
---
http://coolengineer.com
함수가 하는 일에 따라 틀리죠.코드가 거의 같고 flag에 따라서
함수가 하는 일에 따라 틀리죠.
코드가 거의 같고 flag에 따라서 어떤 변수값만 변한다면
전자가 낫고,
flag에 의해서 함수 자체가 크게 덩어리로 나누어 진다면(-_-;; 먼소리여..)
후자가 낫다고 생각합니다.
언제나 시작
여러분의 의견.. 많은 참조를 하겠습니다.개인적인 Style를 고집하
여러분의 의견.. 많은 참조를 하겠습니다.
개인적인 Style를 고집하다보니.. 전자를 무척 많이 사용했는데.. 지금와서 곰곰히 따져보니.. Program을 만들때, 생각없이 했다는 생각이 드는군요..
아직 갈길이 너무 멀군요.. 쩝
Re: 함수 구현시 올바른 방법은?
사용하는것에 따라 달리 해야겠지만..
거의 흡사한함수 인데 여러개로 할필요가 있을까요..
나중에 변할것을감안하여 첨부터 잘해야겠지요..
전자를 구현하려면 첨부터 많은고민이 필요하겠죠.. 나중에 확장성을 생각할때도 문제가 없는가..
함수의 분업화와 구조화 를고려한다면 전자로 설계하도록 하는게 좋다고 생각합니다.
많은 C 함수들을 보면 전자의 방식을 선택했습니다. 가장기본적인 open fopen 함수등만봐도 오픈형태를 인자를주어 사용하죠
이는 나중에 새롭게 필요한함수 인터페이스를 만들지 않아도 옵션추가만으로 확장할수있겠죠..
더구나 나중에 수정사항이 발생했을때를 감안한다면 전자는 한번의수정으로 끝이나며 후자는 함수갯수만큼 수정해야겠지요..
C++적인 스타일에서는 옵션보다 각각의 함수를 다만들어버리는식이죠.
제가생각할때 후자는 C++적이고 전자는 C적이라는 생각도 드는군요..
----------------------------------------------------------------------------
댓글 달기