본문 바로가기

1:1 개발 공부

객체와 인스턴스의 차이 / 라이브러리와 패키지의 차이

객체와 인스턴스

객체와 인스턴스의 차이에 대해 말해볼까합니다. 차이라기보단 조금 더 명확한 설명을 적어보려합니다.

예를 들어보겠습니다. 제가 '책 사와'라고 말했습니다. 그러면 이것은 클래스입니다. 그래서 누군가 저에게 '책'을 가져온다면, 그것은 '객체'입니다. 컴퓨팅 환경에서 내가 그 객체를 어딘가에 놓고 써야겠죠. 컴퓨터는 메모리라는 공간에 무엇인가를 놓고 작업을 하게 됩니다. 즉, 메모리 안에 객체를 넣기 위해서 해당 객체가 들어갈만큼 메모리를 할당합니다. 이때, 메모리엔 주소가 있습니다. 주소가 할당된 메모리에 올라가 있는 상태를 '인스턴스'라고 하며, 객체를 메모리에 올리는 과정을 '인스턴스화'라고 합니다. 인스턴스가'객체를 소프트웨어에 실체화'한다는 의미가 무엇인지 이해가 되셨을까요? 

객체를 어떻게 인스턴스화 할까요? 바로 new 입니다.

 

문구완구세트 연필01 = new 문구완구세트();

 

new를 이용해서 만든다는 것은 동시에 2가지 작업이 되는 것이죠.

 

1. 객체를 만드는 작업

2. 인스턴스를 만드는 작업

 

정확히는 저렇게 작성한 것은 객체를 만든 것이며, 이것을 실행(run)시켜서 메모리에 올라가면 인스턴스가 되는 것입니다. 따라서, 컴파일 타임이냐, 런 타임이냐 가 중요한 것입니다. 이를 토대로 객체냐 클래스냐 인스턴스냐 달라지기 때문입니다. 다른 글에도 업로드했지만, 클래스는 문서 일 뿐입니다. 클래스가 코딩을 해서 무언가 실행하는 게 없습니다. 실체는 객체입니다. 

객체는 사람의 기준에서의 표현법이며, 인스턴스는 컴퓨터에서 다루는 단위입니다. 클래스라는 문서로 쌓여있는 것을 '컴파일'에서 객체라는 것으로 만들고, '러닝'을 해서 인스턴스로 만드는 것입니다. 사실 엄연히 말하면 객체와 인스턴스는 같은 것이며 어느 관점(시야)에서 볼거냐에 따라 명칭이 달라지다고 표현할 수 있습니다. 컴퓨터의 관점에서 볼 것이냐, 사람의 기준에서 볼 것이냐로요. (여기서 잠깐, 개발자들이 사용하는 '빌드'라는 표현이 있습니다. 빌드란 컴파일 + 메모리를 로딩(링킹)을 뜻합니다.) 따라서, 객체는 메세지를 주고받는다고 표현할 수 있으며, 인스턴스는 각자의 메모리의 주소를 주고받는다고 표현할 수 있습니다. 좀 더 구체적으로 말하면, 객체끼리 메세지를 주고받는다는 의미는 서로의 메소드를 호출하는 행위입니다. 그러한 것들이 무수히 생겨나다보면 그것이 바로 '객체지향언어'인거죠.

 

부가적으로 클래스에 대한 설명을 해보려 합니다.

클래스가 꼭 인스턴스와 객체를 만들지는 않습니다. 다른 걸로도 만들 수 있습니다. 객체를 만들려면 반드시 클래스가 있다고 생각하지만 그것은 아닙니다.

 

객체의 3요소는 무엇일까요?

(1) 행위

(2) 상태(데이터를 다루어야 하기 때문에 상태가 있어야 함. '키'라는 데이터를 갖고 있지만 값이 없으면 의미가 없습니다. 155라는 값이 있어만 상태가 되는 것이죠)

(3) 식별(유일무이하게 반드시 식별되어야 합니다)

 

객체는 클래스가 없더라도, 함수(행위)나 데이터(함수를 통해 데이터를 만듦 - 상태), 식별(indenity값을 만들면 됨) 를 통해 만들 수 있다는 의미입니다. 객체지향언어란 객체를 쉽게 만들 수 있는 랭귀지라는 의미입니다. 객체를 쉽게 만들 수 있는 랭귀지의 구성요소로 클래스가 있는 것입니다. 

 


라이브러리와 패키지의 차이

쉽게 설명해보겠습니다. 라이브러리는 '포카칩'입니다. 패키지는 과자 선물 세트입니다. '포카칩', '새우깡', '양파링', '콘칩'이 다 들어있는 것이죠. 패키지는 동일한 범주의 정보를 제공할 수 있는 것들로 구성되어있습니다. 예를 들어, 농심종합선물세트라고 한다면, '농심'에서 출시한 과자들만 있겠죠? 갑자기 해태나 롯데 과자가 섞여있을 순 없을 겁니다. 따라서, 수학관련 패키지라면 미분, 적분과 같은 라이브러리로 묶여 있는 것이죠. 


클래스에 대해 더 알아보자

-클래스 안에는 '속성(클래스를 나타내는 값=데이터=객체 상태)', '메소드(객체의 행위)'이 들어갑니다. 클래스는 '책'이라고 볼 수 있습니다. '책 줘'라고 하면 우리는 '무슨 책?'이라는 생각을 하겠죠? 그러다 제가 '승승책'을 주면 그것이 비로서 객체가 되는 것입니다. 즉, 속성이 하는 행동이 메소드인 것이고, 이러한 일련의 행위를 정의해놓은 것이 클래스인 것이죠.