2011년 4월 19일 화요일

자바의 기본문법(Structure)


예고편(?)을 본 이들은 이미 알겠지만 그래도 시작하려니 머리가 지끈지끈 아플 것인데 특히 위의 프로그램이 엄청나게 어려운 자바 소스(?)니까 말이다. 하지만 필자를 믿고 따라오면 과반수 이상, 아니 절반, 아니 반의반 정도는 이해하고 고개를 끄덕거리는 뛰어난 천재(?)가 있기를 기대하면서 본격적인 강의를 시작해볼까 한다.

여러분은 이미 자바의 모든 것을 갖추었다. 자바소스만 빼고 말이다. 그렇다면 설치된 자바 에디터를 열고 새로 시작하기 버튼 눌러 파일이름을 맨 첫째줄과 같이 Test1.java 라고 만든다. 그리고 위와 똑같이 자바 코드를 프로그램에 입력하라. 묻지도 따지지도 말고 똑같이 말이다.(잘 안보이면 마우스로 그림을 클릭~) 여기서는 코드를 그냥 쓰면 잘 안보이는 관계로 울며 겨자먹기로 그냥 타이핑해야 되지만 행여 다른 곳에서라도 코드를 마우스로 복사해서 붙여넣기하는 잔머리 뛰어난 인간들이 있을지 모르겠으나 프로그래밍 할때 타이핑 하는 시간을 아끼지 말아라. 프로그래머는 자고로 시간을 아끼지 말고 철저히 시간을 낭비(?)해야 발전할수 있는 이상한 곳이니까 말이다. 희한하게 자기가 시간을 들이고 직접 쳐봐야 자기 것이 된다. 이것이 프로그래머들이 공공연하게 가르쳐주지 않는 최고의 비밀(?)이 아닐까 생각한다.

자 다 입력했다면 프로그램을 실행시켜보자. 명령 프롬프트창을 열고 자바파일이 있는 디렉토리안에서 아래와 같이 순서대로 입력한다.

javac Test1.java
java Test1

첫째줄은 컴파일하라는 뜻이고 한마디로 자바소스를 읽어서 실행할수 있는 형태의 파일(.class)을 만들라는 것이고 둘째줄은 그 파일을 실행하라는 뜻이다. 실행할때는 확장자를 빼고 써야됨을 절대 잊지 말자. 참고로, 자바 에디터를 써서 입력했다면 파일이름(만드는 원리를 저번시간에 설명했는데 기억을 하고 있는지 원..-)을 만들어서 저장하고 Run 이나 Compile이라는 명령어를 찾아 마우스를 클릭한다. 플레이 버튼의 아이콘이 자바 에디터에선 보통 이런 명령어다. 프로그램을 실행해보면 글자가 화면에 출력될 것이다. 자바소스와 출력된 화면에 글자들이 어떻게 찍히는지 살펴보도록 하고 디렉토리안에 어떤 파일들이 생기는지 또한 찾아보기 바란다.

아까 여러분이 코드를 치면서 한가지를 느꼈을 것이다. 자바 파일이름과 public class 옆에 있는 이름이 파일확장자만 빼면 같다는 것을 말이다. 자 굉장히 중요한 개념을 설명하려한다. 묻지도 따지지도 말고 무조건 외워라. 복창한다. public class 옆의 이름은 자바의 파일이름과 토시 하나 틀리지 않게 똑같이 만든다. 그래야 작동한다는 전설(?)이 자바 왕국에 있다. 이게 바로 그 유명한 자바 파일이름 만들기의 핵심원리다. 자기 마음대로 아무 이름이나 자바파일에 갖다붙여서 쓰는 황당한 이(?)들이 앞으론 없길 바라면서 계속 진행한다.

쳐보니 또 한가지 느끼는게 있을 것이다. 생각보다 길다고? 앞으로 더 긴 코드가 무궁무진하니 이걸로 겁먹지 말자. 일단 자바를 잘하기 위해서는 영어(?) 공부를 무쟈게 열심히 해야한다. 왜? 자바 코드를 한글로 쓰나? 당근 영어로 쓰지. 그래서 영어를 무지 잘해야 한다. ^^ 오늘 필자는 자바보다는 영어에 초점을 맞출 것이다. 일단 영어를 알면 자바는 저절로 풀린다. 믿거나 말거나~

