객체(object)라는 개념을 구성하는 2개의 단어는 

 

클래스(Class)인스턴스(instance)이다.

 

클래스는 그룹,분류,교실과 같은 뜻으로 쓰이고 

인스턴스는 구체적인 사례, 예제라는 뜻으로 쓴다.

 

포유류는 클래스로 볼 수 있고

구체적인 사례인 개,고양이,사자는 인스턴스라고 볼 수 있다.

 

 

 

클래스와 인스턴스의 개념의 관계를 더 자세히 살펴보자.

 

 

클래스는 프로그램에서 서로 연관있는 변수와 함수들을 그룹핑한 묶음 또는 수납공간으로 보면 된다.

 

 

 

 

 

 

클래스를 복제해서 만든 것들을 인스턴스라고 부른다.

 

인스턴스는 클래스를 복제해서 만들었기 때문에 클래스와 똑같은 변수와 똑같은 함수를 갖게된다.

 

 

 

 

 

 

 

 

각각의 인스턴스들은 클래스를 복제했기 때문에 클래스가 가지고 있는 변수와 함수를 가지고 있다.

 

 

이 중에서 각각의 인스턴스들이 갖고 있는 함수의 내용은 똑같다.

그러나 인스턴스마다 변수에 담겨있는 값이 다를 수 있다.

 

 

 

 

 

두 가지다 문자열을 만드는 똑같은 방법이다.

 

문자열을 만들 때마다 밑에처럼 하면 너무 불편하기 때문에 

그냥 "egoing"이라고 하면 egoing이라는 값을 가진 객체가 생성된다.

 

 

 

str은 class이고

 

str("egoing")은 instance이다.

 

그리고 인스턴스는 name이라는 변수에 담기게 된다. 

 

 

 

 

name인스턴스와 name2인스턴스 안에는 어떤 이름의 변수가 있는지는 모르지만 

아무튼 변수를 가지고 있고 그 변수 안에는 name은 egoing이라는 값을 가지고 있고

name2는 k8805라는 값을 가지고 있다.

 

 

 

 

 

 

 

 

주어진 인스턴스가 특정 클래스(데이터 타입)인지 검사해주는 isinstance함수를 톻해서 

문자열 "egoing"이 str클래스(데이터 타입)의 인스턴스인지 확인해보고

다른 클래스(데이터 타입)도 확인해 보자.

 

# str 인스턴스인지 검사 
result = isinstance("egoing", str) 
print(result) #True 

# int 인스턴스인지 검사
result = isinstance(1, int) 
print(result) #True

# float 인스턴스인지 검사
result = isinstance(1.345, float) 
print(result) #True

# dict 인스턴스인지 검사
result = isinstance({'최재상':27,'최재현':30}, dict) 
print(result) #True

# list 인스턴스인지 검사
result = isinstance([1,2,3], list) 
print(result) #True




class Programmer: 
    pass 

# Class 검사
Jaesang = Programmer() 
result = isinstance(Jaesang, Programmer) 
print(result) #True

 

 

 

 

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

객체지향 프로그래밍의 맥락에서는

 

함수라는 말 대신에 메소드라는 말을 쓴다.

 

변수라는 말은 변수도 쓸 수 있고 속성,필드,상태라고 부를 수 있다.

 

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

 

 

아래 내용은 객체,인스턴스의 차이를 말해주는 내용.

 

 

 

 

객체와 인스턴스의 차이를 알아보니 블로그마다 말이 다르다.

어떤 블로거는 인스턴스는 객체와 같지만, 관계적인 측면에서 이야기할 때 객체 대신 인스턴스라는 말을 쓴다고 하고, 또 어떤 블로거는 메모리 상에 할당되어야만 객체가 인스턴스가 된다고 한다.

이해 가는 내용이지만, 정확하지는 않다고 본다.

 

 


결국에는 영어 사이트를 검색했고, 가장 납득이 가는 설명이 담긴 블로그를 찾았다.

https://alfredjava.wordpress.com/2008/07/08/class-vs-object-vs-instance/

 

 


이 블로그의 설명에 따르면 객체(Object) 소프트웨어 세계에 구현할 대상이고, 이를 구현하기 위한 설계도 클래스(Class)이며, 이 설계도에 따라 소프트웨어 세계에 구현된 실체 인스턴스(Instance)이다.

 

객체(Object)는 현실의 대상(Object)과 비슷하여, 상태나 행동 등을 가지지만, 소프트웨어 관점에서는 그저 콘셉(concept), 즉 사유의 결과일 뿐이다. 소프트웨어에서 객체를 구현하기 위해서는 콘셉 이상으로 많은 것들을 사고하여 구현해야 하므로, 이를 위한 설계도로 클래스를 작성한다. 설계도를 바탕으로 객체를 소프트웨어에 실체화 하면 그것이 인스턴스(Instance)가 되고, 이 과정을 인스턴스화(instantiation)라고 한다. 실체화된 인스턴스는 메모리에 할당된다. 

 

코딩을 할 때, 클래스 생성에 따라 메모리에 할당된 객체인 인스턴스를 객체라고 부르는데, 틀린 말이 아니다.

 

인스턴스라고 부르면 더 정확하지만, 개념적으로 인스턴스는 객체에 포함된다고 볼 수 있다. 물론 어디가 소프트웨어 세계에 더 가깝냐를 따지면 당연히 인스턴스이다. 잘 구분해서 쓴다면 프로빼쌰날(?) 하다는 소리를 들을 수 있을지도.

 

그러나 객체나 인스턴스를 클래스로, 혹은 클래스를 객체나 인스턴스라고 해선 안 된다. 건물의 설계도를 보고 건물이라고 하지 않고, 반대로 건물을 설계도라고 하지 않으니까~

 



출처: https://cerulean.kkennib.com/149 [kkennib]

 

 

 

 

객체(소프트웨어 세계에 구현할 대상)클래스(설계도) + 인스턴스(소프트웨어 세계에 구현된 실체)인 것이다.

 

 

 

 

 

 

 

 

 

 

 

'Python > Today I learned' 카테고리의 다른 글

TIL#36 하위,동일,상위폴더 파일 import하기  (0) 2021.05.20
TIL#34 클래스 self  (0) 2021.05.20
TIL#33 CSV 파일 읽기 및쓰기  (0) 2021.05.19
TIL#32 파일 읽기 및 쓰기  (0) 2021.05.19
TIL#31 외장함수  (0) 2021.05.19

+ Recent posts