자바를 늘 객체지향 언어라고 말합니다. 그리고 클래스를 설계도 클래스를 통해 만들어진 객체를 제품이라고 언급합니다. 붕어빵 틀이 어쩌니 붕어빵이니 이러니 저러니 라고 하지만 솔직히 자바를 많이 공부한 입장에서는 다 맞는 말이고 쉽게 이해가 되지만 자바를 배우는 입장에서는 쉽게 이해가 가지 않습니다.
클래스를 일반적으로 아래와 같이 정의합니다.
- 객체를 정의해 놓은 것
- 객체를 생성할 때 사용
- 데이터 타입
그리고 객체는
- 클래스를 구체화한 것
- 실제로 동작하는 것
- 메모리에 생성된 데이터
그리고 클래스를 구체화, 객체화한 것이 객체, 인스턴스라고 정의합니다.
여전히 무슨 말인지 모르겠습니다.
위와 같이 배열을 많이 봤을것입니다. 자바에서 배열을 선언하는 방법입니다. 사실 이렇게 new는 위에서 언급된 객체? 인스턴스를 생성하는 명령어입니다.
arr[0] | arr[1] | arr[2] | arr[3] | arr[4] | arr[5] | arr[6] | arr[7] | arr[8] | arr[9] |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
99150571 | 99150571 | 99150571 | 99150571 | 99150571 | 99150571 | 99150571 | 99150571 | 99150571 | 99150571 |
값이 초기되지 않아 디폴트 값 0을 가지고 있는 10개짜리 배열이 생성되고 99150571 이라는 메모리 주소에 할당되었습니다. 우리가 일상적으로 쓰던 배열은 사실은 객체, 인스턴스를 생성해야만 쓸 수 있었던 것이었습니다.
다시 붕어빵 틀이니 뭐니 라고 하는 김에 클래스를 통해 붕어빵 틀을 만들고 객체를 생성해 붕어빵을 구워보겠습니다.
붕어빵 틀을 만들었습니다. 가로 4cm, 길이 10cm짜리 크기의 붕어빵이며 속에는 팥, 슈크림, 생크림, 버터, 크림치즈가 한 가지 또는 최대 2가지까지 고객의 취향에 따라 들어갈 수 있습니다.
배열 madeData는 붕어빵이 구워진 시간과 유통기한이 표기되고요. arrayList ingre는 붕어빵의 성분표기입니다. 정확히 따지만 밀가루, 설탕, 등등 표기되어야 하지만 여기서는 간단히 안에 뭐가 들어갔는지 (팥, 생크림 등등)만 표기하겠습니다. 그리고 daily 변수를 통해 하루의 판매량을 파악하겠습니다.
객체를 만들어 붕어빵 하나를 구워보겠습니다. 팥이 들어간 기본적인 붕어빵을 구웠습니다. 붕어빵이 구워지면서 제조 날짜와 유통기한 (제조일로부터 24시간 내) 이 표기되었고 팥이 들어간 것이 보입니다.
이번에는 생크림과 팥이 들어간 붕어빵을 구워보겠습니다.
2번째로 팥과 생크림이 들어간 붕어빵이 만들어졌습니다. 역시 제조일자와 유통기한 성분표기가 나타나 있습니다. 여기서 붕어빵 틀이라는 클래스에서 2개의 붕어빵 (하나는 팥, 나머지 하나는 팥과 생크림)을 만들었습니다. 이 2개의 붕어빵은 객체 또는 인스턴스라고 불리는 클래스 설계도로부터 만들어진 제품?이라고 할 수 있습니다. 그리고 1번째로 만들어진 붕어빵(팥)과 2번째로 만들어진 붕어빵(팥, 생크림)은 서로 다른 독립적인 존재입니다.
당연히 안에 들어간 내용물이 다른 빵이니깐 서로 다르지라고 할 수 있습니다. 그렇다면 만약 붕어빵(슈크림)을 하나 만들고 똑같이 붕어빵(슈크림)을 하나 더 만든다면 둘은 똑같다고 할 수 있을까요? 당연히 둘은 다른 존재입니다. 똑같은 빵이지만 서로 다른 독립적인 존재로 하나는 여학생 손님에게 팔릴 수 있고 나머지 하나는 남학생 손님에게 팔릴수 있습니다.
3번째로 만들어진 붕어빵과 4번째로 만들어진 붕어빵은 같은 종류지만 제조일자도 서로 별개입니다.
마지막으로 int daily를 보겠습니다. 아까 이 변수의 기능은 하루 판매량을 나타낸다고 했습니다. 이 변수는 static 이 들어간 클래스 변수로서 클래스가 생성됨과 동시에 메모리에 할당되어 객체가 생성될 때마다 1씩 증가합니다.
만약 붕어빵을 하나 더 만든다면 1이 증가해 5가 됩니다. 하지만 각 구워진 붕어빵들은 객체가 생성(붕어빵이 구워져야만) 제조일자, 유통기한, 성분표기가 나타나며 이 값들도 각 붕어빵마다 서로 다르게 됩니다. 이것이 인스턴스 변수로서 각 인스턴스마다 갖게 되는 값이며 클래스 변수는 공통으로 가지는 값이 되는 것입니다.
이 글에서 클래스와 객체에 대해 알아봤습니다. 자바가 다른 언어와 다른 독특한 특징인 객체지향이라는 개념은 쉽게 설명하기 어렵습니다. 하지만 조금이라도 이해하는데 도움이 되었으면 하는 바람입니다.
'자바' 카테고리의 다른 글
생성자, Constructor (0) | 2019.11.15 |
---|---|
클래스와 인스턴스의 차이? static 의 특징, new를 왜 써야 (0) | 2019.11.14 |
자바 클래스 초기화 블럭 (0) | 2019.11.01 |
자바 변수의 초기화, 초기화 블럭 (0) | 2019.11.01 |
클래스변수, 인스턴스변수, 지역변수 (0) | 2019.10.04 |