2011년 5월 22일 일요일

Chapter 2 객체 지향 기술의 이해 - 3

3. What Is a Class?
실 세계에서, 우리는 종종 같은 종류의 많은 객체들을 가지고 있다. 예를 들어, 우리의 자전거는 세상에 있는 많은 자전거 중 오직 한대만 있다. 객체 지향 용어를 사용해서, 우리의 자전거는 자전거라는 클래스의 인스턴스라 할 수 있다. 자전거는 공통적으로 몇몇 상태와 행위를 갖는다. 그러나, 각각의 자전거의 상태는 다른 자전거의 상태와 독립적이고 다를 수 있다.
제조업자가 자전거를 만들 때 같은 설계도로부터 많은 자전거를 만들 수 있다. 각각의 자전거를 위해 새로운 설계도를 만든다는 것은 매우 비효율적이다.
클래스 도형


객체 지향 소프트웨어에서 공통적인 특징들을 갖는 같은 종류의 객체들을 가질 수 있다. 자전거 제조업자 처럼 우리도 같은 종류의 객체들은 유사하다는 사실들을 이용하고 그러한 객체들을 위한 설계도를 만들 수 있다. 객체들을 위한 소프트웨어 설계도를 클래스라 부른다.
"클래스(class)는 어떤 종류의 모든 객체들의 공통적인 변수들과 메소드들을 정의한 설계도 또는 원형이다."
자전거의 예에 대한 클래스는 자전거 객체 각각에 대해 현재의 기어와 같은 것을 포함하는데 필요한 인스턴스 변수를 선언할 것이다. 그 클래스는 또한 기어를 올린다거나 멈추기 위한 인스턴스 메소드에 대한 선언이나 구현을 다음 그림처럼 할 것이다.
인스턴스 메소드에 대한 선언과 구현


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


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


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

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...