상세 컨텐츠

본문 제목

2. 객체지향 프로그래밍 2

Flutter(Dart 포함)

by 본투비곰손 2023. 9. 5. 00:17

본문

728x90

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의 기능을 사용 할 수 있기 때문이다.

728x90

관련글 더보기