[DEBUG-WINDOW 처리영역 보기]
즐겨찾기  |  뉴스레터  |  오늘의 정보  |  e브릭몰e브릭몰 회원가입   로그인
BRIC홈 동향
2019 Bio Top5 인터뷰
스폰서배너광고 안내  배너1
전체보기 Bio통신원 Bio통계 BRIC View BRIC이만난사람들 웹진(BioWave)
목록
조회 4670  인쇄하기 주소복사 트위터 공유 페이스북 공유 
바이오통신원   
[초심자를 위한 생물학+정보학] 변수들과 함수 - 08
생명과학 고주온 (2015-01-23)

_08_

- 변수들과 함수 -

지난 편 끝 부분에서 다루었던 '패턴 비교 연산자'와 그 전에 나왔던 변수에 대해서 더 알고 싶은 독자가 있을 듯하여 약간만 더 알아 본다. 사실, 아직은 변수의 운용이 어렵게 느껴지는 독자들이 있을 수 있다. 다짜고자 $ 표시만 갖다 붙이면 되는 것도 아니고... 이 부분과 '위치 매개 변수'를 조금 들여다 보자.

    (1) 변수의 값을 할당할 때에는 $ 표시를 쓰지 않는다. 일단 변수는 영문 알파벳으로 시작하자.
    (2) bash는 변수의 자료형 (숫자 또는 문자열)을 특별히 지정하지 않는다. 이 부분이 조금 혼란스러울 수 있다.
    (3) 변수에 할당된 값을 부를 때에는 $ 표시를 변수명 앞에 붙인다.
    (4) 변수에서의 문자열 처리 연산자에는 {} 기호를 사용한다.
    (5) $ 표시는 변수 표시뿐만 아니라, 명령의 실행 및 숫자 계산에 대한 bash 내장 문법에 사용된다.
    (6) 명령의 실행에는 ` (backquote, backtick)를 사용할 수도 있다.

사실, 변수 (variable)라 함은 그 값이 정해져 있는 상수 (constant)와 대비되는 개념으로서 할당되는 내용에 따라서 그 값이 변할 수 있게 되어 있는 개체이다. 프로그램 작성에 없어서는 안 될 중요한 개념이며, 융통성을 부여하는 데 지대한 역할을 한다.

지금까지는 문자열 위주로 진행했으나 이번에는 숫자와 관련된 내용도 나오는 것을 주의하고, 다음을 보자.

이번에는 숫자를 보자.

이런 식으로 변수를 계속적으로 사용하다 보면, 자연스럽게 변수 값의 할당과 호출 방식을 이해할 수 있지 않을까 한다.

내장 문법 외에도 숫자 연산에 사용되는 명령어는 let가 있다.


숫자 연산 명령어에는 이외에도 expr, bc 등이 있으니, 관심 있는 독자들은 한 번 확인해 보기 바란다. 이제 이 정도는 소화할 수 있으리라 생각된다.

이렇게 겉보기에는 숫자와 문자열을 다루는 변수가 같아 보이지만, 실제 연산에 있어서는 내부에서 별도의 체계로 취급된다. 그 이유는 컴퓨터에서 사용하는 자료형 (data type) 때문이다. 자료형에 대해서는 조만간 자세하게 다룰 기회가 있을 것이다.

이번에는 조금 특별한 변수를 살펴 보자.

위에서 본 변수는 모두 영문 알파벳으로 시작하는 이름을 갖고 있다. 그렇다면 숫자로 된 변수는 어떨까? 다음의 내용을 print3_sh라는 파일로 저장해 보자.


위에서 보는 것과 같이 $1, $2, $3 등의 변수는 명령행에서 주어지는 값을 순서대로 받는 명령행 인자를 의미한다. 이런 종류의 변수를 '위치 매개 변수 (positional parameter)'라고 하며 명령 스크립트의 인자 위치에 해당되는 값을 할당 받는다. 주어지는 인자가 한 개일 때 (7), 두 개일 때 (8), 세 개일 때 (9)를 보면 알 수 있다. 그런데, 스크립트에는 없는 네 번째 인자가 주어지는 경우 (10)에는 그냥 무시하게 된다 (10.1). 주어지는 인자가 없을 때는 물론 출력값이 없다 (11). 그러면, 여기서 어떤 독자는 궁금한 게 있을 것이다. $0은 어떨까? 또, 해당 스크립트의 첫 번째 행이 지난 번과 다른데?

먼저, 스크립트의 첫 번째 행은 env 명령어를 적용해서 시스템의 이식성을 높이는 방법을 사용한 것이다. 스크립트를 하나의 정해진 시스템에서만 사용할 것이라면 아무 상관이 없으나, 다른 *NIX 시스템에서도 사용할 가능성이 있다면 env를 사용하여 해당 쉘 (여기서는 bash)을 시스템에 관계없이 인식할 수 있도록 한 것이다.

$0는 한 번 확인해 보자.



위와 같이 스크립트를 변경하고 실행해 보자.


보는 바와 같이 $0는 스크립트 자체를 의미한다. 이 외에도 또 다른 중요한 특수 변수로 $@$#가 있다. 확인을 위해 스크립트 내용을 다음과 같이 바꾸어 보자.



위의 결과에서 보는 바와 같이 $@는 입력하는 인자의 갯수와 관계없이 변수의 수를 확장해서 적용한다. 그리고, $#는 입력하는 위치 매개 변수의 갯수를 그 값으로 한다.

이러한 위치 매개 변수는 쉘에서 입력을 받을 때 대단히 유용하게 사용할 수 있는 중요한 쉘 변수이다. 기억해 둘 필요가 있다.

쉘에서 유용하게 사용되는 패턴 검색 도구로 grep (Global Regular Expression Print), egrep, fgrep 등이 있는데, 이들 가운데 grepegrep은 메타 문자를 이용한 정규 표현식을 사용한다. 사실, 정규 표현식에 대한 내용만으로도 상당량이 되는 관계로 이에 대해서는 후에 기회를 따로 만들기로 하고, 지금은 함수 (function)의 개념에 대해서 알아 보기로 하자.

일반적으로 함수라고 하면, 두 집합 (예컨대, 정의역 X와 공역 Y) 사이의 대응 관계에서 일대일 (1:1) 또는 다대일 (n:1) 관계일 때 함수 관계가 성립한다고 한다. 달리 말하자면, 어떠한 입력값에 대해서도 출력값이 단일값이어야 한다는 의미이다. 이를 간단한 식으로 표시하면 다음과 같다.

f: X -> Y 또는 f(x)=y

그림으로 표현하자면 다음과 같다.


이미지 출처: http://en.wikipedia.org/wiki/Function_(mathematics)

여기까지는 독자들도 이미 많이 접해 본 내용일 것이다. 그런데, 컴퓨터를 사용하는 분야에서의 함수의 중요성은 여러 가지가 있지만 간략히 보자면,

   (1) 코드의 재사용
   (2) 프로그램의 구조화
   (3) 협업 시 효율화

등을 들 수 있다. 어떤 입력에 대한 처리 과정이 정해진 경우에,

[입력 --> 함수 상자 --> 출력]

의 형태를 만들어 놓을 경우, 이 '함수 상자'를 여러 프로그램에서 가져다 쓸 수 있도록 작성하면 비슷한 기능의 프로그램을 여러 번 반복해서 만드는 수고를 덜 수 있다. 또한, 이런 '함수 상자' 여러 개를 순서를 바꾼다든지 횟수를 조절한다든지 하는 방식으로 활용할 수도 있다. 특히 중요한 것은, 규모가 큰 프로젝트를 위하여 여러 사람이 공동 작업을 할 경우, 좋은 (병렬화) 설계를 통하여 동시에 작업함으로써 효율성을 높일 수 있게 된다. 즉, 입력 형태 (자료형, 입력 수 등)와 출력 형태를 정형화하면 실행 순서와 관계없이 프로그램을 모듈화하여 구성할 수 있게 된다. 물론 개인적으로는 코드를 재사용할 수 있다는 것이 큰 장점이 되겠다.

다음 편에는 bash에서 함수의 예를 보는 한편, 지금까지 진행해 온 내용을 한 번 정리하고 가는 것도 좋겠다.

- 고주온박사(필명)의 "초심자를 위한 생물학+정보학"은 매주 정기적으로 연재될 예정입니다. 아래 PDF 다운 받으셔서 읽는 것도 가능합니다. -
파일첨부 1: 08_varfunc.pdf (536 KB)
  추천 4
  
인쇄하기 주소복사 트위터 공유 페이스북 공유 
  
고주온(필명)
(http://bioprofiler.tistory.com)
IBM-XT시절부터 개인용 컴퓨터를 사용하였으나, 강산이 변한 지금도 어제 코딩한...
다른 연재기사 보기 전체보기 >
[초심자를 위한 생물학+정보학] R과 도표 - 52
과학의 어느 분야든 연구 활동의 결과물은 그것을 보는 사람의 이해를 돕기 위하여 도표의 형태로 표현하게 된다. 많은 경우에 있어서 수치 계산과 각 실체의 연관 관계 등 통계 분석이...
[초심자를 위한 생물학+정보학] 리눅스에서 사용할 수 있는 논문 작성 도구 2 (LaTeX과 Mendeley 등) - 51
잘 아는 바와 같이 문서나 논문의 작성을 위해 사용하는 도구로 워드 프로세서 (word processor)로 불리는 문서 작성기를 사용한다. 최근에 많은 부분이 자동화되기는 했어도...
[초심자를 위한 생물학+정보학] 리눅스에서 사용할 수 있는 논문 작성 도구 (LibreOffice Writer와 Zotero 등) - 50
연구하는 사람에게 연구 활동의 성과라고 할 수 있는 결과물은 결국 논문이라고 볼 수 있다. 그런데, 자료의 수집·분석과 그 결과에 대한 논문 작성을 각각 다른 컴퓨터에서 한다...
본 기사는 네티즌에 의해 작성되었거나 기관에서 작성된 보도자료로, BRIC의 입장이 아님을 밝힙니다. 또한 내용 중 개인에게 중요하다고 생각되는 부분은 사실확인을 꼭 하시기 바랍니다. [기사 오류 신고하기]
 
  댓글 0
등록
오스테오시스
연구정보중앙센터
위로가기
동향 홈  |  동향FAQ  |  동향 문의 및 제안
 |  BRIC소개  |  이용안내  |  이용약관  |  개인정보처리방침  |  이메일무단수집거부
Copyright © BRIC. All rights reserved.  |  문의 member@ibric.org
트위터 트위터    페이스북 페이스북   유튜브 유튜브    RSS서비스 RSS
에펜도르프코리아