------------------------------------------------------------------------------
뉴스제공시각 : 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
정리 : 박은숙