class와 object에 대해 설명해보세요.

  • 클래스(class)

객체지향 프로그래밍(OOP)에서 클래스는 특정 종류의 객체 내에 있는 변수와 메소드를 정의하는 일종의 틀, 즉 템플릿이다. 따라서 객체는 클래스로 규정된 인스턴스로서, 변수 대신 실제 값을 가진다. 클래스는 OOP를 정의하는 개념 중 하나인데, 클래스에 대한 중요한 몇 가지 개념들은 다음과 같다.

(1) 클래스는 전부 혹은 일부를 그 클래스 특성으로부터 상속받는 서브클래스를 가질 수 있으며, 클래스는 각 서브클래스에 대해 수퍼클래스가 된다.

(2) 서브클래스는 자신만의 메소드와 변수를 정의할 수도 있다.

(3) 클래스와 그 서브클래스 간의 구조를 "클래스 계층(hierarchy)"이라 한다.

  • 응용분야

클래스의 정의에 대해 알아보았는데 이제 클래스를 어디다 써 먹을 수 있을지 몇 가지 간단한 예를 구경해 보자. 실세계의 모든 사물들은 자신만의 독특한 속성을 가지고 있고 고유의 동작을 한다. 사람은 나이, 키, 피부색, 성별 등의 속성을 가지며 말한다, 걷는다, 먹는다 등의 동작을 할 수 있다. 노트북이나 자동차, 전화기 따위의 물건들도 마찬가지로 고유의 속성과 동작을 추출할 수 있을 것이다. 세상의 모든 사물은 속성과 동작 두 가지 특징으로 설명 가능하다.

그래서 속성은 멤버 변수로 나타내고 동작은 멤버 함수로 나타내는 식으로 클래스를 사용하여 실세계의 사물들을 정확하게 모델링 할 수 있다. 학생, 고객, 여자, 괴물, 책, 집, 나무, 태양 등의 눈에 보이는 물건들은 물론이고 예금, 권한, 감정, 건강 등 보이지 않는 개념적인 사물까지도 클래스로 나타낼 수 있다. 현실 세계 사물의 특성을 추출하여 속성과 동작으로 표현하는 것을 추상화라고 한다. 위치를 가지는 문자 클래스 Position과 복소수 클래스 Complex를 만들거나, 이외에 필요한 모든 것들을 클래스로 선언하고 그 클래스의 객체를 만들 수 있다. 실 세계의 사물들이 어떻게 클래스로 모델링 할 수 있다. 이 클래스들은 이 책에서 앞으로 객체 지향 프로그래밍을 연구하는 도구 및 예제 클래스로 종종 사용되므로 모양을 잘 기억해 두어야 한다.

  • 객체(object)

가장 간단한 구현으로써 객체(Object)는 저장 공간에서 할당된 공간을 의미한다. 프로그래밍 언어는 변수를 이용해 객체에 접근하므로 객체와 변수라는 용어는 종종 함께 사용된다. 그러나 메모리가 할당되기 전까지 객체는 존재하지 않는다.

절차적 프로그래밍에서 하나의 객체는 자료나 명령을 포함할 수 있지만 두 가지를 동시에 포함하지는 않는다. (명령은 프로시저나 함수의 형태를 가진다). 객체지향 프로그래밍에서 객체는 클래스의 인스턴스이다. 클래스 객체는 자료와 그 자료를 다루는 명령의 조합을 포함하여 객체가 메시지를 받고 자료를 처리하며 메시지를 다른 객체로 보낼 수 있도록 한다. 실세계의 유추로 설명하자면, 만약 어떤 사람이 집에서 살기를 원할 때, 그 집의 청사진(집의 사진)이나 축소 모형 따위는 전혀 필요가 없다. 필요한 것은 설계에 맞는 실제 집이다. 이 유추에서 청사진은 클래스를 나타내고 실제 집은 객체를 나타낸다.

  • 특징

오브젝트는 현실 세계의 모든 것이 구체화된 개개의 실체이므로, 서로 구별이 가능하며 독립적인 특성을 갖는다. 예를 들면, 공장에 하나의 설계도로 만들어낸 동일한 모양과 성능의 자동차라도 A라는 사람이 구입한 자동차와 B라는 사람이 구입한 자동차가 다른 것과 같이 동일한 분류의 객체라고 할지라도 서로 구별되는 성질을 갖게 된다. 여기서 분류라는 개념은 클래스라는 용어로 대용될 수 있으며, 유사한 속성을 지닌 객체들의 집합체이며, 원론적으로는 객체에 대한 정의라고 할 수 있다.

아래 그림은 Object-Oriented에서 실세계, 클래스, 객체, 인스턴스의 관계를 잘 설명하고 있다.

▲ OOP 내 관계도

프로그래밍

대칭 키 암호와 비대칭 키 암호에 대해 설명해보세요.

프로그래밍

캡슐화, 상속, 다형성에 대해 설명해보세요.

커뮤니티 Q&A

이론과 관련된 게시글이에요.

이해가 안 되거나 궁금한 점이 있다면 커뮤니티에 질문해 보세요!

게시글 작성하기