'한국산업기술대'에 해당되는 글 9건

  1. 2012.02.23 JSP 개발환경 설정하기. (3)
  2. 2012.02.06 컴파일러와 인터프리터의 비교 (7)
  3. 2012.02.03 인터프리터란? (1)
  4. 2008.12.25 제 1장. Hello World! - ANSI C의 기본골격을 알아보자 (6)
  5. 2008.12.25 제 0장. 실습

현재 내기 있는 연구실에서는 JAVA. & JSP를 이용하여 개발하는 환경이 대다수이다.
일단 우리 연구실의 개발환경을 소개하겠다.

현재 사용하고 있는 프로그램은 다음과 같다.
이 모든 프로그램들은 무료로 배포되고 있는 프로그램들이라 누구나 손쉽게 접근 할 수 있는 프로그램들이다.

JDK -> 1.6.x Ver.
HTTPD & WAS -> Tomcat Ver 6.x.x Ver.
Cygwin
eclipse -> Jave EE Edition

Java와 JSP의 개발환경을 구축하기 위해서는 먼저 JDK부터 설치하여야 한다.
가장 먼저 oracle 에서 제공하는 JDK 배포 홈페이지를 방문하여야 한다.
(현재 우리 연구실에서는 JDK 1.6Ver. 를 사용하기에 구버전을 다운받았다. 하지만 개인의 설정에 따라서 다른 버전을 사용하여도 지장은 없다.

012


위의 사진과 같이 Oracle 홈페이지에 가서 해당하는 JDK 버전을 다운 받은 후 설치 프로그램을 실행하면 된다. 아래의 사진은 설치프로그램을 실행하였을 때 실행되는 화면들이다.

012345


우리가 사용하는 환경설정의 경우 JDK, JRE의 설치 경로가 다를 필요가 없기 때문에 기본 세팅값을 사용하였다. 하지만 JDK의 경우에는 설치 주소를 변경하면 환경변수만 수정해 주면 사용할 수 있지만 JRE의 경우 인터넷에서 사용되고 있는 프로그램들이 기본 설치주소를 참조하기에 에러가 나는 경우가 있으니 주소변경을 삼가도록 하자.

012345


JDK의 설치가 끝났다면 윈도우에 환경변수 등록을 해주어야만 한다. 위 과정은 위의 슬라이드 쇼와 같으며 그림의 사각형의 부분을 클릭하거나 따라 타이핑하여도 설정이 쉽도록 만들어졌으므로 쉽게 따라할 수 있을것이다.

우리가 등록하여야 할 환경변수는 총 3가지가 있는데
JAVA_HOME, Path, CLASSPATH이다.

JAVA_HOME은 JAVA가 설치된 위치를 의미한다. 우리가 JAVA개발환경을 구축한적이 없으므로 기본설정값이 없다. 따라서 새로 만들기를 눌러 직접 생성을 해주어야 한다.
변수값에는 JDK가 설치된 절대경로를 입력하면 된다.

Path는 윈도우에서 사용할 명령어들이 탑재된 주소를 입력해 주면 된다. JDK에 포함된 명령어들은 자바를 설치한 곳 아래 bin이라는 폴더에 들어있다. 이미 설정되어 윈도우에서 기본적으로 사용되고 있는 명령어들의 주소가 있기 때문에 시스템 변수에서 찾아 수정을 통해 추가하여야 한다.
Path의 가장 뒷 부분에 ;%JAVA_HOME%\bin
을 추가시켜주면 된다. 첨부된 이미지에서는 JAVA_HOME의 절대경로를 입력하여 세팅되었다.

마지막으로 CLASSPATH는 JAVA에서 사용하는 클래스들의 위치를 알려주는 것으로 JDK에 탑재된 값들은 JAVA설치경로 아래에 lib라는 폴더 안에 tools.jar이라는 파일로 묶여있다. 이것을 추가해 주어야 하는데 기본적으로 만들어져있는 값이 없으므로 새로 만들면 된다.
값에는 .;%JAVA_HOME%\lib\tools.jar로 입력하면 된다. 앞의 점을 빠뜨리면 안되니 유의하도록 하자.
(위의 캡쳐된 화면에는 .;%JAVA_HOME\lib\tools.jar로 되어 있는데 잘못 캡쳐한 부분이다.)

환경변수의 설정이 끝났다면 JDK가 제대로 설치되었는지 확인해야 하는 작업이 남았다.
CMD창에 들어가서 다음과 같은 명령어에 제대로 뜨는지 확인하도록 하자.

012


JDK의 설치가 종료되었다면 윈도우에서 마치 LINUX를 사용하는 것처럼 사용하게 하는 Cygwin을 설치해 보도록 하자. 아래와 같이 홈페이지에 들어가서 다운로드 파일을 받으면 된다.

012


시그윈의 경우 위의 슬라이드쇼와 같이 홈페이지에 들어가면 간편하게 다운받을 수 있다.
다운 받은 설치파일을 실행시키면 다음과 같은 진행순서에 따라서 프로그램이 설치되게 된다.

012345678910111213


cygwin의 미러사이트가 한국에는 없기 때문에 그나마 가까운 일본의 jaist를 선택하였다.
프로토콜방식은 ftp를 선택하였고, 설치할 패키지로는 vim과 ncftp를 설치하였다. 그 이외에도 많은 설정이 가능하지만 개발환경에 필요하지 않으니 그냥 기본설정으로 넘기면 된다.



설치가 완료되면 다음과 같이 cygwin의 아이콘이 나오게 되고, 더블클릭하면 아래와 같이 리눅스 명령어들이 실행되는 창이 뜨게 된다.


이번에는 Tomcat을 설치할 차례이다.
다른 프로그램들처럼 공식 홈페이지에 가서 프로그램을 받으면 된다.

012


여기서 Tomcat의 다운로드 위치는 실제로 Tomcat을 설치할 경로쪽에 받도록 하자. 우리가 받은 Tomcat은 인스톨 형식이 아닌 압축을 풀면 사용이 가능한 버전이라서 푸는 경로가 곧 설치 위치이다.
(Test결과 실제로 zip파일을 받아도 상관은 없다. 현재 압축형 파일들은 Java로 개발된 것인지 Windows와 cygwin환경 양쪽에서 다 구동되는 것을 확인하였다.)

cygwin에 들어가서 압축을 해제한다. 압축이 tar.gz으로 되어 있기 때문에 해제할때도 cygwin상에서
tar를 이용하여 압축을 해지하여야만 한다. 압축해지명령어는 다음과 같다.
tar -zxvf 파일명

압축을 해제한 디렉토리에 들어가보면 bin 디렉토리가 있을 것이다. 이 bin 디렉토리 안에 Tomcat을 켜고, 끌 수 있는 파일이 있으니 들어가서 startup.sh파일을 실행하여 Tomcat이 실행되는지도 테스트해 본다. Tomcat을 켜고 웹 브라우저에 http://localhost:8080을 쳤을때 캡쳐와 같은 화면이 나오면 정상적으로 올라온 것이다. Tomcat을 끌때에는 shutdown.sh를 이용하면 된다.

012345


Tomcat의 설치가 끝났다면 이제 마지막으로 이클립스만 다운받아서 설치하면 된다.
이클립스는 대표적인 IDE 툴로 JAVA나 JSP코딩을 할 때에 유용하게 쓰인다.
다른프로그램들과 마찬가지로 홈페이지에서 다운을 받으면 된다.

우리는 JSP와 JAVA의 프로그래밍을 병행할 예정이기 때문에 JAVA EE버전을 지원하는 버전으로 사용하여야 한다. 이클립스는 무설치버전이기 때문에 다운을 받아 그냥 실행하면 된다.

프로그램을 실행하게되면 workspace라고 작업하는 파일들을 저장할 경로를 선택하게 되어 있다. 필자의 경우에는 d:\dev 에 workspace라는 폴더를 만들어서 사용하고 있다. 확인을 누르면 안내페이지가 나오는데 꺼버리고, JSP작업을 하기 위해 우측 상단에 JAVA EE 인지를 확인한다. 그리고 설정으로 넘어가서 우리가 설치한 Tomcat을 잡고, 다이나믹 프로젝트를 생성한 뒤 JSP파일을 만들어서 돌려보면 된다. 이때 버그도 확인되고, 실행결과도 볼 수 있다.
(주. 이때 cygwin에서 Tomcat을 종료해놓지 않았다면 이클립스를 통해 결과물을 확인할 수 없다.)

01234567891011121314151617


하지만 이와 같은 방식은 이클립스에 상당한 과부하를 주게 되므로 간단한 파일일 경우에는 모르나 큰 프로그램의 경우에는 사용을 지양하는것이 좋다. 따라서 코딩만 이클립스에서 하고, Tomcat에 해당 소스코드를 연동하여 실행하는편이 프로그램의 과부하를 줄이는 길이다.

아래의 코드는 http://localhost:8080/project 를 다른 위치의 디렉토리에 연결하는 방법이다. server.xml에 context를 추가하여 연결하면 된다. Tomcat 5.5부터는 server.xml에 context를 직접 작성하지 않고 conf/Catalina/localhost/ 에 project.xml 이라는 이름으로 context를 만들어서 사용하는것을 권장하고 있다.

아래의 캡쳐를 따라해 보도록 하자.

01234


이 방식으로 작업할때의 파일은 D:\dev\workspace\WebProject\WebContent 안의 파일을 편집하여 하고, 이 코드를 확인할때는 Tomcat을 활성화시켜서 http://localhost:8080/project/파일명
을 이용하여 하면 된다.

이번에는 JSP의 환경 설정법을 알아보았다. 익숙하지 않겠지만 가능하면 cygwin을 적극적으로 활용하여 server 설정을 변경해 보도록 하자. 대부분의 서버들은 유닉스/리눅스를 이용하기때문에 cygwin 환경에 익숙해지지 않는다면 간단한 서버설정변경도 힘들어지게 된다. 전문가적인 수준은 아니더라도 간단한 설정정도는 쓸 수 있도록 노력하도록 하자.
이것으로 JSP 개발환경 설정에 대한 포스팅을 마친다.

Posted by 청음

댓글을 달아 주세요

  1. 2012.03.23 18:02

    기억에...
    이클립스에 서버설정해놓은 뒤에 뭔가 문제가 있었던 것으로 기억함.
    가능하면 코드는 이클립스로 수정하고, 적용은 톰켓으로 확인할 것.

  2. 2012.03.27 11:27

    이클립스로 코드 작성 -> 시그윈으로 톰캣구동 -> 인터넷익스플로러(브라우저)에서 http://localhost:8080/project/test.jsp 치고하면 jsp파일은 잘 동작이 됩니다..

    근데 서블릿을 똑같은 방법으로 하고 http://localhost:8080/WebProject/ServletTest 를 입력하면
    The requested resource (/WebProject/ServletTest) is not available. 하면서 자꾸 자원을 못찾겠다고 나오네요.

    흠... 님이 말씀하신 project.xml이 문제일까요? 서블릿 매핑이나 다른거는 다 제대로 했거든요.

    • 2012.04.23 16:29 신고

      context경로가 어디로 잡혀있는지 확인해 보셔야 할 거 같습니다.
      context가 WebProject까지로 잡혀있다면

      http://localhost:8080/project/ServletTest
      로 경로를 주셔야 할 거 같습니다.

      해당 설정을 어떻게 해 놓으셨는지 모르겠네요.



      제가 관리를 안하는지라 답변이 늦었네요 ㅠ


어쩌다가 3부작이 되어버린 컴파일러와 인터프리터의 비교글...
드디어 마지막 글을 쓰게 되는군요.

앞서서 컴파일러가 무엇인지, 그리고 인터프리터가 무엇인지에 대해서 알아보았습니다.
그렇다면 비슷하지만 다른 두 프로그램이 어떻게 다른지에 대해서 표를 통해 알아보도록 하겠습니다.


두 프로그램을 단순히 비교하자면 이렇습니다.

컴파일러의 경우, 프로그램을 컴파일 하기 위해서는 모든 프로그램 소스를 가지고 한꺼번에 번역을 해서 목적코드를 제작합니다. 반면에 인터프리터의 경우 필요한 부분을 행(Line 보통 ';'으로 구분되는 단위)단위 구문으로 번역을 하여 바로 실행시킵니다.

이와 같은 특징 때문에 컴파일러의 경우 한꺼번에 모든부분을 번역해야 하기에 번역속도가 느린 편이라 할 수 있습니다. (일부분 컴파일 미지원) 반면에 인터프리터는 필요한 부분만 컴파일(번역)을 하기 때문에 하나하나를 컴파일 하는 속도는 빠르다고 할 수 있습니다. 대신에 프로그램을 실행하면서 컴파일을 동시에 수행하기에 프로그램을 구동하는 시간은 오래 걸리는 오래 걸리는 편입니다.

※ 정리
 -  컴파일러는 한꺼번에 컴파일을 하기 때문에 컴파일 시간은 오래걸리지만 목적프로그램을
    실행할때는 컴파일을 하지 않아 속도가 월등히 빠르다.
 -  인터프리터는 라인별로 컴파일을 하기 때문에 라인을 컴파일 하는 시간이 짧지만 프로그램을
     실행하는 동안 컴파일 작업도 같이하기때문에 프로그램 자체의 속도는 느리다.


그렇다면 프로그램 실행 속도가 컴파일러가 월등히 빠르다고 한다면 왜 컴파일러를 쓰지 않고 인터프리터를 쓰는 방식을 사용하는 것일까요? 그 이유는 개발의 편의성에 있다고 할 수 있습니다.

예를 들어 프로그래머가 신나게 프로그래밍을 했습니다. 그리고 열심히 컴파일을 1시간 30분에 걸쳐서 하고, 프로그램을 실행을 했습니다. 어라... 변수 하나를 이름을 착각해서 오류가 났습니다. 그렇다면 어떻게 해야 하느냐... 변수 하나의 이름을 바꿔가지고 1시간 30분을 마구마구 컴파일을 해야 합니다.

반면 인터프리터의 경우에는 어떨까요? 인터프리터의 경우 컴파일을 따로 하지 않고 바로 실행을 합니다. 마찬가지로 변수 하나의 이름을 착각해서 오류가 났습니다. 그렇다면 그냥 그 변수 이름을 수정한 다음에 다시 인터프리터로 돌리면 됩니다.

인터프리터에는 이러한 디버깅에 유리한 이점이 있습니다.

인터프리터에 유리한 이점은 하나가 더 있습니다.
여러 운영체제에서 사용할 수 있다는 점입니다. 예를 하나 들어보도록 하겠습니다. 컴파일러의 경우 윈도우 XP, 윈도우 VISTA같이 같은 계열이라도 엔진이 서로 다른 운영체제에서는 다시 컴파일을 해줘야 하는 경우가 있습니다. 물론 리눅스나 유닉스같은 운영체제라면 더더욱 그렇습니다.

반만 인터프리터의 경우에는 고급언어를 바로 인터프리터에 입력하여 실행하는 방식이기에 해당 운영체제의 인터프리터가 설치되어 있다고 한다면 따로 컴파일 과정 없이 사용이 가능합니다.

즉. 인터프리터의 경우 OS마다 호환되는 인터프리터만 설치되어 있다면 해당 소스를 여기저기에서 사용하기에 유리합니다.

※ 인터프리터의 장점
 -  전체를 컴파일하지 않기에 디버깅에 유리하다.
 -  OS별로 이식하기가 쉽다.


이러한 이점에도 불구하고 JAVA가 나오기 이전까지는 인터프리터 방식이 그다지 선호되지는 못했습니다. 그 까닭으로는 프로그램의 실행 속도가 컴파일러로 컴파일된 프로그램에 비해서 너무 느렸고, 또 고급언어로 된 소스코드를 이용해서 실행시키기 때문에 보안에 취약했기 때문입니다.

하지만 지금에 와서는 컴퓨터의 하드웨어적인 성능이 많이 올라가서 인터프리터 방식이라고 해서 컴파일러에 의해 컴파일된 목적프로그램에 비해서 그다지 뒤쳐지지 않게 되었고, 또 컴파일러와 인터프리터의 장점을 혼합하여 일차적인 컴파일을 통해 원래의 소스코드를 인터프리터가 읽고 사용하는 방식으로 확장되어 원본 소스코드가 공개되는 상황도 방지할 수 있게 되었습니다.

※ 현재의 경우 컴파일러와 인터프리터의 장점을 혼합하여 사용하게 되었다.

이 정도로 컴파일러와 인터프리터에 관한 내용은 마치려고 합니다.
혹시나 이 글을 읽는 사람들에게 도움이 될 수 있었으면 좋겠습니다.
긴 글 읽어주셔서 감사합니다.
Posted by 청음

댓글을 달아 주세요

  1. 2012.03.13 20:54

    잘보고 갑니다. 감사합니다 :)

  2. 2012.04.04 00:59

    감사합니다. 많이 배우고 갑니다. ^^

  3. 2012.05.11 09:57 신고

    1편부터 정말 좋은글 잘 보고 갑니다! 많은 도움 됐어요!

  4. 2013.10.10 20:47

    좋은 글 고맙습니다

