Friday, 1 February 2013

화면에 문장출력하기-출처:http://alecture.blogspot.co.nz

화면에 문장출력하기 - 출처: http://alecture.blogspot.co.nz
public class Test1
{
public static void main(String[ ] args)
{
System.out.println("");
System.out.print("나는 클래스 Te");
System.out.print("st1의 메인 ");
System.out.println("메소드야.");
System.out.println(" ");
System.out.print("모든걸 총괄하는");
System.out.println(" 곳이지.");
System.out.println();
System.out.println("모두들~ 방가 방가^^ ");
}
}

Test1이라는 자바소스를 계속 붙들고 있는데 오늘은 기필코 이 프로그램 공부를 끝내도록 하겠다.^^ 메인메소드 안에 여러가지 쓰여있는데 다 비슷비슷해 보인다. 저번 시간에 메인메소드에 대해서 설명하였으니 이제 본격적으로 안에 있는 코드를 들여다보자.

System.out.println 이라는 문구와 System.out.print 이라는 문구가 대표적으로 달라보일 것이다. 여기서 딴 얘기를 잠깐 하겠다. 왜 쩜(.)을 찍는지에 관해서 말이다. 우리가 인터넷 도메인을 주소에 칠때도 뭐뭐 쩜 뭐뭐 닷(쩜) 컴이라고 쓰지 않나? 즉, 쩜이란 어디서부터 어디까지를 나타내주는 일종의 경로라고 생각하면 이해하기가 쉽다. 컴퓨터상에서 여러분이 디렉토리를 만들어본 적이 있을 것이다. 그리고 안에다 또 디렉토리를 만들고 이러면 경로를 여러분이 맨 바깥 디렉토리를 만든 것에서부터 안으로 들어가면서 나타나는 안쪽 디렉토리들과 구분을 쉽게 하기위해 \표시로 주소창에 나타나는 것을 보았을 것이다. 인터넷 주소도 사실 그러한 원리로 경로를 쩜을 찍어서 나타내고 있는 것이다. 다른 개념이 있지만 여기서도 지금은 똑같이 이해하기 바란다. 한꺼번에 너무 많은걸 알려고 하지 말아라. 다친다.^^ System이라는 곳에서 out으로 그리고 println 이나 print 로 도달해서 명령을 전달한 것이다. 물론 최종 종착지는 print 구문이니 뭔가를 출력하려는 것을 우리는 직감(?)으로 알수 있을 것이다.

그럼 다시 코드로 돌아가서 System을 보니 뭔가 느끼는게 없는가? 여기서 뭔가 느껴지면 그대가 정말 대단하게 보일텐데 말이다. 누군가 찾아냈기를 바라면서 설명하겠다. 바로 첫글자가 대문자라는 것이다. 에이~ 그게 뭐 대수라고...하는 이가 있을지 모르지만 여지껏 우리는 어떻게 배워왔나? 클래스는 첫글자를 알아보기 쉽게 대문자로 쓰자고 하지 않았나? 그렇다. System도 클래스인 것이다. 서로간에 규칙을 정하고 이렇게 지켜주면 코드만 봐도 감(?)이 딱 오는 것이다. 그럼 out은? println은? 속사포로 너무 질문하였나? 이걸 한꺼번에 풀어서 설명해 보겠다. System 클래스가 있는데 이 클래스 안에서 하는 일이 여러가지 있지만 그 중에 하나가 out이라는 객체를 이용해서 println() 메소드를 불러다가 괄호안에 있는 입력값을 화면에 출력하는 일이다. 괄호()안에는 " " 따옴표 사이에 출력하고 싶은 문자를 쓰면 된다. 이해가 팍팍 가나? 이미 실행해 보라고 했으니 이미 어느 정도 파악하고 있어야 정상이다. 아니라면 농땡이 피고 있었다는 것이니 자기 머리에 자진 꿀밤 한대씩 주고 반성하도록 하자.

