java

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ java ] in KIDS
글 쓴 이(By): hell (나누구야)
날 짜 (Date): 1997년10월09일(목) 22시12분33초 ROK
제 목(Title): 자바의 데이터형과 변수 (5)



 ------------------------------------------------------------------------------
 뉴스제공시각 : 02/01 00:00                   출처 : 마이크로 
 제목 : 자바프로그래밍[2]/자바의 데이터형과 변수 (5)
 -----------------------------------------------------------------------------


객체지향 프로그래밍
객체지향 프로그래밍이란 문제를 해결하는 데 있어서 "필요한 객체를 찾아 그 종류
와 특성에 따라 체계적으로 분류하고,  그 객체가 반응해야 할 메시지를  정의한 
뒤, 객체에 보내는 메시지의 순서를 기술"하는  프로그래밍 방법이다. 황당한 정의
인지는 모르겠지만 이 문장은 객체지향 프로그래밍을 행하는 순서를  간략히 설명한 
것이다.
객체지향 언어에서의 객체는 행위(behavior)와  상태(state)를 가지는 대상으로 
실제 
우리 주변에서 보는 컴퓨터, 자전거, 사람 등등의 사물들이나 날짜, 시간 등 여타 추
상적인 개념을 컴퓨터 내부에서  표현한 것이다. 객체지향 언어에서  객체는 행위를 
나타내기 위해 메쏘드를 가지고 있고, 상태를 나타내기 위해 필드(변수)를 가지고 있
다. 즉, 메쏘드와 필드를 묶어놓은 꾸러미같은 것이다.
이 객체는 내부적으로 어떻게 만들어졌든지 간에 객체에 주어지는  메시지를 반응함
으로써 어떠한 일을 행한다. 객체 외부에서 객체에게  무엇인가를 하라고 지시 혹은 
요청하는 것으로 볼 수 있다. 이에 대해 객체는  자신의 상태를 바꾸거나 하여 일을 
하고 때때로 결과로 객체를 돌려준다. 예를 들어 보자. 
만약 "자동차"라는 객체가 있다고 해 보자. 이 객체는 현재의  속도, 기어가 몇 단인
가 등의 상태를 가질 수 있다. 다음으로 "가속하라", "현재  속도는 얼마인가?", 
"기어
를 x 단으로 하라" 등등의 지시를 받을 수 있다. 이러한 것들은 객체에 보내는 
"메시
지"로 볼 수 있다. 두번째 질문의 경우 속도를 결과로 알려준다. 객체를 돌려주는 

에 비유될 수 있다. 이 자동차를 자바 클래스로 나타내어 보자.

class 자동차 {
    private int 속도;
    private int 기어 = 1;
    public void 가속하라() {
        속도 = 속도 + 기어 * 5;
    }
    public int 현재속도() {
        return 속도;
    }
    public void 기어변경(int x) {
        기어 = x;
    }
}
class Test {
    public static void main(String args[]) {
       자동차 티뷰론 = new 자동차();
       티뷰론.가속하라();
       System.out.println("속도 : " + 티뷰론.현재속도());
    }
}

이와 같이 내부의 속도, 기어 등의 상태, 즉 데이터는 잘 정의된 메시지에 의해 
숨겨
진다. 메쏘드는 이 메시지에 어떻게 반응할  것인가를 나타낸 것과 같다. 이와  
같이 
객체는 어떤 개념이나 대상을 추상화(abstraction)할 수 있고, 객체 내부의 구현과 

이터를 묶어 그 외부와 격리시키는 캡슐화(encapsulation)을 하는 수단이  
된다(위의 
그림을 참고하라). 그리고 클래스 Test의 main() 메쏘드에서 보듯이 해결해야 할 문
제는 객체에 일련의 메시지를 보내는 것으로 풀어간다.
하지만 우리 주변을 살필 때 단순히 주변의 대상을 객체로 나타낼 수 있는 것만으로
는 뭔가 불편하다는 것을 느낄 수 있다. 자동차에는 승용차, 화물차 등이  있고 
승용
차에는 소형, 중형, 화물차에는 적재량에 따라 다양한 종류의 화물차가 존재한다. 

각은 틀리지만 공통된 특징들을 가지고 있다. 예를 들면 위에서 언급한 변속과 
가속, 
현재의 속도 등은 어느 자동차나 가지는 특징이다. 그렇다면 공통된 특징은 두고 각
각이 틀린 부분만을 새로이 추가하면 되지 않을까? 이것을 지원하기 위해 도입된 개
념이 상속(inheritance) 개념이다. 마치 생물을 분류하듯이 객체를 종류별로 
분류하는 
것이다.
마지막으로 객체지향  프로그래밍에서 중요시  되는 개념으로  또 한  가지 다형성
(polymorphism)이 있다. 예를 들어 보자. 수동 변속 장치와 자동 변속 장치가  
각각 
달린 자동차가 있다고 하자. 만약 이 들의 기어를 변경할 필요가 있을  때, 
전자보고
는 "수동 변속하라", 후자보고는 "자동 변속하라"라고 구분해 이야기하지는 않을 
것이
다. 그냥 단순히 자동차이기 때문에 "변속하라"라고 이야기할 것이다. 하지만 
변속하
는 방법은 틀리다. 이 같이 서로 다른 객체에게 동일한 메시지를 보낼 수 있는 
것은 
다형성 때문이다.
지금까지 간단히 객체지향 프로그래밍에 대해 알아보았다. 실제 위의 개념을 용이하
게 사용하게 하기 위해 자바에서 어떤 지원을 하는가는  차차 알아 보도록 하자. 이
런 객체지향 프로그래밍은 먼저 실제 세상의 객체를 프로그램에 그대로 옮겨올 수 
있고, 인간의 사고 방식과 유사하여 문제 분석과 해결을 쉽게  한다. 다음으로 객
체의 구현을 객체 안에 한정시킴으로써 한 번 작성한 코드를 재사용하기 쉽게 해 주
고, 상속에 의해 쉽게 기존의 프로그램을 확장할 수 있게 해  준다. 또한, 객체 
내부
를 수정해도 그 메시지만 변치 않으면 다른 객체가 영향 받지 않으므로,  쉽게 수정
할 수 있고 신뢰도 높은 프로그램을 작성할 수 있다.
하지만 자바 프로그래밍을 하면서 객체지향적으로 프로그래밍해야 한다는 강박 관념
에 빠져 너무 괴로워하지는 말자. 다른 프로그래밍 방법과 객체지향 방법에 대한 비
교는 참고자료②의 pp.14∼42를 참고하기 바라며,  참고자료⑨의 pp.31∼41은 객체
지향에 대한 개념을 잡을 수 있도록 아주 쉽게 쓰여져 있다. 더불어  참고자료⑤, 

의 앞쪽 몇 장도 읽어둘 만하다.




 ------------------------------------------------------------------------------

 
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.