이번에는 지난번 컴파일러에 이어서 인터프리터에 대해서 알아보도록 하겠습니다.
인터프리터는 지난번에 이야기했던 컴파일러처럼 고급언어로 쓰여진 프로그래밍 언어들을 컴퓨터가 실행하게끔 해주는 프로그램입니다.

위치상으로 봤을 때에는 다음과 같습니다.

고급언어 코드 -> 컴파일러    -> 기계어
고급언어 코드 -> 인터프리터 -> 기계어

고급언어와 기계어 사이에서 번역을 해주는 녀석이라는 점은 컴파일러와 인터프리터와 동일합니다.
하지만 컴파일러가 소스를 전부 변환을 해서 목적코드(exe파일)를 생성하는 것과 달리 인터프리터는 필요한 구문을 한줄(line)단위로 읽어서 번역하고, 바로 실행시킵니다.

즉, 컴파일러가 책을 번역해서 제본한 뒤 번역본(목적코드)를 주는 번역가라고 한다면 인터프리터는 외국어를 즉시즉시 번역해주는 동시통역사 인 셈입니다. 따라서 정확한 표현을 하면 이렇습니다.

고급언어 코드 -> 컴파일러-> 목적프로그램 -> 실행
고급언어 코드 -> 인터프리터 -> 실행

