1. 클래스 (Class)
Java를 흔히 객체지향언어라고 한다. 객체란 무엇인가? 객체는 현실 세계에서 접할 수 있는 모든 사물과 같은 개념이다. 가령 개를 예로 들겠다. 현실 세계에서 접하는 개라는 객체는 기본적으로 속성과 행동을 갖고 있다. 물론 이런 설명이 조금은 딱딱해 보이지만 궁극적인 목표는 프로그래밍이므로 객체지향 프로그래밍 방법론에 맞춰서 설명을 해야한다.
다시 개로 돌아가보자. 다시 한 번 얘기하지만 개는 속성과 행동을 가지고 있고 이것이 객체의 중요한 두가지 요소가 된다.
객체 (Object) = 속성 (Attribute) + 행동 (Operation)

사용자 삽입 이미지
개를  프로그래밍 언어로 표현해보겠다. 우선 가장 먼저 할 일은 개가 갖고 있는 속성과 행동을 뽑아내는 일이다. 속성은 객체의 특징을 나타내는 요소이다. 이름, 털 색깔, 꼬리 모양, 크기 등이 있을 수 있다. 행동은 여러분이 개에게 명령을 내리고 싶은 걸 표현하면 된다. 여기서 중요한 점은 개가 능동적으로 할 것 같은 행동이 아니라 개에게 명령을 내린다라는 것이다. 객체지향 프로그래밍에서는 객체끼리 서로 메세지를 주고 받는데 이 메세지가 바로 객체의 행동이 되는 것이다.
조금 어려워졌다. 계속 진행해보자. 개를 다음과 같이 표현해보았다.
사용자 삽입 이미지
개의 속성으로 품종, 나이, 이름, 크기, 털색깔을 지정했고, 개에게 내릴 수 있는 명령으로 앉는다, 선다, 뛴다, 멈춘다, 짖는다라고 정했다.
Java 언어로 코딩을 하기위해서는 위의 표현을 그대로 사용해도 좋겠지만 (유니코드를 지원하기 때문에 한글 이름 사용이 가능하다) 영어로 다시 설계를 해보겠다.
사용자 삽입 이미지
영어를 공부하는 시간이 아니므로(^^;) 비슷한 단어를 골라서 표현했다. 여기서 Java의 문법을 잠시 살펴보겠다.
지금부터는 관례적인 표현임을 알려두겠다. 문법적으로 틀린 표현은 아니나 관례상 다음과 같이 사용한다.
클래스 이름은 대문자로 시작한다. 속성(필드, 멤버변수) 이름은 소문자로 시작한다. 동작(메서드) 역시 소문자로 시작한다. 2개 이상 단어가 사용될 때는 띄어 쓰기를 할 수 없기 때문에 두번째 단어의 첫글자를 대문자로 시작하여 읽기 편하게 한다.
그럼 위의 설계를 실제 Java 코드로 바꿔보겠다.
/**
* 클래스명 : Dog
* @author 정승용 (jeongsy10@empal.com)
*
*/
class Dog {
String kind; // 품종
int age; // 나이
String name; // 이름
String size; // 크기
String color; // 털 색깔

void seat() { } // 앉다
void standUp() { } // 일어서다
void run() { } // 달린다
void stop() { } // 멈춘다
void bark() { } // 짖는다
}

이제 개의 설계도가 완성되었으니 개를 만들어 보겠다. 당연히 여기서 만들어지는 개는 컴퓨터의 메모리상에 존재하며 메모리상에 만들어진 개를 가리킬 변수가 필요하다.
/* 메모리상의 개를 가리키는 참조변수 사용 */
Dog d = new Dog();

'd'는 메모리상에 실제로 만들어진 개(객체; Object)를 가리키는 객체참조 (object reference)이다. 'd'의 타입은 Dog 클래스와 같은 타입으로 선언한다. 메모리에 개를 만드는 명령은 'new' 연산자 이다. 결론적으로 위의 명령은 다음과 같다.
Dog 클래스 구조로 객체를 만들고, 이 객체를 Dog 타입의 d라는 이름의 객체참조로 가리킨다.
이제부터 우리는 d라는 이름의 객체참조를 이용하여 Dog 객체를 사용할 수 있게 된다.
그럼 개에게 이름을 지어줘야겠다.
 /* 개에게 이름짓기 */
d.name = "바둑이";

d가 가리키는 객체의 필드(멤버변수)인 'name'에 '바둑이'라는 문자열을 할당한다.
Java 문법책에는 멤버변수와 필드라는 이름이 사용된다. 여기서는 필드라고 부르겠다. 필드는 변수이다. 변수란 값을 저장하는 기억공간이며 그릇이다. 결국 name이라는 이름의 그릇에 '바둑이'라는 값을 할당(대입)한 것이다.
이번에는 개 객체(?)에게 짖도록 명령을 내려보겠다.
/* 객체가 짖도록 명령을 내림 */
d.bark();

bark()는 메서드라고 하며 위의 문장은 다음과 같은 뜻을 갖는다.
d가 가리키는 객체에게 'bark()'라는 메세지(message)를 전달한다.
bark() 메세지를 전달하기 위해서는 bark() 메서드를 호출(call)하면 된다.
(계속...)
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 정샘

2008/08/08 16:36 2008/08/08 16:36
Response
No Trackback , No Comment
RSS :
http://jeongsam.net/rss/response/11

Trackback URL : http://jeongsam.net/trackback/11

Leave a comment
« Previous : 1 : ... 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : ... 12 : Next »