class
public
static
void
main
String
System
out
print
println

일단 위의 소스에서 핵심키워드를 간추려 보았다. 뜻은 모두 사전을 찾아보기 바란다. 필자가 뜻을 다 쓸까 하다가 공부는 스스로 하는거니까 안쓰기로 특별히 결단(?)을 내렸다. 빨리 찾아보자. 일단 자바 프로그램은 어떻게 구성되어 있는지 큰 그림을 알아야 눈에 들어오기 시작한다. 뭐든지 공부할때 개요를 파악하고 전체의 흐름을 알면 공부하기 쉬워진다. 부분적으로 알고 파고 들다보면 자신이 뭐 공부하고 있는지 놓칠때가 많다. 그런 우를 범하지 않기 위해 먼저 자바의 큰 그림을 대충 이해해 보도록 하자.

자바는 크게 "패키지(package)"와 "클래스(class)"와 "메소드(method)"로 구성되어 있다. 다른 말로 열라 어렵게 설명하자면 메소드가 모여서 클래스를 이루고 클래스가 모여서 패키지를 이루고 패키지가 모여서 거대한 자바 프로그램이 완성된다. 좀 멋드러지게 표현할려 했더니 어색하지만 이제 서서히 자바 프로그램의 윤곽이 잡히지 않는가? 안잡혀? 그럼 다시 한번 읽어보고 본인이 쳐넣은 자바 소스를 다시 한번 읽어본다. 읽어봐도 잘 모르겠다면 이런 질문을 하고 있을지 모르겠다. class만 보이고 다른건 안보이는데... 호오~ 대단하다. 사실 처음이라 복잡한 프로그램을 만들 일이 없으니 패키지는 웬만해서는 초반에 보기 힘들다. 그럼 메소드는? 물론 있다. 그것도 딱 하나~ 말 나온김에 커다란 비밀(?)을 얘기하자면 모든 자바 프로그램은 최소 한개 이상의 클래스가 있어야 하고 또한 최소 한개 이상의 메소드가 있어야 한다. 그런데도 메소드는 희한하게 보이지 않을 것이다. 왜? 아직 안배웠으니까...ㅎㅎ 힌트를 주자면 메소드는 언제나 클래스 안에 위치한다. 이제 서서히 메소드가 이거 아닌가하는 감이 잡히나 아직도 모를 것이다. 왜? 메소드는 클래스처럼 명령어 이름이 method가 아니고 형식 자체를 메소드라 부르는 것이기 때문이다. 그럼 어떤 형식으로 클래스랑 메소드가 만들어지는지 살펴보자.

public 클래스의 형식:   public class 파일이름
(public이 붙을 경우는 파일이름과 꼭 같아야함을 잊지말자!)

클래스의 형식:   class 이름
메소드의 형식:   결과값 메소드이름(입력값)

예제를 곁들여 설명하자면 Test1 자바 소스에서는

public 클래스의 형식:   public class Test1
클래스의 형식:   public만 빼면 위에꺼랑 같다. 당연한가?
메소드의 형식:   void main(String[ ] args)

자바 파일에 최소한 하나의 (public) class는 존재해야 된다. 그래야 파일이름을 만들수 있으니까 말이다. 이게 클래스의 존재이유라고나 할까나? 그리고 public이 붙을 경우엔 그 클래스의 이름이 파일이름과 똑같아야 한다. 다시 말하면, 여러개의 클래스는 만들수 있으나 public class는 개별 클래스 중에선 단 하나의 클래스에서 밖에 사용할수 없다. 개별 클래스는 무슨 말인가? 클래스를 말그대로 따로따로 만든걸 의미한다. 클래스안에 메소드만 만들수 있는건 아니다. 성격이 다르다고 판단될 경우 프로그래머의 역량(?)에 따라 클래스안에 또 클래스를 만들수 있다. 자바를 많이 한 이들조차 상당히 헤깔려하는 부분이나 여러분은 확실히 잡길 바란다.

