티스토리 뷰

먼저 이 글을 Head First Java에서 배운 내용을 잊지않기 위해서 정리차원에서 제가 적어두는 것입니다.
오해없으시길 바랍니다.


자바는 어떤식으로 돌아갈까요?


처음 고려 사항은 애플리케이션 하나를 만들어서 여러 친구들이 가지고 있는 다양한 장치에 보낼 파티 초대장을  만드는 방법입니다.

1.소스->2.컴파일러->3.결과물->4.각 기계(Device)의 가상머신

1.소스: 소스를 만들되 문법을 지켜야 함
2.컴파일러: 소스 코드를 컴파일 처리한다. 이 때 오류가 없는지 체크하고, 통과한 경우에만 최종 결과를 만들어 줍니다.
3.결과물: 소스를 컴파일 하면 바이트코드(Bytecode)라는 코딩된 문서를 만들어 줌. 이것이 기계에 실행명령을 내림.
4.가상머신: 각 기계마다 소프트웨어 자바가상머신(J.V.M)이 있어 3번 결과물을 가상머신에서 실행 시키게 됩니다.

 
 

1.소스: *.java로 된 파일
2.컴파일러: 커맨드 창에 "%javac *.java "와 같이 javac를 실행시켜 *.java파일을 컴파일 합니다.
3.결과물: *.java파일이 컴파일 되면 바이트코드가 담긴 *.class파일이 생성됩니다.
4.가상머신: 커맨드 창에서 "%java *.class"를 실행시키면 *.class파일의 바이트코드를 JVM에서 실행한다. 

뭐 대충 여기까지가 자바의 구동원리 입니다.

아래는 자바의 버전별 클래스 포함의 변천사를 간단히 도표화 한 것입니다.

간단히 정리해 본 자바의 역사

간단히 정리해 본 자바의 역사




자바는 예전 C와 같이 프로그래머가 필요한 부분을 일일이 구현할 필요가 없이, 제공되는 클래스(또는 API)를 통하여 간단하게 호출하여 사용하기만 하면 됩니다. 이 것이 프로그래머들에게 아주 매력적인 요소중에 하나죠.

*Head First Java의 참 재미있는 부분은 가끔 나오는 QnA입니다.

Q: 위에 있는 표에 보니까 자바 2랑 자바 5.0은 있는데, 자바 3하고 자바 4는 어디 있어요? 그리고 자바 5.0이라고 나와 있는데, 자바 2는 왜 자바 2.0이라고 안쓰죠?

A: 마케팅의 세계란 정말 심오하죠... 자바 버전이 1.1에서 1.2로 올라갔을 때, 바뀐 것이 정말 많았어요. 그러다 보니 마케팅 팀에서 아예 이름을 새로 정해야 되겠다는 생각에 "자바 2"라는 이름을 붙였죠. 실제 자바 버전은 1.2였는데도 말예요. 버전 1.3하고 1.4는 계속 자바2로 간주되었습니다. 자바 3나 4 같은 건 없었죠. 자바 1.5가 나올 때도 정말 많은 변화가 있었습니다. 그래서 마케팅 팀에서는 (개발자들도 대부분 동의했죠) 새로운 이름이 필요하다는 생각에 어떤 이름을 쓸까 고민을 했습니다. 사실 숫자 상으로 볼 때 "3"이 와야 했는데, 자바 1.5를 "자바 3"이라고 부르려니 오히려 더 혼란 스러울 것 같다는 생각이 들어서 그냥 버전 "1.5"의 "5"에 맞춰서 "자바 5.0"이라고 부르기로 했습니다.

그래서 오리지널 자바는 버전 1.02(처음으로 공식 릴리스된 버전)부터 1.1까지는 "자바"였습니다. 버전 1.2, 1.3, 1.4는 "자바 2"였죠. 그리고 버전 1.5부터는 "자바5.0"이라고 부릅니다. 하지만 종종 (.0을 빼고) "자바 5"라고 부르기도 하고, 또는 (코드명을 따라서) "타이거"라고 부르기도 합니다. 다음 릴리즈에 어떤 이름이 붙을지는 저희도 잘 모르겠네요.


*개인적으로 저는 이런 비하인드 스토리를 알게 되면 뭔가 재미가 느껴질 까?? ㅎㅎㅎㅎ


자바 코드의 구조


자바코드의 구조

자바코드의 구조



1.소스파일에는 무엇이 들어 있을까?

소스 코드파일(java라는 확장자자 붙은 파일)에서는 클래스(class) 각각 한 개씩을 정의합니다. 클래스는 보통 프로그램의 한 부분이라고 할 수 있지만 아주 작은 애플리케이션 중에는 클래스 단 하나만으로 이뤄진 것도 있습니다. 클래스는 한 쌍의 중괄호({ })안에 들어가야 합니다.

public class Dog {

//클래스



2.클래스 안에는 무엇이 들어있을까요?

클래스에는 메소드(method)가 한 개 이상 들어갑니다. 예를 들어, (개를 나타내는) Dog 클래스에는 (짖는 것을 의미하는) bark라는 메소드가 들어갈 수 있으며, 이 메소드에는 개가 짖는 방법을 지시하는 내용이 들어가면 될 것입니다. 메소드는 클래스 안에서(즉, 클래스 전체를 감싸는 중괄호 안에서) 선언해야 합니다.

public class Dog {

