Chapter 2객체 지향 기술의 이해


 

1.     What Is an Object

소프트웨어 객체를 가시적으로 표현한 그림

사용자 삽입 이미지

객체는 객체지향 기술을 이해하는 열쇠이다.우리는 실 세계의 많은 객체의 예를 들 수 있다(,책상,텔레비젼,자전거.이런 실 세계의 객체들은 두 가지 특성으로 구분되어 진다.)

 

객체들은 상태와 행위를 갖는다.가령,개들은'이름', '','먹이'와 같은 상태와'짖다','물다','꼬리를 흔들다'와 같은 행위를 가지고 있다.

 

소프트웨어 객체들 역시 상태와 행위를 가지고 실 세계의 객체들을 모델링 된다.소프트웨어 객체들은 하나 또는 그 이상의 변수로 그들의 상태를 유지한다.변수는 식별자라 명명된 데이터의 항목이다.소프트웨어 객체들은 그 들의 행위를 메소드를 이용하여 구현한다.메소드는 객체와 연관된 함수(서브루틴)이다. 

 

객체는 변수들과 관련된 메소드들의 소프트웨어 번들이다.

 

우리는 실 세계의 객체들을 소프트웨어 객체들을 이용하여 나타낼 수 있다.,추상적인 개념 역시 소프트웨어 객체들을 이용하여 나타낼 수 있다.

 

2.     What Is a Message?

하나의 객체는 일반적으로 별로 유용하지 않다.대신,객체는 일반적으로 좀더 큰 프로그램이나 다른 많은 객체들을 포함하는 응용프로그램의 컴포넌트로써 이용된다.이러한 객체들의 상호작용을 통하여 프로그래머는 고차원의 기능이나 좀 더 복잡한 행위들을 달성한다.

소프트웨어 객체들은 객체간에 메세지(messages )를 보내어 통신을 한다.객체A가 객체B의 메소드들중의 하나를 수행시킬려 할 때,객체A는 객체B에게 메세지를 보낸다.

 

 

 

사용자 삽입 이미지

 

 

종종,메세지를 받는 객체는 무엇을 할 것인지를 정확하게 알기 위해 더 많은 정보를 필요로 한다.예를 들어,우리가 자전거의 기어를 바꾸려 할 때,우리는 원하는 기어를 알고 있어야만 한다.이 정보가 파라미터(parameters)로 메세지와 함께 건네 진다.

 

다음 그림은 메세지를 구성하기 위한 세 개의 구성요소를 보여주고 있다:

사용자 삽입 이미지
      
메세지를 받는 객체(YourBicycle)

사용자 삽입 이미지
      수행하기 위한 메소드의 이름(changeGears)

사용자 삽입 이미지
      메소드에 필요한 어떤 파라미터들(lowerGear)

 

 

사용자 삽입 이미지

 

 

이 세가지 요소들이 원하는 메세지를 받는 객체에 대해서 메소드를 수행하기 위한 충분한 정보이다.메세지들은 두 가지 중요한 이점을 제공한다.

 

사용자 삽입 이미지
      객체의 행위는 메소들을 통하여 표현되고,그래서 메세지를 보내는 것은 객체간 모든 가능한 상호작용을 지원한다.

사용자 삽입 이미지
      객체들은 같은 프로세서나 같은 기계에서 조차 있을 필요가 없고 서로 메세지를 주고 받을 수 있다.

 

3.     What Is a Class?

실 세계에서,우리는 종종 같은 종류의 많은 객체들을 가지고 있다.예를 들어,우리의 자전거는 세상에 있는 많은 자전거 중 오직 한대만 있다.객체 지향 용어를 사용해서,우리의 자전거는 자전거라는 클래스의인스턴스라 할 수 있다.자전거는 공통적으로 몇몇 상태와 행위를 갖는다.그러나,각각의 자전거의 상태는 다른 자전거의 상태와 독립적이고 다를 수 있다.

