-
Class vs Instance (Object)w1 2022. 9. 1. 17:05
클래스는 특정 대상을 이미지화 하는 거다.
대상이 지닌 특징, 기능을 나타내는 코드 모음이랄까
1
사람을 만든다고 생각해보자.
사람은 눈, 코, 입, 귀, 팔, 다리 … 이 있고
생각하고, 말하고, 냄새맡고, 먹고, 달리고 등등을 할 수 있다.
클래스는 추상적인 개념으로 실체가 아니다.
사람을 만질 수 있나?
설마 만질 수 있다고 생각한 건 아니겠지?
‘영희’라는 친구가 있다.
‘영희’가 사람이라면
사람이라고 특징지은 개념으로 설명되는 대상인 것이다. 곤충이나 물고기가 아니고
그리고 영희는 존재하는 실체이므로 우리는 영희를 우리는 만질 수 있다.
다시말해 영희가 눈을 가지고 있고, 영희가 말한다.
클래스(개념)가 실체화된 객체가, 클래스의 특징을 가지고 기능을 수행 하는 거다.
실체화된 객체를 인스턴스… 라고 부른다.
- 사람 = 클래스(개념)
- 영희 = 인스턴스(객체)
나도 사람이고, 너도 사람이지만 나랑 너는 다른 사람이다.
나도 사람 클래스의 인스턴스고, 너도 사람클래스의 인스턴스인 것이다.
다시말해 개념(클래스)를 사용해서, 서로 다른 실체(객체)를 만들 수 있다.
반복하기 싫으니까… 만들어두고 계속 써먹는거다.
마치 틀 처럼
2
차를 만든다고 생각해보자.
class Car { 제조사 = A사 색 = 빨강 달린다. }
내가 차를 샀다. (인스턴스를 만들었다.)
내차 = 차( ); --> 🚗
친구도 차를 샀다.
친구차 = 차( ); --> 🚗
내차도 A사의 빨간차 🚗 , 친구차도 A사의 빨간차 🚗 다.
동생도 차를 사고 싶어한다. 그런대.. 빨간색이 싫단다… 파란색 차를 원한다.
원하는 색을 주문하고 싶다.
차는 색이라는 특징을 가지지만, 색은 바뀔수도 있는거잖아?
class 에 색을 빨간색! 이라고 정해두지 말고, 객체가 만들어질 때 요구된 값을 반영하자.
그러려면 class 는 인스턴스를 만들 때 어떤색으로 해줄지 요청을 받아야 한다.
class Car ( 어떤색 ) { 제조사 = A사 색 = ?? 달린다. }
그럼 이제 동생차를 주문하자.
동생차 = 차( 파란색 ); --> 🚘
3
눈치 챘나? 다시한 번..
이번엔 붕어빵 틀로 붕어빵을 만든다고 생각해보자.
틀에 넣는 내용물에 따라서 팥붕어빵, 크림붕어빵을 만들고 싶다.
넣는 내용물을 다르게 하려면 ‘붕어빵은 충전물이 있어요’ 라고 정의해두고
내용물은 실체를 만들 때 넣어줘야 한다.
class 붕어빵 (어떤 충전물) { 충전물 = 객체가 요청한 충전물을 채운다; }
💡 붕어빵 만들기 붕어빵 a = 붕어빵 (팥); —→ a 라는 이름의 붕어빵은 팥붕어빵 붕어빵 b = 붕어빵 (크림); —→ b 라는 이름의 붕어빵은 크림붕어빵
반죽을 정의해두고, 쌀가루 or 보리가루로 만든다면 쌀 붕어빵, 보리붕어빵이 될수도… ㅎ
4
다시 처음으로 돌아가서… 사람을 생각하며 정리해보자.
나는 사람이다. 너도 사람이다.
⇒ 나도 너도 사람이라는 개념(클래스)의 실체(객체, 인스턴스) 다.
나 = Person(); 너 = Person();
나와 너는 똑같은 특징과 기능을 가지는 이름만 다른 존재다.
하지만.. 실제로 나와 너가 같을 순 없자나?
이름도 다르고, 눈 모양도 다르고, 피부색도 다르고, 키도 다르고
⇒ 객체를 만들 때, 이름, 피부색, 키 등의 값을 정한다.
나 = Person(이름=영희, 피부색=흰색, 키=150); 너 = Person(이름=준영, 피부색=검은색, 키=180);
📢 class 이름의 첫 글자는 대문자로 써야 한다!
Syntax
class class_name { <fields> <getters/setters> <constructors> <functions> }
- Fields
− A field is any variable declared in a class. Fields represent data pertaining to objects.
클래스에 선언된 변수, 객체와 관련된 데이터 - Setters and Getters
− Allows the program to initialize and retrieve the values of the fields of a class. A default getter/ setter is associated with every class. However, the default ones can be overridden by explicitly defining a setter/ getter.
클래스내 필드(변수, 데이터) 값을 초기화(setter) 하고 검색(값을 가져옴, getter)할 수 있게 함
기본 getter / setter 는 모든 클래스와 연결됨
개발자가 getter / setter 코드를 작성하여 기본 getter / setter 를 대체할수 있음 - Constructors 생성자
− responsible for allocating memory for the objects of the class.
클래스 객체에서 사용할 메모리를 할당함 - Functions
− Functions represent actions an object can take. They are also at times referred to as methods.
함수는 객체가 할 수 있는 활동, 기능, 작업을 표현함
때때로 method 라고 불리기도 함
Syntax
var object_name = new class_name([ arguments ]);
- The new keyword is responsible for instantiation.
객체를 생성하려면 "new" 키워드를 사용함
//accessing an attribute obj.field_name //accessing a function obj.function_name()
생성한 객체가 class 의 필드(변수)와 함수(메소드)를 사용하려면
객체이름과 변수, 함수이름 사이에 "." 을 넣어줌
- 객체이름.변수명
- 객체이름.함수명()
■ 참고
https://www.tutorialspoint.com/dart_programming/dart_programming_classes.htm
'w1' 카테고리의 다른 글
Dependency (0) 2022.09.03 Variable (0) 2022.08.31 [안드로이드 구조] AndroidManifest (0) 2022.08.31