본문 바로가기
Flutter

[플러터 11] Dart 클래스와 인스턴스

by JINJINC 2025. 1. 3.
728x90
반응형
시나리오 코드1(클래스 생성해보기)

클래스란?
  클래스는 객체(인스턴스)를 정의하는 설계도 입니다.

  인스턴스  =>  메모리 공간이 할당되었을때 인스턴스라고 한다.
  객체(object) => 클래스를 통해서 프로그램에서 실제로 생성되는 인스턴스를 말함
  객체 => 속성(상태), 행위(메서드)를 가질 수 있음

  객체 지향 프로그래밍이란? (Object Orient programing)
  객체와 객체간의 관계를 형성하고, 상호작용으로 애플리케이션을 설계, 구현하는 프로그래밍 패러다임중 하나입니다.
  oop의 주요목적 => 재활용성, 유지보수성, 복잡한 문제를 더 작은 객체로 나누는 것

void main() {
  //클래스란?
  //클래스는 객체(인스턴스)를 정의하는 설계도 입니다.

  //인스턴스  =>  메모리 공간이 할당되었을때 인스턴스라고 한다.
  //객체(object) => 클래스를 통해서 프로그램에서 실제로 생성되는 인스턴스를 말함
  // 객체 => 속성(상태), 행위(메서드)를 가질 수 있음

  //객체 지향 프로그래밍이란? (Object Orient programing)
  //객체와 객체간의 관계를 형성하고, 상호작용으로 애플리케이션을 설계, 구현하는 프로그래밍 패러다임중 하나입니다.
  //oop의 주요목적 => 재활용성, 유지보수성, 복잡한 문제를 더 작은 객체로 나누는 것

  //사용자 정의타입 Dog
  // Dog d1 = new Dog(); //인스턴스화 되었다.
  Dog d2 = Dog(); //dart 에서는 new를 생략할 수 있다.
  print('강아지 이름 ${d2.name}');
  print('강아지 나이 ${d2.age}');
  print('강아지 색상 ${d2.color}');
  print('강아지 목마름 지수 ${d2.thirsty}');

  d2.thirsty = 50;
  print('강아지 목마름 지수 ${d2.thirsty}');
}

//접근제어자 기본(public)   _(private) 두가지만 존재함

//자바 -> 하나의 자바 파일에 public class를 두개 선언할 수 없다.
class Dog {
  //변수에 선언과 동시에 초기화(값을 할당)
  String name = '토토';
  int age = 5;
  String color = 'black';
  int thirsty = 100;
}

 

 

시나리오2 (메소드 생성)

행위를 통해서 변수값을 수정함

void main() {
  // Dog d1 = new Dog(); //인스턴스화 되었다.
  Dog d2 = Dog(); //dart 에서는 new를 생략할 수 있다.
  print('강아지 이름 ${d2.name}');
  print('강아지 나이 ${d2.age}');
  print('강아지 색상 ${d2.color}');
  print('강아지 목마름 지수 ${d2.thirsty}');
  //d2.thirsty = 50;
  d2.drinkwater();
  d2.drinkwater();
  d2.drinkwater();
  d2.drinkwater();
  d2.drinkwater();
  print('강아지 목마름 지수 ${d2.thirsty}');
}

//접근제어자 기본(public)   _(private) 두가지만 존재함
//String _name  => private 

//자바 -> 하나의 자바 파일에 public class를 두개 선언할 수 없다.
class Dog {
  //변수에 선언과 동시에 초기화(값을 할당)
  String name = '토토';
  int age = 5;
  String color = 'black';
  int thirsty = 100;

  //물을 마실때마다 갈증지수가 10씩 내려감
  void drinkwater() {
    thirsty = thirsty - 10;
  }
}

 

 

시나리오코드3 - 협력하기(상호작용)
void main() {
  Dog d1 = Dog();
  print(d1.thirsty);   // 100
  Water water = Water();
  d1.drinkWater(water);
  d1.drinkWater(water);
  d1.drinkWater(water);
  d1.drinkWater(water);
  print(d1.thirsty); // 60 
  print(water.liter);
}