System에 관련된 비밀이 또 하나 있다. 무엇인지 아는가? 이거 파악한 이가 있다면 필자가 바로 쇼크를 먹을텐데... 바로 System이라는 클래스가 어디에 있느냐는 것이다. 불러서 쓰는건 좋다 이거다. 그런데 자바소스 어디에도 System 이라는 클래스를 볼수가 없는데 어떻게 쓴단 말인가? 실행을 해보았으면 알것이다. System 클래스가 없는데도 작동하고 있는 이 놀라운 사실을 말이다. System이라는 클래스는 java.lang.System 이라는 경로에 위치하고 있다. 자바에서는 많이 쓰이는 패키지들을 편리하게 이용하라고 모아놓았는데 그것을 자바 Java API(Application Programming Interface)라고 부르며 그 안에 여러 분류별로 경로가 나누어지는데 가장 기본적으로 많이 쓰이는 것이 java.lang이라는 패키지이다. 이 패키지안에 System 클래스를 비롯 여러 클래스가 들어있다. 예를 들어, 지금 사용하고 있는 System이라는 클래스를 쓰려면 코드 맨위에다가

import java.lang.System;

또는

import java.lang.*;

이런 식으로 표기해 놓아야 해당 패키지 안에 있는 클래스를 이용할수가 있다.(*은 전부를 의미한다. 한마디로 java.lang이라는 경로 안에 있는 클래스 전부를 의미한다.) 자바 소스를 보다보면 import라고 쓰여진 것을 본 이가 있을지도 모르겠다. 바로 이런 용도로 쓰인 것인데 "import 수입하다" 라는 뜻을 가지고 있는 것을 안다면 아마 금방 이해가 갔으리라 생각한다. import는 컴퓨터 용어로는 다른 프로그램에서 데이터를 불러오다라는 의미로도 쓰인다. 이제 됐나? 어허~ 됐다고 하면 안돼지. 왜? 우리의 자바 소스를 다시 한번 보자. 이런 구문이 어디 있는지? 없지? 이상하지? ㅎㅎ 바로 그거다. 이런 구문이 맨 윗줄에 있어야 쓸수가 있는데 이게 없는데도 쓸수 있단 말이다. 왜냐고? 화면을 출력하고 그밖에 숫자나 문자를 다루는 언어요소인데 이런건 거의 모든 자바파일 만들때마다 쓸수 밖에 없다. 그럼 매번 import java.lang 어쩌고 매번 쳐야하는 수고를 해야한다. 이런 수고(?)를 덜어주고자 자바에서는 이 패키지를 기본적으로 로딩한다. 따라서 이 안에 있는 내용은 import 한걸로 가정하고 쓸수가 있는 것이다.

많이 이해가 됐으리라 믿는다. 그럼 print와 println의 차이는? 프로그램을 실행해보고 코드보고 다시 결과보고 코드보고 하다보면 저절로 이해되게끔 소스에 심혈(?)을 기울여 만들어 놓았다. 따옴표 사이에 빈칸이 있는 것은 빈칸으로 읽어드리라고 그렇게 만들어 놓은 것이니 똑같이 있는 그대로 입력해서 실행해 보도록 하자. 해보면 왜 이렇게 빈칸까지 만들어 놓았는지 필자의 깊은 혜안(?)에 감탄을 금치 못할 것이다.ㅎㅎ 실행해 보면 아래와 같은 결과를 얻게 된다.

나는 클래스 Test1의 메인 메소드야.

모든걸 총괄하는 곳이지.

모두들~ 방가 방가^^

