java

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ java ] in KIDS
글 쓴 이(By): hell (나누구야)
날 짜 (Date): 1997년11월23일(일) 16시56분09초 ROK
제 목(Title): [푼글] 객체지향 프로그래밍



다 아시는 분에게는 암 것도 아니겠지만...

저 같은 분들을 위해서...

-------------------------------------------------------------------
1997 06 14
강신동
sindong@hyowon.pusan.ac.kr
http://164.125.88.41
객체지향 프로그램밍에서 객체간의 메세지 전달

객체간의 통신에 대하여 알아보자

객체간의 통신은 message 에 의해서 의사전달을 한다.
이러한 message를 준다는 것은 그 객체에게 있는 method를
호출한다는 것을 의미한다.
이러한 객체간의 통신은 중재자가 반드시 있어야 한다.
이러한 중재자는 중재자가 메세지를 전달하고자 하는 객체를
포함하고 있어야 한다.
아주 간단한 경우에 이러한 중재자는 main method가 된다.

객체간의 통신은 어떤 class에 객체가 속할 때 이루어질 수 있다.

class A {
   String name;
   void 이름은이걸로하렴 (String name) {
      this.name = name;
   }
   String 너이름뭐야() {
      return name;
   }
}
class B {
   public static void main(String[] args) {
      A 공부하는사람 = new A();
      A 떠드는사람   = new A();
      공부하는사람.이름은이걸로하렴("강신동");
      떠드는사람.이름은이걸로하렴("듀크");
      System.out.println("공부를 열심히 하는 사람은 " +
                          공부하는사람.너이름뭐야() + " 입니다.");
      System.out.println("떠드는 사람은 " +
                          떠드는사람.너이름뭐야() + " 입니다.");
      System.out.println("떠드는 사람의 이름이 바뀝니다.");
      떠드는사람.이름은이걸로하렴("만득이");
      System.out.println("떠드는 사람은 " +
                          떠드는사람.너이름뭐야() + " 입니다.");
   }
}
실행결과는 아래와 같습니다.

C:\Java 연습\OOP>java B
공부를 열심히 하는 사람은 강신동 입니다.
떠드는 사람은 듀크 입니다.
떠드는 사람의 이름이 바뀝니다.
떠드는 사람은 만득이 입니다.

여기서 중재자는 class B입니다.
class A에서 생성된 instance는 공부하는사람과 떠드는사람이
생성되었습니다.

띠용~ 
변수이름이나 클래스이름이 한글로도 가능합니다.
이러한 이유는 Java는 Unicode를 사용하기 때문입니다.
그러나 주의할 것은 제가 사용해 본 결과, 
변수이름을 한글로 할 경우 버그가 생길 수 있다는 것입니다.
될 수 있으면 변수이름이나 클래스이름, instance이름은
영문을 사용하는 것이 좋을 것 같습니다.

=========================================================

일반적인 객체간의 통신방법을 알아보겠습니다.

class Eye {
   double 시력 = 1.0;
   void set시력(double 시력) {
      this.시력 = 시력;
   }
   double get시력() {
      return 시력;
   }
}
class Man {
   Eye 왼쪽눈   = new Eye();
   Eye 오른쪽눈 = new Eye();
   String 모발색상 = "검은색";
   void set모발색상(String 모발색상) {
      this.모발색상 = 모발색상;
   }
   String get모발색상() {
      return 모발색상;
   }
   void set왼쪽눈시력  (double 시력) {
      왼쪽눈.set시력(시력);
   }
   void set오른쪽눈시력 (double 시력) {
      오른쪽눈.set시력(시력);
   }
   double get왼쪽눈시력 () {
      return 왼쪽눈.get시력();
   }
   double get오른쪽눈시력 () {
      return 오른쪽눈.get시력();
   }
}
class Doctor {
   public static void main(String[] args) {
      Man 환자1 = new Man();
      Man 환자2 = new Man();
      환자1.set모발색상("빨강색");
      환자1.set왼쪽눈시력(0.3);
      환자2.set오른쪽눈시력(0.1);
   
      System.out.println("환자1님 머리색은 " +
                          환자1.get모발색상() + " 입니다.");
      System.out.println("환자2님 머리색은 " +
                          환자2.get모발색상() + " 입니다.");
      System.out.println();
      System.out.println("환자1님 왼쪽눈시력은 " +
                          환자1.get왼쪽눈시력() + " 입니다.");
      System.out.println("환자1님 오른쪽눈시력은 " +
                          환자1.get오른쪽눈시력() + " 입니다.");
      System.out.println();
      System.out.println("환자2님 왼쪽눈시력은 " +
                          환자2.get왼쪽눈시력() + " 입니다.");
      System.out.println("환자2님 오른쪽눈시력은 " +
                          환자2.get오른쪽눈시력() + " 입니다.");
   }
}
실행결과는 아래와 같다.

C:\Java 연습\OOP>java Doctor
환자1님 머리색은 빨강색 입니다.
환자2님 머리색은 검은색 입니다.

환자1님 왼쪽눈시력은 0.3 입니다.
환자1님 오른쪽눈시력은 1.0 입니다.

환자2님 왼쪽눈시력은 1.0 입니다.
환자2님 오른쪽눈시력은 0.1 입니다.

위의 예제에서 객체지향의 강력함이 나타난다.
우리가 Doctor라는 매니저를 만들고자 할 때 Man이나 Eye가 만약
이전에 만들어 놓은 클래스가 존재한다고 하면
class Man이나 class Eye의 method(즉,메세지)사용방법만을
요구한다.
하나의 class Eye에서 왼쪽눈과 오른쪽눈의 두개의 instance를 쉽게
만들 수 있다.
class Man에서 set왼쪽눈시력() 을 사용할 때 다시 코딩할 필요가 없이
class Eye의 set시력() 을 다시 호출시킴으로써 간단하게 해결될 수 있다.
위의 예제는 객체지향의 거의모든 의미를 내포하고 있다
따라서 위의 예제를 확실히 이해하기 바랍니다.

Java Developer Group 강신동드림
자신이 알고 있는 자바에 대한 아주 작은 지식이라도 
그것을 모르는 타인에게는 아주 중대한 문제일 수 있습니다.
당연히 남이 다 알겠지 하는 생각을 하지 마시고 자바강좌및팁란에
많이 올려주시기 바랍니다.
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.