인터프리터는 컴파일러와는 달리 따로 목적프로그램 즉 exe파일을 만들지 않고 바로 실행됩니다. 또한 인터프리터를 통해 프로그램이 실행되기 때문에 따로 어셈블러도 필요가 없습니다. 정확하게는 어셈블러의 역할까지도 인터프리터가 한다고 보는게 맞습니다.

인터프리터의 특징으로는 컴파일러와는 달리 컴파일 과정이 보통 생략되거나 필요한 부분만을 다시 하기 때문에 수정을 했을 경우 컴파일러에 비해서 걸리는 시간이 짧습니다.
 
또한 인터프리터의 겨우에는 OS에 상대적으로 자유로운 고급 언어로 프로그램을 짜고, 이를 해당 OS에 맞게 구현된 인터프리터에서 직접 컴파일 하기 때문에 이식성이 높습니다. 그 예로는 웹 브라우져가 있습니다.
(HTML이라는 언어를 받아 인터프리터 방식으로 웹을 표현하는 것입니다.)

하지만 최근에 있어서는 이 인터프리터라는 방식이 확장이 되어 다음과 같은 방식으로 사용되기도 합니다.

고급언어 코드 -> 컴파일러 -> 인터프리터 -> 실행

컴파일러와 인터프리터를 동시에 사용하는 방식인데요, Java가 이에 해당합니다. java.exe.라는 인터프리터가 읽을 수 있는 바이트 코드라는 코드로 javac.exe라는 컴파일러가 Java언어를 번역을 해주는 겁니다.