    void bark() {

    } // 메소드

//클래스 



3.메소드 안에는 무엇이 들어있을까요?

메소드를 감싸는 중괄호 안에는 메소드에서 처리할 일을 지시하는 내용이 들어갑니다. 메소드 코드는 기본적으로 일련의 선언문을 모아놓은 것이므로 지금은 메소드를 일종의 함수나 프로시저와 비슷한 것으로 생각해도 됩니다.

public class Dog {

    void bark() {

        statement1; //선언문
        statement2;

    }// 메소드

}
//클래스



클래스를 해부합시다.

JVM이 실행되면 명령행에서 지정했던 클래스를 살피게 됩니다.
그리고 나서 main() 메소드를 찾아 봅니다.

public static void main(String[] args) {
    //코드가 들어갈 자리
}

 
이런 메소드를 찾으면 JVM에서는 main 메소드의 중괄호({ }) 안에 있는 것을 모두 실행시킵니다.
모든 자바 애플리케이션에는 
최소한 클래스한개가 있어야 하며 적어도 main 메소드 하나가 있어야 합니다.(클래스마다나씩이 아니라 애플리케이션마다 하나씩 있어야 합니다. *참고로 WAS와 같은 웹서버는 main메소드를 따로 구성하실 필요가 없겠죠^^ main메소드로 WAS가 이미 구동중이니까요^^)

main이 들어있는 클래스 만들기

자바에서는 모든 것이 클래스 안에 들어갑니다.
우선 소스 코드(.java 확장자가 붙어있는) 파일을 입력한 다음 컴파일해서(.class 확장자가 붙어있는) 새로운 클래스 파일을 만들면 됩니다. 프로그램을 실행시킨다는 것은 사실 클래스를 실행시키는 것이라고 할 수 있습니다.

프로그램을 실행시킨다는 것은 자바 가상 머신(JVM Java Virtual Machine)에 "Hello 클래스를 불러 오고 그 main() 메소드를 시작하라. 그리고 main() 메소드에 있는 모든 코드가 실행될 때까지 계속 실행시켜라"라는 뜻의 명령을 내리는 것입니다.

클래스에 대한 자세한 내용은 다음 포스팅에서 알아보기로 하고, 지금은 실행 가능한 자바 코드를 만드는 방법에 대해 살펴보기로 하겠습니다. 그러면 우선 main()부터 시작해보죠.
 
프로그램 실행 절차가 시작되는 부분은 바로 main()메소드입니다.

프로그램이 아무리 커도(바꿔 말하자면 프로그램에서 얼마나 많은 개수의 클래스를 사용하든 상관없이)프로그램을 실행시키려면 반드시 main() 메소드가 필요합니다. 

1.저장 -> 2.컴파일 -> 3.실행 

main 메소드란?

일단 main 안으로 들어가면 (또는 어느 메소드든) 본격적으로 뭔가가 돌아갑니다. 즉
대부분의 프로그래밍 언어에서 컴퓨터로 하여금 어떤 일을 하게 만드는 모든 일반적인 지시사항은 메소드 안에 들어있습니다.

코드에서는 JVM에 다음과 같은 것을 지시할 수 있습니다.

1.뭔가를 하는 것

선언문: 선언, 대입, 메소드 호출 등

int x = 3;
String name = "Dirk";
x = x* 17;
System.out.print("x 는 " + x + "입니다.");
//주석은 이렇게 씁니다.


2.뭔가를 여러 번 반복하는 것

순환문: for와 while

while (x > 12) {
    x = x -1;
}

for(int x -0 ; x < 10; x = x+1) {
    System.out.print("x의 값은 "+x+ "입니다.");
}



3.조건에 따라 뭔가를 하는 것

분기문: if/else 테스트

if(x== 10) {
    System.out.print("x가 10이군요.");
} else {
    System.out.print("x가 10이 아닙니다.");
if((x< 3) & (name.equals("Dirk"))) {
    System.out.print("Gently");
}
System.out.print("이 선언문은 무조건 실행됩니다.");


돌리고 돌리고 돌리고...

자바에는 while, do-while, for의 세 가지 표준 순환 구조가 있습니다. 순환문에 대한 자세한 내용은 나중에 알아보기로 하고 일단 여기서는 while만 생각해 보겠습니다.

문법이 워낙 간단하기 때문에 설명이 지루하게 느껴질지도 모르겠네요. 어떤 조건이 만족되기만 하면 순환문 블록(block) 안에 들어있는 작업을 모두 처리합니다. 중괄호 한 쌍 안에 들어가는 내용ㅇ이 바로 순환문 블록이며 반복하고자 하는 내용은 그 블록 안에 집어넣으면 됩니다.

순환문에서 가장 중요한 것은 바로 조건 테스트 부분입니다. 자바에서 조건 테스트의 결과는 부울 값(boolean)입니다. 즉, 참(true) 또는 거짓(false) 값을 가지게 됩니다.

"iceCreamInTheTub 가 참인 동안 계속 아이스크림을 퍼라"와 같은 것이 바로 부울 테스트라고 할 수 있습니다. 통 안에 아이스크림이 있거나 없거나 둘 중 하나기 때문이지요. 하지만 이 때 참과 거짓이 분명하지 않으면 안 됩니다. 반드시 참과 거짓이 명확하게 구분되는 것만 조건 테스트로 사용할 수 있습니다.


'Develop Story > Head First Java' 카테고리의 다른 글

2.객체 마을로의 여행  (0) 2011.03.26