에러가 혹시 나는 이들이 있을지도 모르겠다. 자바파일 이름을 잘못 만들었던지 아니면 코드를 잘못쳤던지 그것도 아니면 보통 초보자들이 많이 범하는 대표적인 실수(?)일 것이다. 명령어 라인 끝에다가 ;(세미콜론)을 붙여야 된다는 것을 잊지 않았는지 다시 한번 확인하자. 그리고 설마 실행하는 방법을 까먹은 이들은 없겠지? 있다면 저번 강좌를 찾아보도록 한다. 자바 에디터를 쓰고 있다면 버튼 하나 눌리면 될텐데 그거 하나 못찾는다면 정말 평생 고생이다. 잘좀 하자. 이 예제에서는 끊어진 문장들이 하나로 연결될수 있음을 소스를 통해 보여주고 있다. print라는 메소드를 이용하면 출력이 끝난 그 자리에서 계속적으로 다음 메세지를 기다리는 것이고 println이라는 메소드를 이용하면 출력을 끝내고 다음줄로 가서 그 다음 메세지를 기다리게 됨으로 위와 같은 결과가 나오게 된다. 저번에 많은 내용을 공부하였으니 오늘은 이 정도로 강좌를 마친다. 너무 짧다고? 묻지도 말고 따지지도 말고 쉬어라. 언제 또 이렇게 쉬겠나? ㅎㅎ

혹시나 이해가 가지 않는 부분이 있으면 중간에 졸았다거나 뭔가 먹으면서 딴짓했던가 그럴 것이다. 반성하고 다시 읽어서 자기것으로 만들도록 하자. 특히 저번 강좌에서 다룬 메인메소드에 관한 내용은 그냥 넘어가도 안될건 없지만 확실하게 잡아놓으면 상당히 많은 시간과 노력을 절약하게 될것이니 이번 강좌를 통해서 자바를 처음으로 시작한 이들은 꼭 다시한번 읽어보길 추천한다. 이제 여러분은 위의 예제를 통해서 원하는 문자들을 화면에 마음껏 출력할수 있는 능력(?)을 가지게 되었다. 어렵게 얻은 소중한 능력을 다음에 만날때까지 마구마구 응용해 써보기 바란다.^^

자바의 메인메소드(Main Method)-출처:http://alecture.blogspot.co.nz


자바의 메인메소드(Main Method)-http://alecture.blogspot.co.nz

자바 프로그램은 클래스와 메소드의 집합체라고 해도 과언이 아니다.
일단 클래스와 메소드를 자바코드로 쓰는 방법을 살펴보자.

class Robot
{
??????????; //이 공간에다가
?????????; //변수를 선언하고 초기화한다.
????????; //이 공간을 필드(fields)라고 부른다.

void method( ) //메소드를 만드는 형식이다.
{
???????; // 역시 클래스처럼
???????; // 중괄호라고 하나? 그거 오픈하고
???????; // 이렇게 몇줄이든 내용을 쓰고
???????; // 아래처럼괄호를 닫으면 된다
???????; // 달려라 달려 로보트야~
} //method 메소드 끝내기

} //Robot 클래스 괄호닫기

클래스와 메소드는 내용의 시작과 끝을 중괄호 기호인 {와 }를 통해 알수 있으며 자바 프로그램은 소스를 읽어들일때 빈칸이나 빈줄은 무시하고 명령어들을 읽어드린다. // 슬래시를 치고 쓰는 내용은 자바에서 읽어드리지 않는다. 여기다 쓰는 내용을 주석이라고 하는데 프로그램에 대한 설명이나 중요한 사항을 메모하는 용도로 사용한다. 프로그램이 길어질때 어떤 클래스나 메소드 괄호인지 찾기 힘들때가 있는데 그럴때 이런식으로 표기해두면 편하다. 그리고 클래스와 메소드 사이에 빈칸이나 빈줄은 자기 마음대로 쓸수 있으나 프로그램의 내용과 구문을 금방 파악하기 위해 괄호의 열고 닫는 위치를 같게 만들고 클래스나 메소드 구문에 관련된 라인을 처음 입력할 때에는 한줄씩 띄우는게 보기 편하다. 지금 위의 코드에서 method라는건 명령어가 아니라 한번 생각해 보라고 메소드 이름 자체를 method라고 써놓은 것이다. 즉 아무 이름이나 쓰고 싶은데로 쓸수 있다. 평소에 자바에서 메소드라는 표현을 쓸때는 "결과값 ???(입력값)" 이 라인 전체를 의미하는 것이다. 이제 명령어 자체가 method라고 착각하는 이는 이 시간 이후로 없길 바란다.

