안녕하세요. Bot - binoo 입니다.
오늘은 클래스 객체 인스턴스는 대체 무엇일까라는 주제로 간단하게 정리 해볼까 합니다.
OOP 에서 유독 중요하게 다루어야할 것이 Object(객체)인데
최근까지 저는 객체(Object) 와 Instance 를 혼용한 것은 아닌지 되짚어 봅니다.
1. Class & Classification
- 최근 python 을 이용한 Classification 예제가 쏟아짐에 따라 확실한 구분과 명확한 용어 리마인드가 중요하다고 느껴졌습니다.
어려운 내용이 아닙다.
Class 가 대체 무엇인가 모르겠다면 Classification 을 살펴봅시다.
Classification 설명 영상 (동영상 1-1) - (너무 시끄러워서 짜름): http://www.playrific.com/z/6493 1)
- 영상을 요약하자면 동물을 나누는 기준, 즉 분류(Classfication)를 설명하고 있습니다.
- 여기서는 동물로 한정하고 있지만, 분류의 기준에는 어떤 것이든 될 수 있습니다.
- 또한, 어떤 적당한 분류 혹은 세세한 분류도 기준에 따라 인정될 수 있습니다.
이는 다시말해 일종의 집합을 의미합니다.
지구에 사는 생물을 일련의 집합(여기서는 클래스)으로 볼 수 있습니다. 예컨데 이를 A 라고 하죠.
그런데, 이중에는 잎이 있는 것과 없는 것이 있습니다. 우리는 집합 A를 식물과 동물로서 다시 나눌 수 있습니다.
더 나아가 포유류, 조류, 양서류, 외떡잎, 쌍떡잎 등 세세하게 그 집합(클래스)을 정의할 수 있습니다.
이러한 일련의 과정을 Classification (분류) 이라 합니다.
이 과정의 결과를 모두 Class (집합) 로 볼 수 다.
1) Class 와 Classification 의 설명을 위해 가져온 영장류와 인류의 분류 (정작 본인은 창조론을 믿는다.)
2. Object & Instance
둘을 구분하기 이전에 먼저 객체란 무엇일까,
학부시절에 교수님께서는 이렇게 말씀하셨습니다.
Class 는 붕어빵을 찍어내는 형틀입니다.
Object 는 틀에서 구워낸 붕어빵입니다.
직전에 우리는 Class 를 알아보았습니다.
그것은 우리가 일련의 기준으로 분류하여 얻어낸 집합이었습니다.
붕어빵 형틀을 클래스라고 본다면,
슈크림이 든 붕어빵, 팥이 든 붕어빵, 마요네즈가 든 붕어빵, 쿠키반죽으로 만든 붕어빵 등은 객체가 될 것입니다.
그렇다면 인스턴스(Instance)는 무엇일까.
아래 짧은 코드를 언급하여 설명하고자 합니다.
class bread{ String name; int cost; public bread(){ // 인스턴스 생성자 } } class main{ public static void main(String[] args){ bread nomalBread; // (1) nomalBread = new bread(); // (2) } }
Java 를 코드 예시로 들었지만, 실제로 MS 에서는 C# 으로 동일한 설명을 하고 있습니다. 2)
상기의 코드에서 클래스는 bread 입니다.
객체는 nomalBread 입니다.
(1) 까지는 선언만 했기 때문에 객체 nomalBread 가 bread 에 속한다는 것만 알 수 있습니다.
다시말해 인스턴스라고 하는 그 친구는 이름만 주어지고 아직 태어나지 않았기 때문이죠. (Null 을 이해하는 본인의 표현)
(2) 에서 인스턴스 생성자를 호출해야 비로소 객체 nomalBread 는 bread의 인스턴스라고 할 수 있게 됩니다. (인스턴스는 객체에 인스턴스 생성자를 호출하여 생성하고 소멸할때까지만 존재합니다.)
정리하자면, Object 가 실체화한 형태가 Instance이며 이들을 아우르는 집합이 Class라고 할 수 있습니다.
- 1) 동영상 1-1 : http://www.playrific.com/z/6493
- 2) 클래스 및 구조체 : https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/
- 3) 객체, 클래스, 인스턴스의 차이점은? : https://slipp.net/questions/126
'programming > 용어정리' 카테고리의 다른 글
[철학] 트롤리 딜레마 - 선택에 따른 희생 (0) | 2018.02.08 |
---|---|
프레임워크와 툴, 라이브러리의 차이 (Framwork, Tool, Lib) (0) | 2018.02.03 |
[SQL] What is DCL ? (0) | 2017.10.09 |
[SQL] What is DML ? (0) | 2017.10.09 |
[SQL] What is DDL ? (0) | 2017.10.09 |