고급언어 코드를 javac.exe에 의해 바이트코드로 변환을 하고, 이 바이트코드를 java.exe라는 인터프리터가 한줄씩 읽어서 프로그램을 실행시키는 것이지요. 이 방식은 컴파일러 방식과 인터프리터 방식의 장점만을 골라 취할 수 있는데요.

1. 원본소스를 공개하지 않아도 된다.
 - 인터프리터 방식은 원본 소스를 가지고 프로그램을 싱행하기 때문에 소스가 공개되어야 했습니다. 하지만 위의 방식은 1차 컴파일을 마친상태에서 그것을 배포하면 되기 때문에 소스가 공개될 이유가 없습니다.
2. 수정이 편하다.
 - 인터프리터 방식이기 때문에 수정시에 전채를 재 컴파일 하는 것이 아니라 읽어오는 부분만을 다시 컴파일 할 수 있습니다. 또한 Line by Line으로 읽어오기 때문에 어느 부분에서 에러가 났는지를 추정하기가 쉽습니다. 따라서 전체를 컴파일해야 하는 컴파일러 방식에 비해서 적은 시간 내에 수정이 가능합니다.
3. 이식성이 높다.
 - 각 운영체제별로 목적프로그램을 배포하는 것이 아니라, 해당 OS에 인터프리터를 설치하고 바이트코드 상태로 프로그램을 배포하면 사용이 가능합니다.

