[ java ] in KIDS 글 쓴 이(By): hell (나누구야) 날 짜 (Date): 1997년10월09일(목) 21시14분30초 ROK 제 목(Title): 자바 프로그램의 전체 구조 (3) ------------------------------------------------------------------------------ 뉴스제공시각 : 01/01 00:00 출처 : 마이크로 제목 : [자바프로그래밍] 자바 프로그램의 전체 구조 (3) ----------------------------------------------------------------------------- 클래스(classes) 언뜻 봐도 기껏해야 몇 글자 정도 표시하는 프로그램치고는 '{'와 '}'로 둘러싼 것들이 많아 보인다. 그도 그럴 것이 벌써 위의 프로그램에서 이 단순한 작업을 위해 HiAll이 라는 '클래스(class)'를 정의하고 그 안에 main이라는 '메쏘드(method)'를 정의한 다음 이 안에 비로소 'Hi, all' 문장을 표시해 주고 있기 때문이다. 기본적으로 클래스는 다 음과 같은 형태를 가진다. class 이름 { ... } 이처럼 자바에 있어서는 글자를 표시하는 등의 작업을 지시하는 문장 (statement)을 담고 있는 메쏘드는 반드시 클래스 내부에 위치해야 한다. C++에서와 는 달리 메쏘드의 몸체, 즉 내용까지도 모두 클래스 안에 포함되어야 함을 주의 깊게 보자. 이외에도 위의 예에는 나타나 있지 않지만 '필드(fields)'라고 하는 일종의 변수 의 선언 역시 반드시 이 클래스 안에 포함되어야 한다. 아다시피 자바는 객체지향 프로그래밍(object oriented programming) 언어 이다. 클래스는 객체지향 프로그래밍에 있어서 기본 단위이며, 객체(object)라는 대상 의 형틀로 사용된다. 일단 여기서는 '객체'란 정보를 담을 수 있는 기억장소인 변수와 객체가 행할 수 있는 일을 명시하는 메쏘드를 한데 묶은 개념이라는 정도로 알고 넘 어가도록 하자. 다시 말하면 클래스는 객체가 어떠한 '필드'와 어떠한 일을 하는 '메쏘 드'를 가지고 있느냐를 정의해 둔 형틀이다. 이 형틀로부터 많은 수의 객체가 생성될 수 있다. 일단 자세한 이야기는 접어두고 이해를 돕기 위해 <예제 2>를 살펴 보도록 하자. 이번에는 파일 이름을 PointExample.java라고 하자. <예제 2> PointExample.java class Point { public int x, y; // 필드 public void moveTo(int _x, int _y) { x = _x; y = _y; } public String toString() { return "Point (" + x + "," + y + ")"; } } class PointExample { public static void main(String argv[]) { Point origin, aPointOnX, aPointOnY; // 변수 origin = new Point(); origin.moveTo(0, 0); aPointOnX = new Point(); aPointOnX.moveTo(100, 0); aPointOnY = new Point(); aPointOnY.moveTo(0, 1000); System.out.println("Origin: " + origin); System.out.println("A point on x axis: " + aPointOnX); System.out.println("A point on y axis: " + aPointOnY); } } <예제 2>에서 보듯이 Point 클래스는 말 그대로 한 점을 나타낸다. 점은 x 좌표와 y 좌표를 가지고 있고 원한다면 특정한 좌표로 움직일 수 있다(moveTo 메쏘 드). 또 toString는 필요한 경우 Point 클래스에서 찍어낸 객체를 문자열로 나타내고자 할 때 사용된다. <예제 2>에서는 세 개의 객체를 찍어냈다. 하나는 원점으로 옮겼고, 다른 둘은 각각 x축과 y축 위로 옮겼다. 이 세 객체는 점(point)이라는 면에서는 동일 하고 단지 현재의 좌표라는 상태(state)만이 다른 객체들이다. 정의된 클래스를 통해서 이렇게 객체를 생성하는 것을 인스턴스화(instantiation)라고 하고, 생성된 객체를 클래 스의 인스턴스(instance)라고 한다. 예제에서 보듯이 자바에서 객체를 인스턴스화할 때 는 'new'라는 연산자를 사용한다. 위의 예의 실행 결과는 다음과 같다. C:\temp>jview PointExample Origin: Point (0,0) A point on x axis: Point (100,0) A point on y axis: Point (0,1000) 이 예제에서는 한 가지 더 확인하고 넘어가야 할 것이 있다. 컴파일 후 디 렉토리의 내용을 보면 알겠지만 이번에는 Point.class와 PointExample.class라는 이름 의 두 개 파일이 생성되어 있음을 확인하기 바란다. 자바에서는 원시 코드 파일과 무 관하게 항상 클래스 하나당 하나의 클래스 파일이 대응하도록 되어있다. 메쏘드(methods) <예제 2>에서 보듯이 무엇인가 일을 하기 위해서는 메쏘드를 정의하고 그 안에 할 일을 명시하는 문장(statements)을 명시해야 한다. 위에서 moveTo 메쏘드는 단순히 객체 내부의 상태인 좌표 (x, y)를 지정한 값으로 바꾸는 일을 하고 있다. 또한 toString 메쏘드는 그 객체를 문자열로 나타낼 때 어떤 형태가 되어야 하는가를 결정 하고 있다. 이같이 메쏘드는 객체의 해야 할 행위(behavior)를 명시한 것이다. |