2011-09-28

자바의 기본문법(Structure)



프로그래밍 할때 타이핑 하는 시간을 아끼지 말아라. 프로그래머는 자고로 시간을 아끼지 말고 철저히 시간을 낭비(?)해야 발전할수 있는 이상한 곳이니까 말이다. 희한하게 자기가 시간을 들이고 직접 쳐봐야 자기 것이 된다. 이것이 프로그래머들이 공공연하게 가르쳐주지 않는 최고의 비밀(?)이 아닐까 생각한다.

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

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) 의 형태로 항상 똑같이 쓰인다. 그냥 외워도 무방하나 모든 명령을 총괄하는 프로그램의 핵이라고 할수 있는 메인 메소드는 글이 생각보다 길어지는 관계로 다음에 살펴보기로 하자.