//접근제어자 기본(public)   _(private) 두가지만 존재함

//자바 -> 하나의 자바 파일에 public class를 두개 선언할 수 없다.
class Dog {
  //변수에 선언과 동시에 초기화(값을 할당)
  String name = '토토';
  int age = 5;
  String color = 'black';
  int thirsty = 100;

  //물을 마실때마다 갈증지수가 10씩 내려감
  void drinkWater(Water water) {
    thirsty = thirsty - 10;
    water.drink();
  }
}

class Water {
  double liter = 2.0; //물 2리터

  void drink() {
    liter -= 0.1;
  }
}

 

워터의 클래스 객체를 매개변수로 받아서 서로 연관관계를 만들게됨 

 

시나리오코드4  선택적 명명매개변수

 

클래스안의 필드값은 null값 허용 되지않음

생성자로 초기화시 반드시 값이 필요하고, 해당 부분에 생성자 오버로딩은 불가능함 

void main() {
  //선택적 명명 매개변수 => 위치가 변경이 되어도 문제없다.
  Dog d1 = Dog(name: "허비", age: 5, color: "brown", thirsty: 100);
}

//선택적 매개변수
//선택적 위치 매개변수(Optional positional parameters)
//선택적 명명 매개변수(Optional named parameter)

class Dog {
  String name;
  int age;
  String color;
  int thirsty;
  //생성자 - 기본 생성자는 만들지 않으면 컴파일러 자동으로 넣어줌
  // {} 를 붙이면 선택적 명명 매개변수
  Dog(
      {required this.name,
      required this.age,
      required this.color,
      required this.thirsty});
}

class Water {
  double liter = 2.0; //물 2리터

  void drink() {
    liter -= 0.1;
  }
}

 

옵셔녈 ? 을 사용하여 해당 값이 없어도 문제없도록 적용함 

 

void main() {
  //선택적 명명 매개변수 => 위치가 변경이 되어도 문제없다.
  Dog d1 = Dog(name: "허비", age: 5, color: "브라운");
  print(d1.color);
}

//선택적 매개변수
//선택적 위치 매개변수(Optional positional parameters)
//선택적 명명 매개변수(Optional named parameter)
//? 붙으면

class Dog {
  String name;
  int age;
  //String 옵셔녈 타입은 null값을 허용시키는 타입이다.
  String? color;
  int? thirsty;
  //생성자 - 기본 생성자는 만들지 않으면 컴파일러 자동으로 넣어줌
  // {} 를 붙이면 선택적 명명 매개변수
  Dog({
    required this.name,
    required this.age,
    this.color = "블랙",
    this.thirsty = 100,
  });
}

class Water {
  double liter = 2.0; //물 2리터

  void drink() {
    liter -= 0.1;
  }
}

오버로딩보다 더 강력한 선택적 매개변수가 있기 때문에 dart에서는 오버로딩이 없다.

void main() {
  //오버로딩보다 더 강력한 선택적 매개변수가 있기 때문에 dart에서는 오버로딩이 없다.
  Person p1 = Person(name: "하지니", money: 100000);
  
}

class Person {
  String name;
  int? money;

  Person({required this.name, this.money = 0});
}

 

케스케이드 연산자

.. 연산자를 사용하면 동일 객채에서 여러 메서드나 속성을 연속적으로 호출할 수 있는 유용한 연산자이다.

위에서부터 아래로 내려옴 

void main() {
  //케스케이드 연산자
  // .. 연산자를 사용하면 동일 객체에서 여러 메서드나 속성을 연속적으로 호출할 수 있는
  //유용한 연산자이다.
  var p1 = Person()
    ..setName("홍길동")
    ..addMoney(5000)
    ..money += 2000;

  print(p1.name);
  print(p1.money);
}

class Person {
  String? name;
  int money = 0;

  void setName(String newName) {
    this.name = newName;
  }

  void addMoney(int amount) {
    money += amount;
  }
}

 

 

  

728x90
반응형

댓글