제조업자가 자전거를 만들 때 같은 설계도로부터 많은 자전거를 만들 수 있다.각각의 자전거를 위해 새로운 설계도를 만든다는 것은 매우 비효율적이다.

클래스 도형

사용자 삽입 이미지

객체 지향 소프트웨어에서 공통적인 특징들을 갖는 같은 종류의 객체들을 가질 수 있다.자전거 제조업자 처럼 우리도 같은 종류의 객체들은 유사하다는 사실들을 이용하고 그러한 객체들을 위한 설계도를 만들 수 있다.객체들을 위한 소프트웨어 설계도를 클래스라 부른다.

 

 

 

 

클래스(class)는 어떤 종류의 모든 객체들의 공통적인 변수들과 메소드들을 정의한 설계도 또는 원형이다.

 

자전거의 예에 대한 클래스는 자전거 객체 각각에 대해 현재의 기어와 같은 것을 포함하는데 필요한 인스턴스 변수를 선언할 것이다.그 클래스는 또한 기어를 올린다거나 멈추기 위한 인스턴스 메소드에 대한 선언이나 구현을 다음 그림처럼 할 것이다.

 

인스턴스 메소드에 대한 선언과 구현

사용자 삽입 이미지

 

자전거 클래스를 만든 후,우리는 클래스로부터 수 만개의 자전거 객체라도 만들어 낼 수 있다.클래스의 인스턴스를 만들 때,시스템은 그 객체와 모든 인스턴스 변수에 대한 충분한 메모리를 할당한다.각각의 인스턴스는 클래스 내부에 정의되어 있는 모든 인스턴스 변수의 사본으로 얻어진다.

 

인스턴스

사용자 삽입 이미지

 

게다가 인스턴스 변수들과 클래스들은 클래스 변수로 정의될 수 있다.클래스 변수는 그 클래스의 모든 인스턴스에 의하여 공유되는 정보를 포함한다.예를 들어,모든 자전거가 같은 수의 기어를 가지고 있다고 하자.이 경우에,기어의 수를 정의하기 위해 인스턴스 변수를 정의하는 것은 비효율적이다;각 인스턴스가 그 변수에 대한 사본를 가지게 될 것이지만 그 값은 모든 인스턴스에 대해 같다.이런 상황에서는 기어의 수를 포함하는 클래스 변수를 정의할 수 있다.모든 인스턴스들은 이 변수를 공유한다.만약 하나의 객체가 이 변수를 바꾼다면,그 타입의 다른 모든 객체들을 바꾸게 된다.또 클래스는 클래스 메소드를 선언할 수 있다.클래스로부터 직접적으로 클래스 메소드를 호출 할 수 있는 반면,특정 인스턴스에서는 인스턴스 메소드를 호출해야 한다.

 

사용자 삽입 이미지

 

Objects vs. Classes

아마 객체와 클래스의 설명이 매우 유사하다는 것을 인식하였을 것이다.그리고 실재로,객체와 클래스 사이의 차이는 종종 몇몇 혼동의 근원이다.실 세계에서,클래스들은 명확하게 객체 자체가 아니다:자전거의 설계도는 자전거가 아니다.그러나,소프트웨어에서는 클래스와 객체를 나누는 것이 약간 더 어렵다.이것은 소프트웨어 객체가 단지 실 세계의 객체나 추상적인 개념의 전자적인 모델이기 때문이다.그러나"객체"라는 말이 때때로 클래스와 인스턴스 모두를 참조하는데 사용되어지기 때문이기도 하다.대조적으로,객체는 나뉘어 진다.

그림에서,클래스는 객체 그 자체이기보다는 객체의 설계도를 나타낸 것이어서 나뉘어 지지 않는다.

 

4.     What Is Inheritance?