물론 인터프리터가 장점만을 가진 것은 아닙니다.
목적프로그램을 직접적으로 생성하는 것이 아니고, 프로그램을 실행시에 매번 번역을 해야 하는 방식이다보니 프로그램의 실행 속도가 늦습니다.

인터프리터에 대한 내용은 위의 내용 정도만 숙지하고 있으면 될 듯 하고,
컴파일러 방식과 인터프리터 방식의 비교는 좀 있다가 다른 포스팅을 통해 하도록 하겠습니다.
그럼 그때까지 안뇽~
Posted by 청음

댓글을 달아 주세요

  1. 2013.10.10 20:44

    감솨

 자. 여러분 어느것을 공부하든간에 공부를 할 때에는 가장 기초가 되는 단계가 있습니다. C언어에서는 Hello World가 바로 그 예이다. 이 Hello World는 그냥 창에다 Hello World라는 문장을 적게 만드는... 다소 바보스러운 프로그램이다. 그러나 일단 이 프로그램을 코딩해 봄으로서 C언어의 가장 기초가 되는 구성을 알아볼 수 있을 것이다.

Hello.c
(위 코드는 VirtualBox를 이용해 CentOS에서 작성한 소스입니다.)

 무려 빈줄 1줄을 포함하여 8줄밖에 안되는 프로그램이다. 일단 이 프로그램을 짜서 실행을 해 보자. 왜냐하면 이 프로그램을 구동해봄으로서 C언어가 어떤 느낌의 언어인지를 알 수 있고, 기본적인 작성 방법을 익힐 수 있기 때문이다.

 먼저 이 프로그램을 크게 4부분으로 나누어서 생각해 보도록 하자. 먼저 함수의 형태를, 다음으로 헤더파일에 대하여 그리고 마지막으로 프로그램을 작성할때 중요한 주석 작성에 대해서 간략하게나 알아보게 될 것이다.

