'class'에 해당되는 글 1건

  1. 2007.04.04 Class (클래스)

Class (클래스)

분류없음 2007.04.04 02:03
클래스란 객체를 표현하기 위해 프로그래밍 언어가 언어적인 관점에서 지원하고 있는 객체 생성 방법이다.

일단 객체란 무엇인지 확실히 머릿속에 이해하고 있어야 한다. 객체 설명으로 바로 가기

나는 객체를 "현실 세계에 존재하는 사물을 프로그램으로 옮겨오기 위한, 특징과 행위를 가지는 하나의 단위"라고 정의했는데 이렇게 설명하면서 객체를 프로그램 언어적으로 어떻게 표현하면 좋을지에 대해서는 생각하지 말자고 했다. 클래스는 이 객체를 생성하고 사용하기 위한 프로그램 언어적인 방법이다.

위 설명에 있는대로 객체는 속성과 메소드를 가지고 있다. C에선 학생 한 명을 표현하기 위해 보통 이런 방법을 사용한다.
struct STUDENT
{
     int stu_no;          // 학번
     int grade;          // 학년
     char name[10];    // 이름
}
이건 구조체를 이용한 코드이다. 이렇게 구조체를 이용하면 하나의 이름 아래에 그 이름에 해당하는 하위 항목을 묶어놓을 수 있다. 위의 예시에서는 학생이라는 이름 아래에 학번, 이름, 학년이라는 세 가지 항목을 묶어놓았다.

그러면 이번엔 이 구조체를 사용해서 변수를 생성해 보자.
STUDENT stu[3];
stu[0].stu_no = 1;
stu[0].grade = 1;
stu[0].name[] = "홍길동";
stu[1].stu_no = 2;
stu[1].grade = 1;
stu[1].name[] = "임꺽정";
stu[2].stu_no = 3;
stu[2].grade = 1;
stu[2].name[] = "일지매";
보통 이런 식으로 사용할 것이다. 그러면 stu[0]은 학번이 1번이고 1학년인 홍길동 학생이 되고 stu[1]은 학번이 2이고 1학년인 임꺽정 학생이 된다.

여기서 내가 했던 객체의 설명을 잘 떠올려보자. 객체는 분명 "특징과 행위를 갖는 단위"라고 했다. 그 정의를 기억한 채 위의 코드를 다시 한번 살펴보자. stu[0]은 STUDENT라는 단위(타입)로 되어 있으며 그의 특징은 학번이 1번이라는 것과 1학년이라는 것, 이름이 홍길동 이라는 것이 된다. 즉, stu[0]의 특징(속성)은 학번이 1번, 학년이 1학년, 이름은 홍길동이라는 식으로 표현할 수 있는 것이다.

이제 다시 객체와 클래스의 관한 이야기로 다시 넘어가서 위의 객체의 정의 중 메소드 부분만 빼놓고 생각해 보자. 메소드를 빼고 생각한 객체의 정의는 "특징(속성)을 갖는 하나의 단위"이다. 어째 구조체와 정의가 같다고 생각되지 않는가? 이건 구조체와 클래스는 발상의 출발점이 연관이 있는 것을 묶는다는, 동일한 개념에서 출발했다는 것을 의미한다.

클래스는 이 기본적인 구조체라는 형식에 행위(메소드)라는 함수를 추가한 것에 지나지 않는다(물론 정확히는 그 내부적으로 캡슐화 등등의 특징이 있겠지만, 기본적인 것은 구조체와 거의 같다). 예를 들어 위의 구조체(클래스)엔 학번, 학년, 이름의 속성이 있는데 여기에 발표시킨다, 심부름시킨다, 벌준다 등등의 행위(함수)를 추가한 것이 학생 클래스가 된다(여기서 행위를 추가하기 위해선 어떻게 하느냐는 의문이 생길수도 있지만 그것은 클래스에 대한 설명이라기보다는 프로그래밍 언어에 대한 설명이 되므로 생략한다).

우리는 구조체를 선언하여 그 구조는 신경쓰지 않은 채 마치 새로운 데이터 타입인 양 사용한다. 마찬가지로 클래스는 객체를 표현할 수 있도록 (마치 구조체처럼) 속성(멤버변수)과 메소드(멤버함수)를 묶어놓고 이름을 붙여 그것의 복사본을 언제든지 생성할 수 있는 하나의 새로운 데이터 타입인 양 사용하게 해 준다.

여담으로 클래스와 객체의 관계를 설명할 때 가장 많이 사용하는 예제가 붕어빵 틀(클래스)와 붕어빵(객체)이다. 붕어빵 틀(클래스)을 이용하여 붕어빵(객체)을 만들기 때문이다.

ps. C 문법을 쓰다 보니 Code Highlight 플러그인이 심하게 그리워지는군요. 쓸만한 Code Highlight 플러그인 있나요?
Posted by マサキ君