그럼 void는 무엇인가? 자, 사전을 찾아봤다고 가정하고 "void 빈공간,텅빈" 뭐 이런 뜻이 있는데 여기서도 마찬가지로 생각하면 된다. 저번에 필자가 메소드의 형식은 어떻게 쓰는지 말했는데 기억하는가? 모르면 앞에꺼 찾아보자. 결과값이라고 했는데 이제 생각나는가? 안난다면 자기 머리에 꿀밤 한대씩 주고 다시 시작하자. 그렇다. 결과값이다. 그럼 뜻이 비어있으니 뭐겠는가? 결과값을 받지 않겠다는 소리다. 지금 여기서 쓰인 void는 결과값이 없는 메소드다. 무슨 행동을 시켜놓고 결과가 필요없다? 여기서 결과값이란 메소드로 실행하고 나서 다시 그 값이 글자(String)든 정수(int)든 값을 받아서 뭔가 다시 할 필요가 없다는 뜻이다. 그럼 메소드 이름 옆에 괄호안은 뭐였었나? 기억나나? 아까 볼때 못봤나? 머리 안돌아가면 몸이라도 부지런해야한다. 빨리 다시 찾아보자. 그렇다. 입력값이다. 그런데 괄호안이 비었다. 아무것도 없으니 입력값도 없다는 소리다. 즉, 아무 입력값을 받지 않더라도 메소드를 부르면 자동적으로 뭔가를 하라고 지시하는 것이다. 반대로 입력값이 있으면 메소드를 행하기 전에 입력값이 올바른지 점검해보고 계속 진행할지 안할지를 결정할수 있는 메소드를 만들수도 있고 입력값으로 덧셈이나 뺄셈같은 계산을 할수도 있고 암튼 입력값이 있으면 쓰이는 용도가 더 다양해진다고 볼수 있겠다.

public class Test1
{
public static void main(String[ ] args)
{
System.out.println("");
System.out.print("나는 클래스 Te");
System.out.print("st1의 메인 ");
System.out.println("메소드야.");
System.out.println(" ");
System.out.print("모든걸 총괄하는");
System.out.println(" 곳이지.");
System.out.println( );
System.out.println("모두들~ 방가 방가^^ ");
}
}

자 어떤가? 이제 프로그램이 눈에 들어오기 시작하남? 지금 이 예제는 Test1이라는 이름의 클래스 한개와 main이라는 이름의 메소드 한개를 가지고 있는 자바 프로그램이다. 메소드 안에 내용을 보면 뭔지는 모르겠지만 print 어쩌구 저쩌구 하는거 보니 뭔가를 쓰라고 하는 명령어라고 짐작할수 있을 것이다. 더군다나 출력하는 문장을 한글로 써놨는데 이거 감 안오면 정말 난감하다.^^ print라는 뜻은 다 알테니 말그대로 그뜻이고 그렇다면 println은 뭔지 궁금할 것이다. println은 문장을 찍고 엔터를 친 상태 즉 출력후 다음줄에 가서 다음 명령을 대기하라는 소리다. 그럴듯(?)하게 쓸려니 힘들구나. ㅎㅎ 이제 따옴표가 괄호안에 있는게 보일텐데 글자를 출력하려고 할때는 저렇게 괄호 양옆에 따옴표를 쓰고 그 사이에다가 원하는 글자를 입력해야 출력이 된다. 그리고 글자 출력하라는 명령어 끝을 보면 뭔가가 있다. 뭐? 세미콜론(;), 필자가 말하기 전에 신경쓰고 있는 이가 있었을지 모르겠다. 모든 명령의 끝에는 저렇게 ;을 붙여야한다. 그래야 자바 프로그램이 한 라인의 명령어가 끝났구나라면서 알아먹는다. 아까 맨처음 위에서도 세미콜론이 물음표 옆에 있었는데 혹시 누군가가 세미콜론을 왜 썼지라면서 의아해 했다면 그대가 자바 천재(?)임을 필자가 인정하겠다.^^