1. 함수의 형태

 이 프로그램은 main이라는 단 하나의 함수로 구성되어 있다. 이 main이라는 함수는 콘솔기반의 C언어에서 정말 중요한 역할을 하게 되는데 코딩을 통해 작성된 실행파일을 구동하면 이 main함수를 처음부터 끝까지 수행하고 이 메인함수가 끝남과 동시에 프로그램을 끝내기 때문이다. 따라서 C언어로 작성된 프로그램은 main함수로 시작해서 main함수로 끝나는 것이 보통이다.

 초등학교 중학교정도의 수학을 공부한 사람이라면 응당 함수가 어떤 개념인지를 알 것이다.
그래도 잘 모르는 사람을 위하여 살짝 사전적 정의를 찾아보자.

 <수학> 두 개의 변수 x, y 사이에서, x가 일정한 범위 내에서 값이 변하는 데 따라서 y의 값이 종속적으로 정해질 때, x에 대하여 y 이르는 말. y가 x의 함수라는 것은 y=f(x)로 표시한다. ≒따름수.

 즉 입력값인 x에 따라 출력값 y가 변하는 녀석을 함수라고 한다. 프로그래밍에서의 함수도 이와 같다. 다만 입력값이나 출력값이 없어도 함수가 작동한다는 것과 함수의 결과만이 프로그램 전체에 영향을 끼치는 것이 아니라 그 과정적인 부분에서도 프로그래밍 방법에 따라 프로그램 전체에 영향을 끼친다는 점 정도를 다르다고 할 수 있겠다.

일단 기본적인 함수의 형태는 이러하다.
[반환형] 함수의이름([입력형])
{
//함수의 몸체
}

 여기서 반환형과 입력형은 입력되어지는 Data의 Type을 의미하며 이 Type들은 이미 C언어에 의해서 정의되어 있다.
char : 1byte의 문자를 저장할 수 있는 자료형
int : 4bytes 크기의 정수를 저장할 수 있는 자료형
double : 8bytes 크기의 실수를 저장할 수 있는 자료형
위의 3개의 자료형은 C언어에서 가장 대중적으로 사용하는 자료형들로 이 외의 자료형에 대해서는 추후 다시 설명하도록 하겠다.

 함수의 이름은 함수를 구분하게 도와주는 식별자이다. 함수는 이 이름을 이용해 호출을 하게 된다.
함수의 몸체는 함수를 사용할때 처리하는 프로세스적 알고리듬을 기입하는 부분이다. 예를 들어 위의 Hello.c 파일의 경우 main함수가 호출되면 printf라는 함수가 호출되게 되고 0이라는 숫자를 반환하면서 종료하게 된다.

 이때 printf()의 호출, return등의 연산을 수행하는 모든 문장들의 뒤에는 ;(세미콜론)을 붙여 문장의 끝을 나타내게 된다. 그리고 return으로 반환되는 값은 수학적 함수에 비교하면 y에 비교할 수 있는 것으로 함수의 결과값을 반환하는 것이다.
