ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.