[ 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 정리 : 박은숙 |