(함수의 이름인 printf와는 달리 printf()는 printf함수라고 읽는다.)

 이 외에도 함수의 선언과 정의, 함수의 호출등의 내용이 있지만 이는 추후 다른 장을 통해 따로 설명하도록 하겠다.

2. 헤더파일이란?

 헤더파일이란 자주 쓰는 함수의 집합과도 같은 것이다.
 우리가 프로그래밍한 Hello.c 파일에는 printf()라는 기입되는 함수가 사용되고 있다. 이 함수는 화면에 전달된 내용을 작성하는 함수로 이 프로그램을 수행을 했을 경우 다음과 같은 결과가 나오게 된다.


 위의 그림과 같이 printf함수는 우리가 직접적으로 작성하지 않았지만 실제로 "Hello C World \n"이라는 인자값을 전달받아 출력하고 있다. 그렇다면 이 printf()는 어디에 작성되어 수행되어지고 있는 것일까? 이 함수는 바로 stdio.h라는 헤더파일에 작성되어 있고, #include <stdio.h> 라는 헤더파일 포함을 알리는 선언에 의해 프로그램에 속해 있어 printf()를 사용할 수 있게 되는 것이다.

 이러한 헤더파일을 선언할때에는 한가지 주의해야 할 점이 있는데 헤더 파일의 포함을 알리는 선언은 프로그램 작성시에 가장 먼저 등장해야만 한다는 점이다.
(printf()에 대해서는 다음에 다시 설명하도록 하겠다.)

3. 주석의 작성

 주석은 프로그램을 작성할때 해석을 다는 것으로 파일의 첫부분, 헤더파일과 전역변수 위, main을 제외한 각각의 함수 위에 다는것이 보편적인 방법이다. 주석처리된 부분은 컴파일 과정에서 컴파일러에 의해서 자체적으로 무시되어진다. 주석을 다는 방법은 크게 두가지 부분으로 나눌 수 있다. 여러줄 주석과 한줄 주석이 바로 그것이다.
 여러줄 주석은 주석의 시작과 끝 사이의 모든 내용을 주석화 시키는 것이다.

ex)
/* 여기는 주석 부분입니다.*/
/*
이 주석은
여러줄에 걸쳐서도
사용이 가능합니다.
*/


위의 두가지 경우가 여러줄 주석을 이용한 방법이 되겠다. 반면에 한줄 주석은 //기호부터 그 있는 모든 글을 주석화한다.

ex)
이곳은 한 줄 주석부분에 포함되지 않습니다. //이곳은 한 줄 주석부분에 포함됩니다.
이곳은 한 줄 주석부분에 포함되지 않습니다.


오늘 작성한 Hello.c 파일에서는 여러줄 주석과 한줄 주석 두가지 방법의 주석이 모두 사용되었다. 이를 참고하는것도 한가지 방편이 될 것이다. 이 주석은 두가지를 섞어 사용할 수 있는데 단 여러줄 주석의 경우 중복하여 사용할 수는 없다.

ex)
/* (<- 주석의 시작 부분입니다.)
이곳은 주석에 포함됩니다.
//이부분은 주석에 포함됩니다.

/* (<- 이 주석의 시작 부분도 주석처리 되어버립니다.)
이곳은 주석에 포함됩니다.
//이부분은 주석에 포함됩니다.

*/ (<- 이 기호에 의해 주석이 마쳐집니다.)
이곳은 주석에 포함되지 않습니다.
//이부분은 주석에 포함됩니다.

*/  (<- 주석 여는 부분부분 없이 주석닫는부분만 있으므로 오류가 납니다.)

오늘은 Hello.c 파일을 통해서 C언어의 기본적인 부분을 살펴보았다. 컴퓨터 프로그램에 관한 지식이 없는 상태에서 이 프로그램을 보고 있으면 C언어라는 언어가 생각보다 복잡한 형식을 가지고 있는 언어라는 것을 알 수 있을 것이다. 그렇지만 포기하지 말자. 앞으로 C언어를 더 배우다보면 언젠가 "심심한데 C언어로 프로그램이나 한번 짜볼까?"라고 말하고 있는 자신의 모습을 볼 수 있을 테니까!
Posted by 청음