저번 시간에 이어서 설명할 부분은 바로 메인 메소드다.
public static void main(String[ ] args)
{
명령1;
명령2;
명령3;
.... ;
}

메인메소드의 정의는 프로그램을 실행했을때 자바에서 가장 먼저 읽어들여서 명령들을 다 작동하고 그것이 끝나면 프로그램을 종료하는 공간이 바로 메인메소드이다. 그런 까닭에 결과값은 항상 없다. 프로그램이 끝나는데 결과값을 받아서 또 써먹을때가 없다. 프로그램을 끝내야 하니까 메인메소드는 항상 void이다. 더불어 메인메소드의 이름도 말 그대로 항상 main으로 이름지어야 한다. 왜? 메인메소드이니까...(이렇게 설명하면 몰매 맞겠군.^^*) 그건 자바에서 처음 시작하는 메인메소드의 이름은 반드시 main으로 하라고 자바소스를 읽고 작동시키는 머신 일명, JVM이라고 불리우는 자바가상머신에게 그렇게 입력(?)해 놓았다. 그래서 선택의 여지가 없다. 프로그램을 작동시키려면 main이라는 이름의 메인메소드를 쓸수밖에 없는 것이다.

그럼 안에 입력값이라고 쓰여있는 String[ ] args 는 무엇인가? 일단 String(스트링)은 여러가지 뜻이 있는데 여기선 악기의 "줄"이라는 그런 뜻이 아니고 컴퓨팅에서는 "문자열"이라는 뜻으로 쓰인다. 어쩌다가 이 세계에서 그런 뜻으로 쓰였는지 아는 이 있으면 알려주기 바란다.^^ 그렇다면 [ ] 는 무엇인가? 문자열이 여러개 있다는 뜻인데 이것을 우리는 배열(Array)이라고 한다. 그럼 일단 문자열은 무엇인가? 문자를 한개부터 일렬로 세운거다. 예를 들어, 문자 하나는 "비", 문자 두개는 "Ya", 문자 세개는 "그만혀" 그렇다면 문자열 배열은? {비, Ya, 그만혀} 뭐 이런식으로 모아놓은 것이지 않을까? ㅎㅎㅎ 이런 문자열을 지칭할때 String[ ] 을 쓰고 그 문자열을 지칭하는 이름이 args인 것이다. 솔직히 이름이므로 args 이거는 아무거나 써도 되나 인수 혹은 매개변수라는 뜻의 arguments 약자로 쓰인 것이니 특별한 일이 없는한 바꿀 필요는 없다 하겠다. 한국말이 어렵다. 매개변수는 뭐냐? 이렇게 직설적으로 물으면 대부분 대답하기가 힘들 것이다. 그냥 막연히 무슨 값을 얘기할때 그렇게 쓴다 정도로 이해할텐데 자세히 풀자면 프로그래밍에서 함수(메소드)나 프로시저(메소드 비슷한거..영어다..사전 찾아보자)를 호출할 때 호출하는 쪽에서 실제로 넘겨주는 값을 얘기할때 매개변수라 한다. 뭔가 하나를 알려고 하면 이렇게 끝이 없는 것이다. 음 철학적이군..-

