형태적으로보면 프로그램은 많은 코드로 이루어져 있고, 코드는 순서가 있습니다.

일반적으로 먼저 나타난 코드가 먼저 수행이 됩니다. 프로그램을 실행시켰을 때 프로그램은

적혀져 있는 코드의 순서대로만 일을 한다는 뜻입니다.

그러나 모든 규칙에 예외가 있듯이 자바 프로그램에서도 코드의 순서대로 일을 하지

않는 경우가 있습니다.

 초보 프로그래머에게는 매우 혼동되는 생각같지만 프로그래머로써 조금만 성장하게되면

아인슈타인의 상대성이론이 바꿔놓은 세상처럼 프로그래머로서 자신의 시각을  바꿔 놓을

수 있는 사건을 만나게 됩니다.

그 첫째가 Thread에 대해서 알고부터 일 것입니다.

그럼 가장 기본적인 Thread를 한번 만들어 볼까요?

 

/**

* 화면에 간단한 문장을 출력합니다.

*/

public class MainThread {

    public static void main(String[] args) {

        System.out.println("MyLife For Aiur !!");

    }

}

예제 7 - 1 MainThread.java

 

예제 7 - 1 MainThread 프로그램을 실행시키면 화면에 “My Life For Aiur !!” 라고 출력을

합니다.

프로그램에서 시스템 자원인 CPU를 사용하고 메모리를 참조하고 객체간 메시지를 주고

받고, 일이라고 부를만한 것을 진행시키는 것은 Thread 입니다.

Thread가 생성되지 않으면 이런 일들을 할 수 없습니다.

객체를 생성하는 주체는 Thread이고, 객체의 메소드를 호출하는 주체도 Thread입니다.

당연히 Thread가 생성되지 않으면 객체를 생성할 수 없고,객체의 메소드를 호출할 수도

없습니다. , 프로그램에서 어떤행동도 할 수 없습니다.

 

그런데 MainThread를 살펴보면 Thread를 생성한 적이 없습니다.

MainThread클래스의 public static void main(String[] args) 메소드에서는 표준출력을 이용

해서 문자열을 출력하는 내용의 코드를 정의한 것 밖에 없습니다.

일을 수행하기 위해서 Thread를 만들지 않았다는 것입니다. 하지만 별도의 Thread를 만든코드가 없음에도 불구하고 MainThread가 실행이 되고, 화면에 내용을 출력할 수 있는 이유는, 프로그래머가 명시적으로 만든 Thread는 없지만 자바 버추얼 머신이 생성하는 기본

Thread가 있어서 이 Thread MainThread클래스의 public static void main(String[])

수행하고 있기 때문입니니다. 

Thread Main Thread라고 흔히 부르는데,클래스의 public static void main(String[] )

메소드를 찾아서 실행시키기 때문에, Main Thread라고 이름 붙입니다.

예제 7 - 1 MainThread클래스는 대표적인 Sequential (순차적인) 프로그램입니다.

, 코드가 나타난 순서대로 일을 수행하기 때문이고, 일을 하는 주체인 Thread가 하나

뿐이기 때문이기도 합니다. 일을 하는 Thread가 하나 밖에 없으니까 프로그램 코드 순서

대로 진행 될 수 밖에 없지요.

 

 

Runnable 인터페이스

 

자바에서 Thread와 함께 많이 사용되는 것은 Runnable 입니다.

사실 Runnable이 유명해진 것은 100% Thread 덕분입니다. Thread가 없다면 Runnable

거의 가치가 없다고 해도 과언이 아닙니다.

, Runnable을 배울 가치가 있는 것은 Thread때문이고,Thread Runnable을 매우

특별하게 대우해 줍니다. Thread Runnable을 어떻게 특별하게 대우해주고 있는 지에

대해서는 조금 후에 설명하도록 하고 여기서는 Runnable의 정체에 대해서 알아보겠습니다.

사실 Runnable의 실체는 보잘 것 없습니다.

메소드가 단 하나 선언되있는 간단한 인터페이스이거든요.

 

package java.lang;

public interface Runnable {

             public abstract void run();

}

예제 7 - 2 Runnable.java

 

지금쯤 여러분은 폴리포피즘을 잘 알고 있을 테니 이런 형태의 인터페이스를 사용하것 쯤은

쉬울 것입니다.

예제 7 - 3 Runnable 인터페이스를 구현한 MyRunnable 클래스를 보여주고 있습니다.

MyRunnable public static void main(String[] )에서는 Runnable 인터페이스와

Runnable객체(여기서는 MyRunnable객체)를 폴리포피즘을 이용한 사용법을 보여주고

있습니다.

 

/**

* 간단한 Runnable 클래스입니다.

*/

public class MyRunnable implements Runnable {                       

             public void run() {

                           System.out.println("Runnable 클래스입니다.");

             }

             public static void main(String[] args) {

                          

                           Runnable r = new MyRunnable(); // Runnable객체를 만듭니다.

                           r.run();   // 폴리포피즘을 이용해서 Runnable객체의 run()메소드 호출

             }

}

예제 7 - 3 MyRunnable.java

 

MyRunnable Runnable인터페이스를 구현한 클래스입니다.

“implements Runnable“이라고 선언한 것이 보이실겁니다.

MyRunnable클래스는 Runnable인터페이스를 구현한 클래스이지만 클래스로서의 가치는

거의 없습니다. MyRunnable 클래스의 public void run() 메소드에서는 간단한 메시지만

출력하는데 그치고 있기 때문입니다.하지만 MyRunnable 클래스와 달리 대개의 Runnable

클래스의 경우는 public void run()메소드가 의미있고,가치있는 행동을 하도록 설계됩니다.

 

Posted by
,