댓글을 달아 주세요

  1. 2008.12.28 01:30

    어렵다 .. ㄷㄷ

  2. 2009.03.11 20:57

    프로그래밍을 공부하고 있는 사람인데 청음님 강의 너무 마음에 드네요..
    이해가 잘 되게 설명해 주셔서 감사합니다.*^^*
    앞으로도 좋은 강의 많이 올려주셨으면 좋겠다는 작은 바램이...ㅎㅎㅎ

  3. 2009.10.18 11:02

    C언어를 간단하게 정리를 해주셔서 감사합니다.
    처음으로 C언어의 골격을 익혔네요.(이래저래 하다가 오늘 결국 골격을 익힘..휴)

    • 2009.11.03 22:25 신고

      음;;;;
      사실 여기까진...
      하루치도 안되는 분량이랍니다 뉴_뉴...

      교재보고 스터디에서 가르치는건 쉬운데;;;
      막상 그걸 블로그에 작성하려니 어렵네요;

  4. 2010.09.03 00:52

    잘 보고 갑니다 ^^

이번 실습은 PUTTY를 얼마나 능숙하게 사용하느냐를 연습하는 부분입니다.

일단 다운받은 PUTTY를 켭니다.

HOST_NAME에
http://computer.kpu.ac.kr
을 친 뒤 open 버튼을 누릅니다.
이때 connect type은 SSH에 맞춰주도록 합니다.

검은창에
login as :
라는 글이 보일 것입니다.
학교에서 받은 아이디를 입력합니다.

입력 후
아이디@computer.kpu.ac.kr's password :
라는 글이 보일 것입니다.
패스워드를 입력합니다.
(패스워드를 입력할 시에는 화면에 아무런 변화도 나타나지 않습니다.)

제대로 로그인이 되었다면
computer%
라는 문구가 보일 것입니다.

이 상태부터 실습을 시작합니다.

1. 현재의 자신의 폴더 위치를 확인합니다.
$ pwd
를 입력합니다. ($ 는 커멘드 상태라는것을 의미합니다. 실제 명령어는 'pwd'만 입력하면 됩니다.)

2. programing 폴더를 작성합니다.
$ mkdir programing

3. programing 폴더로 이동합니다.
$ cd programing

4. programing 폴더 안에 오늘 날자로 폴더를 만듭니다.
$ mkdir 081225

5. 오늘 날자로 만들어진 폴더로 이동합니다.
$ cd 081225

6. 현재 자신의 폴더 위치를 확인합니다. (실행 뒤 1번과 비교해 봅시다.)
$ pwd

7. 임의의 폴더 test를 작성합니다.
$ mkdir test

8. 현재 폴더에 test디렉토리가 생겼는지 확인해 봅시다.
$ ls

9. test폴더를 지워봅시다.
$ rmdir test

10. 현재 폴더에 test디렉토리가 남아있는지 확인해 봅시다.
$ ls

11. 임의의 프로그램 1.c를 작성해 봅시다.
$ vim 1.c

12. vim 에디터를 이용해 다음의 내용을 작성해 봅시다.
(vim 에디터 사용법은 유닉스 책을 보시고 공부하시기 바랍니다.)

#include <stdio.h>

int main(void)
{
printf("Hello World! \n");
return 0;
}

13. 작성한 1.c 파일의 내용을 확인해 봅시다.
$ cat 1.c

14. 작성한 1.c 파일을 코딩해 봅시다.
$ gcc 1.c

15. a.out 파일이 있나 확인해 봅시다.
$ ls

16. a.out 파일을 실행해 봅시다.
$ a.out
($ ./a.out 을 입력해야 하는 경우도 있습니다.)

17. a.out 파일을 삭제해 봅시다.
$ rm a.out

18. 현재 디렉토리 위치를 확인합니다.
$ pwd

19. 상위 디렉토리로 이동해 봅시다.
$ cd ..

20. 현재 디렉토리 위치를 확인합니다.
$ pwd

위의 20단계를 거치시면 유닉스의 아주 기본적인 사용법을 익히게 됩니다.
vim편집기의 사용법은 살자쿵 복잡하므로 생략하도록 하겠습니다.
vim편집기 사용법도 몇가지만 익히시면 쉽게 사용하실 수 있습니다.
Posted by 청음

댓글을 달아 주세요

이전버튼 1 2 이전버튼