일반적으로 말하면,객체들은 클래스들의 관계로 정의되어 진다.어떤 객체의 부류를 알아내어 그 객체에 대한 더 많은 것을 알 수 있다. "penny-farthing"를 모른다 하더라도(penny-farth은 앞바퀴가큰 옛날 자전거)그것이 자전거라고 한다면,우리는"penny-farthing"이 두개의 바퀴,핸들과 페달이 있다는 것을 알 것이다.

객체 지향 시스템은 이 과정을 보다 더 이용하고 클래스들이 다른 클래스들의 관계에서 정의되어 지는 것을 허용한다.예를 들어 산악 자전거,경주용 자전거는 모두 자전거이다.객체 지향의 전문용어로는 산악 자전거,경주용 자전거를 자전거 클래스의 하위 클래스(subclass)라 한다.,자전거 클래스는 산악 자전거,경주용 자전거의 상위 클래스(super class)라 한다.이 관계는 다음 그림에서 볼 수 있다.

사용자 삽입 이미지

각각의 하위 클래스는 상위 클래스로부터 상태를 상속 받는다.산악 자전거,경주용 자전거는 몇 가지 상태들이 공통적이다.,각 하위 클래스는 상위 클래스로부터 메소드들을 상속 받는다.

그러나,하위 클래스들은 그들의 상위 클래스에 의하여 상태와 행위가 제한되지 않는다.하위 클래스는 상위 클래스로부터 상속 받은 변수들이나 메소드들을 추가할 수 있다.

 

하위 클래스는 또 상속 받은 메소드들을 재정의 할 수 있고 상속받은 메소드들에 대해 특별한 구현을 제공한다.

 

상속은 오직 한 단계일 필요는 없다.상속 트리(tree),또는 클래스 계층구조(hierarchy)는 필요한 만큼 확장 될 수 있다.

 

Object클래스는 클래스 계층상 최상위이고,각 클래스는 그것의 후손이다. Object타입의 변수는 클래스의 인스턴스나 배열과 같은 어떤 객체에 대해서도 참조를 할 수 있다.

 

상속은 다음과 같은 이점들을 제공한다:

 

사용자 삽입 이미지
      
하위 클래스는 상위 클래스에 의해 제공되는 공통적인 요소에 대한 토대로부터 특별한 행위를 제공한다.상속을 통하여 프로그래머는 상위 클래스의 코드를 여러번 재사용할 수 있다.

사용자 삽입 이미지
      프로그래머는 일반적인 행위를 정의하는 추상 클래스라 불리는 상위 클래스로 구현할 수 있다.추상의 상위 클래스는 행위들을 정의할 수 있고 부분적으로 구현할 수도 있다.그러나 대부분의 경우는 정의되지 않거나 구현되어 있지 않다.다른 프로그래머들이 특별한 하위 클래스를 자세하게 채우게 된다.

 

5.     What Is an Interface?

사전적인 의미로 인터페이스는 장치,방안,서로 관련 없는 개체들이 상호 작용을 하는데 사용되는 시스템이다.이 정의에 따라,행위의 리모콘은 사람과 텔레비젼 사이의 인터페이스이며,언어는 두 사람 사이의 인터페이스이다.자바 프로그래밍 언어 내에서 인터페이스는 관련없는 객체들을 서로 상호작용을 하도록 이용되는 장치이다.인터페이스는 아마 가장 규약(protocol)과 유사한 것이다.

우리는 어떤 클래스에 의해서건 어떤 클래스 계층구조에서 간에 구현되어 질 수 있는 행위의 규약을 정의하는데 인터페이스를 이용한다.인터페이스는 다음과 같은 상황에 유용한다.

 

사용자 삽입 이미지
      클래스 관계에 대한 인위적인 강요 없이 관계없는 클래스들 사이의 유사성을 획득 하는 것

사용자 삽입 이미지
      하나 또는 그 이상의 클래스들의 구현이 기대되는 메소들을 선언

사용자 삽입 이미지
      객체에 대한 클래스의 노출 없이 객체의 프로그래밍 인터페이스를 노출하는 것

 


Posted by 영웅기삼
,