프로그래밍에서 foo, bar 함수의 유래
첨부 '1' |
|
---|
프로그래밍 예제를 보면서 함수를 사용할 때 함수 이름에서 foo(), bar() 를 자주 접하게 된다.
사실 의미와 유래는 크게 중요하지 않지만 뭐든 알고 있으면 나쁠게 있나 ㅋㄷ;
위키피디아 설명에 그 기원이 대략적으로 나와 있다.
foo 란 정찰병의 약자로 아주 오래전부터 쓰여왔다고 한다.
전방 감시 사무관(forward observation officer)이란 명칭은 너무 길어 전쟁 와중에 정찰병~ 정찰병~ 이렇게 부르려면 뒤진다.
그래서 foo 라고 불렀고, 군대 은어가 된 셈이다.
foo 는 공군에서 foo fighter 로 자주 쓰였는데, 2차 세계 대전때 정체불명의 비행기(UFO)가 너무 많아 적군인지 아군인지 파악할 수 없었다.
그래서, 정찰비행기는 정찰겸 전투로 치르는 foo fighter 라 불리는 것이다.
foo fighter 를 자주 부르다보면 푸빠, 푸파~ 라고 터짜를 빼게된다.
그래서 나온 줄임말이 FUBAR 다.
[참고] FUBAR를 Fucked Up Beyond All Repair 의 약자(채팅약어)로 해석하는 사람도 있다.
(수리할 수 없는 상태로 망가진 엉망인..)
개인적으로는 프로그래밍에 사용되는 용어의 어원이라면 foo fighter 어원 쪽이 더 맞는것 같다.
foo는 이후에 여러 곳에서 등장했는데 한 게임의 프로그램에서는 foo()함수가 비밀을 알아내는 단초를 제공하는 단어를 표현했었다.
그래서, foo 함수는 게임에서 특정 비밀을 알아내는 단서를 제공하는 용도로 사용되었다.
그 이후에는 MIT 기차클럽에서 foo 함수와 bar 함수가 사용되었는데, 이 클럽의 방에는 2개의 문이 있었고, 각 문의 명칭이 foo 와 bar 였다.
MIT 기차클럽에서 foo 함수와 bar 함수를 쓴 이유는 기차의 레일 스위칭 원리에 있다.
기존의 아날로그식에서 전자식으로 변화되면서 기차 레일이 변경되는 신호는 열차에게 미리 전초병과 같이 알려져야 하며, 이 신호는 보드판에 불이 들어오도록 되어있어 열차 레일들의 스위칭 상태를 알 수 있었다.
이 스위치를 마치 전쟁에서 정찰병과 같이 미리 상황을 알려준다는 의미에서 foo 스위치라고 불렀기 때문에 사용되었다.
이 후에는 MIT 해커클럽에서 특별한 아이디어나 재미를 위해 foo 함수와 bar 함수를 통해 자주 인용되었다.
때문에 해커들에게는 foo와 bar는 특정목적을 위해 작동하는 정찰병과 같은 의미이며, 유사시 전투를 할 수 있는 bar의 목적도 가지고 있어 필요하면 목적을 위한 단서정보를 획득하고, 가능하면 목적자체를 달성하는 의미의 함수이다.
이후에는 foo와 bar 가 각 종 예제 및 강의에서 사용되었는데, 강의의 주제에 대한 의미를 알려주는 단초를 제공하는 예시 함수로써 사용되었으며, 예시 함수만으로 의미 이상의 의미를 제공하는 bar의 의미도 내포하도록 사용되었다.
지금은 FUBAR의 의미가 퇴색되어 아무 의미도 없는 그저 예시용 함수로 사용되어진다.
만약, 우리가 foo와 bar의 함수로 예시를 들 경우가 생기거나 특별한 프로그램을 만든다면, 이 foo와 bar의 의미를 알고 쓴다면 참 멋지지 않을까 생각해본다.
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
» | Develop |
프로그래밍에서 foo, bar 함수의 유래
![]() |
hooni | 2013.06.25 | 21488 |
276 | Develop |
[ios] PHP로 APNS 프로바이더~
![]() |
hooni | 2013.06.27 | 16992 |
275 | Develop |
[ios] APNS 클라이언트 구현 (pdf)
![]() |
hooni | 2013.06.27 | 15842 |
274 | Develop |
[ios] APNS 샘플 코드..
![]() |
hooni | 2013.06.27 | 0 |
273 | Develop |
[android] GCM 사용하기 1 (GCM 서비스 신청하기)
![]() |
hooni | 2013.07.06 | 51430 |
272 | Develop |
GCM 사용하기 2 (단말에 GCM 구현하기)
![]() |
hooni | 2013.07.06 | 23418 |
271 | Develop |
GCM 사용하기 3 (JSP로 GCM 푸시 서버 만들기)
4 ![]() |
hooni | 2013.07.06 | 25432 |
270 | Develop | git 브런치 배우기 (링크) | hooni | 2013.07.09 | 20706 |
269 | Develop |
[ios] App States
![]() |
hooni | 2013.07.22 | 13256 |
268 | Develop |
[ios] Background 에서 네트워크 사용
![]() |
hooni | 2013.07.22 | 11600 |
267 | Develop | [ios] 소소한 팁 (Rect,Point,Path,URL 등) | hooni | 2013.08.08 | 29535 |
266 | Develop |
[ios] libxml/tree.h file not found
![]() |
hooni | 2013.08.08 | 18773 |