문자열 배열이 왜 필요할까? 지금 위에서 본 문자열 배열중에 세번째 스트링인 "그만혀"만 어디다가 가져와서 쓰고 싶다. 그러면 args[2] 이런식으로 명령해서 불러쓴다. 첫번째 스트링이 필요하면 args[0] 이런식으로 표기해서 불러쓰기 쉽도록 만들어 놓은 것이다. 그리고 방금 눈치빠른 이들만 알아챘겠지만 시작은 0에서 시작한다. 숫자는 0(?)부터 시작하니까 하하~ 왜 1에서 시작하지 0에서 시작했을까? 바로 이것 때문이다. 이 배열에 문자열이 몇개나 있나 물어보면 답이 뭘까? (정말 몰라?) 세개잖어~ 그럼 어떻게 세야되나? 하나 둘 셋...1 2 3...길이를 셀때는 1부터 시작해야 한다. 이해되지? 안되면 큰일이다. 그런데 이렇게 배열을 세어서 알려주는 표기방법이 있다. "이름.length" 여기선 이름이 args 이니까 args.length 로 길이를 물어보는 명령을 넣으면 3이라는 답을 얻을수도 있다. 배열에서는 처음과 끝을 어떻게 알수 있을까는 방금 말한 길이를 통해서 알수 있는데 여기처럼 배열에서 길이를 알면 문자열 세개까지만 검색하고 더이상 시간을 지체할 필요가 없다. 아니면 없는데도 계속 검색하는 바보짓(?)을 하는 경우가 생길테니까 말이다. (물론 자바에서는 없는데 검색하면 null에 관계된 에러가 날것이다. 역쉬~ 자바!)

그럼 메인메소드 안에 배열은 왜 쓴거야? 이렇게 의문을 품은 이들은 아 착하다. 뭐 좀 먹고 와라. 다시 메인메소드의 정의를 살펴보자. 가장 먼저 읽어들인다는데 어디서 먼저 읽어드릴까? 바로 "명령프롬프트"창에서다 기억나는가? 시작할때 java Test1 이라고 입력해야 된다고 했던것을~ 여기 문자열을 읽을 필요가 있을때를 대비해서 고맙게도 자바는 이렇게 문자열 배열을 만들어 놓은 것인데 이해가 쉽도록 시작 명령어를 설명과 함께 다시 써보겠다.

java Test1 args[0] args[1] args[2]......

즉, 여러분이 처음 자바소스를 실행할때 파일이름 옆에다가 어떤 문자열을 파일이름 옆에 입력해 놓을수도 있는데 자바에서 이것을 스트링 배열의 요소인 args로 읽어다가 프로그램에 써먹을수가 있다. 그러나 평상시에 프로그램 시작시킬때 특별히 전달할게 없으므로 아무것도 쓰지 않으니 입력값을 넣는 메인메소드의 괄호안은 보통 비어있는 것이나 마찬가지라고 생각하면 된다. 지금은 처음이라 필요가 없겠지만 여러분들이 진정한 자바 프로그래머로 탄생(?)하게 될 역사적인 순간에 이런걸 써먹을수 있도록 자바신(?)께서 메인메소드를 통해 이미 준비해 놓으셨다는 사실을 상기만 하고 지금은 이해할 필요도 없고 다른거 공부해야되니 후딱 머리 비우기 바란다.^^

public은 저번에 설명해서 알겠고 static이 무엇인지 궁금한 이가 많을 것이다. 흔히 메소드 앞에 static을 붙이면 정적메소드라고 하는데 이 부분 때문에 자바를 웬만큼 하는 이들도 이 부분 특히 메인메소드의 static만 나오면 자신이 없어지는 이가 많은데 일단 사전적인 의미는 "static 고정된, 움직이지 않는" dynamic의 반대말이다. 다이내믹이 뭔가 역동적인데 반해 뭐 가만히 있어도 된다는 그런 뜻인가? 헐~ 바로 그거다. 뭔가를 할 필요가 없다는거다. 가만있어도 알아서 해준다는거다.

