플루터

Flutter chapter-04-03 OX퀴즈 객체

코징 2022. 2. 7. 17:27

객체란?

데이터(속성)와 기능(메서드)를 모두 포함한, 독립적으로 실행할 수 있는 최소한의 단위

예를 들면 Airplane airplane = Airplane ();이다.

 

속성이란?

속성은 객체가 가지고 있는 고유 값이다. 이 말은 객체 안의 고정적으로 들어가 있는 변수의 값을 의미한다. 

 

메서드란?

객체의 속성을 변경하는 통로이다. 

 

생성자란?

객체를 생성할 때 반드시 호출되는 기능(메서드)이다. 데이터(속성)을 초기화 시키는 역할을 한다.

 

void main() {
// 객체를 생성하고 각각의 생성자를 통해 다른 속성값을 출력하게 나타내였다.
// 이를 통해서 객체의 값에 따라 다른 데이터를 갖고 올 수 있다는 것을 알 수 있었고,
// 차후에 상속이라는 개념과 다양성에 대해서 설명하도록 하겠다.
  Airplane airplane = Airplane('생성자를 사용한 기본비행기 입니다.'); //객체생성
  airplane.airplaneFeature();
  
  Airplane propellerAirplane = Airplane('생성자를 사용한 프로펠러 비행기 입니다.'); //객체생성
  propellerAirplane.airplaneFeature();

}

 class Airplane {
   String airplaneName; //속성, 데이터
   
   Airplane(this.airplaneName);
   
   void airplaneFeature() { //메서드, 함수
    print("$airplaneName 입니다.");
   }
 }

 

 

상속이란?

부모 클래스의 속성과 메서드를 자식 클래스가 물려받는 것이다. 

void main() {
  Airplane airplane = Airplane();
  airplane.airplaneFeature();

  // PropellerAirplane은 Airplane의 자식으로 선언문에 부모 클래스를 작성 할 수있다.
  // 이것은 다형성을 구성하는데 큰 역할을 한다. 다형성은 밑에 서술 하도록 하겠다.
  Airplane propellerAirplane = PropellerAirplane();
  propellerAirplane.airplaneFeature();
}

class Airplane {
  String? _airplaneName;

  Airplane() {
    _airplaneName = "기본 비행기";
  }

  void airplaneFeature() {
    print("$_airplaneName 입니다.");
  }
}

// 부모 클래스 Airplane을 상속 받아서 부모의 값을 사용하는 것을 확인 할 수 있다.
// 1. extends를 사용해서 Airplane을 상속 받았다.
// 2. super._airplaneName 부모의 속성값을 사용하였다.
class PropellerAirplane extends Airplane {

  PropellerAirplane() {
    super._airplaneName = "프러펠러 비행기";
  }
}

 

다형성이란?

하나의 객체가 여러가지 타입을 가질 수 있는 것

void main() {
  // 여기서 추가로 SuperHightechOnDefaultCockPit객체를 고객사가 원한다면
  // 해당하는 객체를 생성 해서 넣어 주기만 하면 끝난다.
  Airplane airplane = Airplane(HightechOnDefaultCockpit());
  airplane.airplaneFeature();
  airplane.chairValue();
}

class Airplane {
  String? _airplaneName;
  DefaultCockpit? _defaultCookpit; 
  // 포인트는 비행기 객체에서 부모의 값으로 변수를 
  // 선언해야지 소스코드를 유언하게 할 수 있다는 점이다.!
  Airplane(DefaultCockpit defaultCookpit) {
    _airplaneName = "기본 비행기";
    _defaultCookpit = defaultCookpit;
  }

  // 비행기 기체 로직
  void airplaneFeature() {
    print("$_airplaneName 입니다.");
  }

  // 비행기 의자 값
  void chairValue() {
    _defaultCookpit!.chairValue();
  }
}

//조종석
class DefaultCockpit {
  int? _chairFunction;

  DefaultCockpit() {
    _chairFunction = 50;
  }

  int? chairFeature() {
    print('기본 의자압니다.');
    return _chairFunction;
  }

  void chairValue() {
    print("의자값은 $_chairFunction입니다.");
  }
}

// 높은 기술 조종석
class HightechOnDefaultCockpit extends DefaultCockpit{

  @override
  int? chairValue() {
    _chairFunction = 150;
    print("의자값은 $_chairFunction입니다.");
    return _chairFunction;
  }
}

// 고객사가 superhightechOnDefaultCockpit가 필요하다가 요청이 들어오면 객체를 
// ovrride해서 구현만 하면 메인에서 언제든지 사용할 수 있다.
class SuperHightechOnDefaultCockpit extends DefaultCockpit{

  @override
  int? chairValue() {
    _chairFunction = 150;
    print("의자값은 $_chairFunction입니다.");
    return _chairFunction;
  }
}