getter 과 setter - 데이터를 가져오고 설정 할 때 사용
void main() {
Idol aespa = Idol('에스파', ['카리나', '윈터', '지젤', '닝닝']);
print(aespa.firstMember);
aespa.firstMember = '민지';
print(aespa.firstMember);
}
//getter 과 setter
class Idol {
String name;
List<String> members;
Idol(this.name, this.members);
void sayHello() {
print('안녕하세요. ${this.name}입니다.');
}
void introduce() {
print('저희 멤버는 ${this.members}가 있습니다.');
}
//getter
String get firstMember {
return this.members[0];
}
//setter
set firstMember(String name) {
this.members[0] = name;
}
}
private
void main() {
_Idol aespa = _Idol('에스파', ['카리나', '윈터', '지젤', '닝닝']);
print(aespa.firstMember);
aespa.firstMember = '민지';
print(aespa.firstMember);
}
//클래스 또는 변수 이름 앞에 _를 넣으면 현재 파일에서만 사용 가능한 private로 사용 가능
class _Idol {
final String name;
final List<String> members;
_Idol(this.name, this.members);
void sayHello() {
print('안녕하세요. ${this.name}입니다.');
}
void introduce() {
print('저희 멤버는 ${this.members}가 있습니다.');
}
//getter
String get firstMember {
return this.members[0];
}
//setter
set firstMember(String name) {
this.members[0] = name;
}
}
inheritance 상속 (extends 와 super 을 사용하여 상속 )
void main() {
print('--------------Idol--------------------');
Idol apink = Idol(name: '에이핑크', membersCount: 5);
apink.sayName();
apink.sayMemberCount();
print('--------------BoyGroup--------------------');
BoyGroup bts = BoyGroup('BTS', 7);
bts.sayName();
bts.sayMemberCount();
bts.sayGender();
print('--------------BoyGroup--------------------');
GirlGroup aespa = GirlGroup('에스파', 4);
aespa.sayName();
aespa.sayMemberCount();
aespa.sayGender();
}
// 상속을 받으면 부모 클래스의 모든 속성을 자식 클래스가 부여 받는다.
class Idol {
String name;
int membersCount;
Idol({required this.name, required this.membersCount});
void sayName() {
print('저희는 ${this.name}입니다.');
}
void sayMemberCount() {
print('${this.name}는 ${this.membersCount}명의 멤버가 있습니다.');
}
}
class BoyGroup extends Idol {
BoyGroup(String name, int membersCount)
: super(name: name, membersCount: membersCount);
void sayGender(){
print('저희는 남자 아이돌 입니다.');
}
}
class GirlGroup extends Idol {
GirlGroup(String name, int membersCount)
: super(name: name, membersCount: membersCount);
void sayGender(){
print('저희는 여자 아이돌 입니다.');
}
}
method - function (class 내부에 있는 함수)
override - 덮어 쓰다. (우선시하다.)
void main() {
TimesTwo tt = TimesTwo(2);
print(tt.calculate());
TimesFour tf = TimesFour(2);
print(tf.calculate());
}
class TimesTwo {
final int number;
TimesTwo(
this.number,
);
int calculate() {
//method
return number * 2;
}
}
class TimesFour extends TimesTwo {
TimesFour(
int number,
) : super(number);
@override
int calculate() {
return super.calculate() * 2; //this를 넣게 되면 루프가 돈다.
}
}
static
생성된 인스턴스에 귀속 되지 않고 클래스에 귀속 된다.
void main() {
Employee seulgi = Employee('슬기');
Employee chorong = Employee('초롱');
Employee jenny = Employee('제니');
seulgi.printNameAndBuilding();
Employee.building = '오투타워';
seulgi.printNameAndBuilding();
chorong.printNameAndBuilding();
jenny.printNameAndBuilding();
Employee.printBuilding();
}
class Employee {
// static은 instance에 귀속 되지 않고 class에 귀속 된다.
// 알바생이 일하는 건물
static String? building;
// 알바생 이름
final String name;
Employee(
this.name,
);
void printNameAndBuilding() {
print('제이름은 ${name}입니다. ${building}에서 근무하고 있습니다.');
}
static void printBuilding() {
print('저희는 ${building}에서 근무 중 입니다.');
}
}
interface - 형태를 강제하는 역할을 한다. 앞에 abstract를 입력하면 추상화 하여 인스턴스에서 사용 되는 것을 방지 할 수 있다.
void main() {
BoyGroup bts = BoyGroup('BTS');
GirlGroup redVelvet = GirlGroup('레드벨벳');
bts.sayName();
redVelvet.sayName();
}
abstract class IdolInterface{ //
String name;
IdolInterface(this.name);
void sayName();
}
class BoyGroup implements IdolInterface{
String name;
BoyGroup(this.name);
void sayName(){
print('저희 이름은 $name입니다.');
}
}
class GirlGroup implements IdolInterface{
String name;
GirlGroup(this.name);
void sayName(){
print('저희 이름은 $name입니다.');
}
}

OOP (Object Oriented Programming)
객체 지향 프로그래밍이라고 부르는 이유는 모든 클래스가 생성 될 때 최상위의 object를 상속 받고 object의 기능을 사용 할 수 있기 때문이다.
| 4-1. Asynchronous Programming (비동기 프로그래밍) (0) | 2023.09.07 |
|---|---|
| 3. Functional Programming (함수형 프로그래밍) (0) | 2023.09.05 |
| 2. 객체지향 프로그래밍 1 (0) | 2023.09.01 |
| 1. 기본기 2 (0) | 2023.08.31 |
| 1. 기본기 1 (0) | 2023.08.30 |