대부분의 경우 메인명령을 실행하는 메인 메소드가 있는 클래스에 public이란 이름을 붙이는게 관례인데 프로그래밍 하다보면 저절로 그렇게 될 것이다. 그럼 public은 무엇인가? 자, 아까 찾아본 단어의 뜻을 생각해본다. 기억 안난다고? 후딱 다시 찾아보자. "public 공공의, 공개되는" 뭐 이런 뜻이 나온다. 그렇다. 바로 그런 뜻으로 쓰인 것이다. public을 지정한 클래스 내용물은 공개되어 있어 안에서든 바깥에서든 누구나 쓸수 있다.

여러분이 프로그램을 짜야한다면 그것은 어떤 목적을 가지고 있을 것이다. Test1이란 자바 파일은 글씨를 화면에 출력하는게 목적이다. 따라서 그 목적을 이루기 위한 제목을 생각해서 적절하게 이름을 짠다면 Test1 이란 이름보다는 Print 라는 이름이 적합했을 것이나 필자를 비난하지 말고 마음에 들지 않으면 바꾸도록 하자. 클래스 이름을 바꿨다면 뭘 또 해야되나? 설마 벌써 까먹은건 아니겠지? 글치, 파일이름도 Print.java 로 바꾸어야 할것이다. 보통 클래스 이름의 첫글자는 메소드와 구별을 쉽게 하기 위하여 대문자로 쓴다.

그 다음은 글씨를 직접적으로 화면에 쓰라는 명령과 방법(method)을 제시해 주어야한다. 그 명령들이 있는 곳이 바로 메소드(method)라고 불리는 공간이다. 위의 프로그램은 바로 메소드의 이름이 main 이다. 이것이 자바에서 처음 프로그램을 실행하도록 만들어주는 그 이름도 유명한 메인 메소드란 것이다. 메인 메소드도 public class 처럼 개별 클래스 중에서 단 한군데만 존재한다. 프로그램의 처음이자 마지막이라고나 할까? 더불어 쓰는 방법도 메인 메소드는 독특한데 시작과 끝이라 public static void main(String[ ] args) 의 형태로 항상 똑같이 쓰인다. 그냥 외워도 무방하나 모든 명령을 총괄하는 프로그램의 핵이라고 할수 있는 메인 메소드는 글이 생각보다 길어지는 관계로 다음에 살펴보기로 하자. 쉽게 설명하려고 하다보니 자바 강좌가 아니라 소설 같다. 제목을 장편 대서사시 "소설 JAVA"라고 고치는거 신중(?)하게 생각해봐야겠다. 소설 잡아? ㅎㅎ

댓글 4개:

  1. 자바를 공부하고있는 학생입니다. 최신정보도 알려주시고,
    자세한 설명 너무 좋은데요. 양 사이드의 여백이 넓고 가운데 몰리다 보니 몰입이 안되서 많이 아쉽습니다. 잘보고 갑니다. ^^ 감사합니다.

    답글삭제
  2. 안녕하세요. 자바 공부하는 대학생입니다^^
    오늘 유연히 이곳을 알게 되었는데, 강의가 너무너무 좋네요. 알아듣기 쉽고. 자주자주 들어와서 공부하고 가야겠어요~!!

    그런데 public 지정한 클래스는 안이든 밖이든 누구나 쓸 수 있다고 하셨는데 이 말이 무슨 말인지 잘 모르겠네요 ㅠㅠ

    답글삭제
    답글
    1. 1년이 넘게 지난 지금 이미 통달하셨을지도 모르겠지만
      답변드립니다. 메인 클래스가 아닌 참조 클래스와 같은 경우에서 클래스 타입이 private, default, restricted 등으로 사용될 수 있으며 해당 클래스 타입에 따라 외부 패키지 또는 클래스가 해당 클래스에 쓰여진 코드를 활용할 수 있는지
      없는지에 관한 복잡한 과정을 거친다고 합니다.
      저도 현재 공부 중이라 명확히 개념을 잡지는 못하였는데
      답변드립니다.

      삭제
  3. 안녕하세요 자바를 본의아니게 수강하게된 늙은대학생입니다.
    수업중에 이해가 잘 안되던거, 그냥 대충 넘어간 부분이 많아서, (그와중에 저는 아는게 없으니 질문도 못하고) 뭔가 알듯 모를듯 했었는데, 블로그에 설명하신거 보니 이해가 아주 쏙속 되네요. 앞으로 자주 들어올꺼 같아요. :D 넘넘 감사드립니다~!

    답글삭제