java

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ java ] in KIDS
글 쓴 이(By): hell (나누구야)
날 짜 (Date): 1997년10월09일(목) 21시39분36초 ROK
제 목(Title): 자바 프로그램의 전체 구조 (5)



 ------------------------------------------------------------------------------
 뉴스제공시각 : 01/01 00:00                   출처 : 마이크로 
 제목 : [자바프로그래밍] 자바 프로그램의 전체 구조 (5)
 -----------------------------------------------------------------------------

       정적(static) 메쏘드와 필드
그런데 위에서 메쏘드나 필드는 필드 혹은 '클래스'와 연관되어 사용될 수밖에 
없다고 
했다. 클래스? 의문점이  생기지 않는가? 자세한 것은 추후에 설명하겠지만  
하나하나
의 객체가  아닌 클래스 자체에  속하는 메쏘드나 필드가  있는데 이것이 바로  
정적
(static) 멤버라고 불리는 것들이다. 사실 앞서 언급했던 main 메쏘드도 정적 
메쏘드이
다. 그러므로 객체가 생기기도 전에 사용될 수 있는 것이다. 이런 정적 메쏘드나 
필드
의 경우에는 객체를 명시하지  않고, 클래스 이름을 하여 메쏘드나 필드를  사용할 
수 
있다는 것을 알아 두기 바란다. 물론 객체를 명시해도 상관없다.
        정적 메쏘드는 정적 필드나  지역 변수밖에는 사용할 수 없다. 잠깐만 생각
해 보면 당연한 것이 정적 메쏘드는 특별히 어떤 인스턴스와 맞물려 사용되지도 
않으
며, 심지어는 아무런 그  클래스에서 찍어낸 객체가 하나도 없는 경우에도  호출될 
수 
있기 때문이다. 또한  정적 필드는 한 클래스에서  아무리 객체가 많이 
생성되더라도 
단 한 개만이 존재한다. <예제 4>가 이를 보여 주기 위한 예제이다. main 
메쏘드에서
와 같이 정적 필드나 메쏘드에는 static이라는  변경자(modifier)를 붙여 주고 
있다. 잠
깐 생각해 보자. 이런 정적  필드를 어디다 쓸 수 있을까? 간단한 예를 든다면 한  

래스에서 생성된 객체가 몇 개인지 계수  한다든지 하는 경우 유용하게 사용할 수 

을 것이다.

<예제 4> StaticTest.java
class Dummy {
    public static int s;
    public int a;
}

class StaticTest {
    static Dummy d1, d2;
    public static void main(String argv[]) {
        d1 = new Dummy();
        d2 = new Dummy();
        d1.a = 1;
        d2.a = 2;
        d1.s = -1;
        d2.s = -2;
        System.out.println("d1: a - " + d1.a + ", s - " + d1.s);
        System.out.println("d2: a - " + d2.a + ", s - " + d2.s);
    }
}


        다음에 보인 것이  바로 <예제 4>의 실행  결과이다. a는 d1, d2가 각각의 
값을 가지고 있는 데 비해, s는 마지막에 대입되었던 값만을 가지고 있다.

C:\temp>jview StaticTest
d1: a - 1, s - -2
d2: a - 2, s - -2

         s에 대한 접근은 다음과 같이 클래스 이름을 명시해서도 가능하다.

Dummy.s = -10;

        그외에 앞선 예제에서 사용된 것으로 정적 필드의 대표적인 예가 바로 
위에 
문자열을 표시하는 데 쓰였던 다음 문장이다.

System.out.println(...);

        위의 문장은  System이라는 클래스의 out 필드가  나타내는 객체의 
println 
메쏘드를 호출한다는 의미이다. 위의 문장은 당분간 유일하게  어떤 결과를 표시할 
수 
있는 수단이 될 것이므로 잘 익혀 두기 바란다.  표준 출력에 문자열을 표시하고 
한줄
을 띄우는 역할을 하는 메쏘드이다.

                   한회를 마치면서
이번호에는 간단한 프로그램을 컴파일하고 실행해 보았다. 이  과정에서 실제 일을 

는 부분은 메쏘드에 정의되어야 하고,  정보를 담는 변수들은 클래스에 속하거나 
인스
턴스에 속하거나 메쏘드 내의  블럭에 속할 수 있다는 것을 알았다. 또한 이  모든 

소는 반드시 클래스 안에 정의되어야 한다는 사실이 중요하다.
        다음호에는 첫회에 살펴 본 기본적인 구조에 대한 지식을 바탕으로 좀더 세
부적인 내용을 살펴  보도록 하겠다. 아울러 조금은  템포가 빠르게 진행되어 
지루한 
감이 들지 않도록 최선을 다할 생각이다. 화려한  애플릿에 비해 초라한 
예제들이었지
만 그래도 이렇게 저렇게 고쳐보다 보면 많은 것을 얻을 수 있으리라 생각한다.
필자 연락처 : dynaxis@dice.postech.ac.kr
정리 : 박은숙 
 
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.