오늘의 마지막 이슈 그 이름도 유명하고 많은 이들을 자바 공포로 떨게 하고 있는 static을 통해 오늘의 데미를 장식할까 한다. 자바를 오래 공부한 이들도 상당히 이해하기 어려운 부분에 속하는 것이 메인메소드인데 풀어서 설명은 하겠으나 처음 보는 이들은 자바에 대한 개념(?) 자체가 정립되어 있지 않으므로 필자가 아무리 쉽게 설명하더라도 이해를 못할수 있다. 그럴경우 그냥 메인메소드는 이렇게 써야되는구나 생각하고 무조건 외워서 써라. 먼 훗날 필자의 설명이 가슴속에 자삘(feel?)로 꽂힐때가 있을 것이다.ㅎㅎ

다시 돌아와서... 뭐를 알아서 해주는걸까? 컴파일할때 알아서 클래스를 제약없이 마음껏 불러서 쓸수 있게 만들어 주는 공간이라고 알아두자. 그럼 평상시에 클래스를 쓰고 싶을때 어떻게 해야 쓸수 있는지를 알아야하는데 new 라는 키워드를 통해 클래스를 재정의해서 쓰게 되며 우리는 이를 "객체" 혹은 "인스턴스"라고 부른다.

그럼 여기서 우리가 위의 메인메소드에서 맨위의 Robot 클래스안에 있는 void method( )라는 메소드를 불러서 쓴다고 가정하자. 결과값은 넣어봐야 아는 것이니까 그걸 빼고 명령을 주는데 그러면 그냥 method( )를 치면 동작해야 하는데 작동하지 않는다. 자바에서는 클래스를 이용한 객체 생성을 통해서 메소드에 접근할수 있도록 만들어 놓았기 때문이다. 바로 이렇게 말이다.

Robot x = new Robot( );

바로 로봇 클래스를 이용한 객체 생성을 완료하였다. 유식한 말로 인스턴스화했다고도 한다. 여하튼 이 인스턴스의 이름은 x이다. 이제 메소드를 부를수가 있다. 뭐를 통해서? x라는 인스턴스를 통해서 이런 식으로 사용한다.

x.method( );

이런 식으로 다른 곳에 있는 메소드를 불러서 쓸수가 있다. 조금 공식화해서 보여주자면,

인스턴스 생성시는~

클래스 인스턴스이름 = new 클래스( );

인스턴스 부를때는~

인스턴스이름.메소드이름(입력값);

이렇게 되겠당~

왜 static 하다 말고 이걸 설명하는거야? 라고 묻는이가 있을 것이다. 여기까지 이해를 해야 설명이 가능하기 때문이다. static의 기능이 여러가지 있지만 여기서 이해할 부분만 짚고 넘어가겠다. 필자가 프로그램의 시작과 끝이 메인메소드에서 이루어진다는 것을 못이 박히도록 얘기했는데 기억나겄지? 메인메소드도 엄밀히 이야기하면 클래스안에 있는 것인데 그럼 시작할때 메인메소드도 객체생성을 한후 불러서 쓸수 있어야 하지 않겠는가? 그럼 프로그램 실행할때마다 메인메소드가 안에 들어있는 클래스를 객체 생성하라고 시키고 자바소스를 실행시켜야 할것이다. 이 얼마나 난감한 일인가? 그런데 알다시피 우리는 그냥 자바소스 컴파일한후(이때 자바소스를 읽어들일때 static의 존재여부에 따라서 메인메소드가 어디에 있는지도 찾아내는 것이다)에 객체생성 이런거 없이 그냥 자바 프로그램 실행해서 메인메소드 너무나 당연하다는듯이 작동시키고 있는데 고맙게도 이런 수고(?)를 덜어준 바로 그 황금같은 단어 static이 메인메소드 앞에 딱 붙음으로써 모든 자바 프로그래머들이 그런 번거로운 작업에서 해방되었다는 믿기힘든 전설(?)이 미국 실리콘밸리 어디에선가 전해오고 있다고 한단다.ㅎㅎ

public static void main(String[ ] args)
public static void main(String args[ ])
public static void main(String[ ] apple)
static public void main(String orange[ ])
static public void main(String[ ] tiger)
static public void main(String lion[ ])

