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
반응형
'Flutter' 카테고리의 다른 글
[ Flutter] 안드로이드 스튜디오 flutter SDK 버전 바꾸기 (0) | 2025.01.06 |
---|---|
[플러터 10] 화살표 함수 (0) | 2025.01.03 |
[플러터 07] Dart 언어 함수 (0) | 2025.01.03 |
댓글