메인메소드를 써봤는데 여섯개 중에 뭐가 틀렸을까?
모두다 정답이다. 허걱~ 그럼 강이가 답해설을 하겠다. 두근두근~ ^^
public이랑 static은 위치가 바뀌어도 전혀 상관이 없다.
args는 아까전에도 얘기했듯이 매개변수 이름일뿐 아무거나 써도 된다.
배열을 뜻하는 [ ]은 변수 앞이나 뒤나 어디에 위치해도 상관없다.
너무나 당연하지만 void main( )는 순서 절대 바뀌면 안된다.
이유는 메인메소드이니까 메소드 형식에 따라 "결과값 이름(입력값)"의 형식을 취한다.
여기서 필자가 추천하는 메인메소드 형식은 첫번째 구문이다.
public static void main(String[ ] args)
모든 명령어 의미 하나하나가 순서대로 빠르게 전달될뿐 아니라 깨끗하고 명료하니 여러분도 이렇게 쓰는데 익숙해지기 바란다.
더불어 메인메소드는 위와같이 항상 똑같은 형식이니 이번 기회에 그냥 외워버리자.

메인메소드 하나 가지고 이렇게 많은 내용을 일일히 설명하는게 어이없게 보일지도 모르겠으나 그 노력은 헛되지 않을 것이며 여기까지 소화하며 따라온 이들에게 필자는 경의를 표하고 싶다. 다시 강조(?)하지만 메인메소드 하나 가지고 울어먹은것 절대 아니다. 믿어달라.^^ 자바를 웬만큼 하는 이들도 메인메소드를 이 정도까지 독파하고 있는 이들은 상당히 드물 것이다. 여러분이 처음 자바를 시작했더라도 오늘 설명한 강좌를 확실하게 이해했다면 어느 누구에게도 웬만해서는 꿀리지 않는 자바 프로그래머의 첫 단추를 제대로 끼웠으리라 확신하면서 오늘은 여기서 끝내겠다. 수고 많았다. 쉬어라~ ㅎㅎ

자바의 기본 문법-출처:http://alecture.blogspot.co.nz



자바의 기본문법(Structure) - 출처: http://alecture.blogspot.co.nz

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

여러분은 이미 자바의 모든 것을 갖추었다. 자바소스만 빼고 말이다. 그렇다면 설치된 자바 에디터를 열고 새로 시작하기 버튼 눌러 파일이름을 맨 첫째줄과 같이 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"라고 고치는거 신중(?)하게 생각해봐야겠다. 소설 잡아? ㅎㅎ

Saturday, 26 January 2013

암기


  • public class Classname(대문자로시작: 클래스의 명칭은 public이 왔을 때 반드시 java의 파일명과 일치해야한다. ) 
  • 클래스의 형식:   class 이름
  • 메소드의 형식:   결과값 메소드이름(입력값)

  • 인스턴스 생성: 
  • 클래스(대문자로시작) 인스턴스이름 = new 클래스( );
  • Classname instancename = new Classname( )

  • 인스턴스 호출:
  • 인스턴스이름.메소드이름(입력값);
  • instancename.method( )

Tuesday, 15 January 2013

문자
설명
%
복수개의 문자와 대응된다도스의 * 동일한 의미를 가지며%자리에는 임의 개수의 임의 문자가   있다.
_(under bar)
하나의 문자와 대응된다도스의 ? 동일한 의미를 가지며 _자리에 하나의 임의 문자가   있다.
[ ]
[ ]안에 포함된 문자 리스트  하나의 문자와 대응된다.
[^ ]
[^ ]안에 포함된 문자 리스트에 포함되지 않은 하나의 문자와 대응된다.


Structured Query Language

 계산 필드처럼 실제로 테이블에 존재하지 않는 필드를 쿼리에서 가공하여 출력하는 경우도 있는데 이때는 별명을 반드시 지정해야 한다계산 필드는 가공된 것이므로 이름이 따로 없기 때문이다.