class에서 member변수를 설정하면, 매번 instance를 만들때 마다 동일한
instance가 만들어진다.
함수가 parameter를 통해서 다양한 값에 대해 동일한 body로 처리하는
것과 같이, 생성자로 다양한 instance를 만들 수 있다.
가장 기본형은 인자를 받지 않는것이다.
voidmain(){Idolidol=newIdol();idol.sayHello();}classIdol{Stringname='black';List<String>members=['holy','frege'];Idol();voidsayHello(){print('hi');}voidintroduce(){print("hi we are band");}}
member variable을 접근할때 setter와 getter를 사용하는데, 이는
private으로 설정되었을때 접근하기 위한것이다.
[13-class(Inheritance)] extends 와 super 사용
Idol이라는 class를 작성하고, BoyGroup이라는 class가 상속받게 하자.
여기서 named parameter를 사용하는 생성자의 형태에 유념하자. this를
사용한다. 생성자의 인수를 this로 받으면 : 설정을 하지 않아도 된다고
했다. positional parameter를 사용할때 간략하게 하기 위해서,즉 :으로
assign을 안할려고 this를 사용했듯이 named parameter도 동일하다. 만일
this를 사용하지 않는다면 생성자의 인수에 변수를 선언하고 body 대신
:으로 assign해줘야 한다.
voidmain(){BoyGroupbg=BoyGroup('bg',5);bg.sayName();}classIdol{Stringname;intmembersCount;Idol({requiredthis.name,requiredthis.membersCount,});voidsayName(){print(' im $name ');}voidsayMembersCount(){print('our members number is $membersCount');}}classBoyGroupextendsIdol{BoyGroup(Stringname,intnumbers):super(name:name,membersCount:numbers);}
[14-class(Inheritance)] 상속받는 BoyGroup class에 BoyGroup만의 함수 추가하기
상속받는 BoyGroup에 sayMale()를 추가한다.
이것은 당연히 Idol instance에서는 접근할 수 없다.
Idol의 named parameter 생성자의 선언과 사용법을 잊지말자. 자주
나오는 패턴이다.
voidmain(){BoyGroupbg=BoyGroup('bg',7);bg.sayName();bg.sayMale();Idolblack=Idol(name:'black',memberCount:5);black.sayName();// black.sayMale();
}classIdol{Stringname;intmemberCount;Idol({requiredthis.name,requiredthis.memberCount,});voidsayName(){print("hello $name is");}voidsayMemberCount(){print("our member is $memberCount");}}classBoyGroupextendsIdol{BoyGroup(Stringname,intcountNumbers):super(name:name,memberCount:countNumbers);voidsayMale(){print("we ar male");}}
[15-class(Inheritance)] Idol을 상속받는 Girl Group을 만든다.
voidmain(){GirlGroupgg=GirlGroup('gg',4);gg.sayName();}classIdol{Stringname;intmemberCount;Idol({requiredthis.name,requiredthis.memberCount,});voidsayName(){print('this is $name.');}voidsayMemberCount(){print('this is member count of $memberCount');}}classGirlGroupextendsIdol{GirlGroup(Stringname,intcountNumbers):super(name:name,memberCount:countNumbers);}
[16-class(Inheritance)] GirlGroup만의 함수 만들기
sayFemale()를 만든다.
girlGroup에만 있는 함수라서 Idol instance나, BoyGroup instance에서
접근할 수 없다.
voidmain(){GirlGroupgg=GirlGroup('gg',5);gg.sayFemale();}classIdol{Stringname;intmemberCount;Idol({requiredthis.name,requiredthis.memberCount,});voidsayName(){print("hello my name is $name.");}voidsayMemberCount(){print('hi our member is $memberCount.');}}classGirlGroupextendsIdol{GirlGroup(Stringname,intmemberCount):super(name:name,memberCount:memberCount);voidsayFemale(){print('our group is female group');}}
[17-class(Inheritance)] type 비교
자식 instance들이 부모 class에 포함되는지 여부와 부모 instance들이
자식 class에 포함되는지 여부.
is 사용
voidmain(){Idolapink=Idol(name:'apink',number:5);BoyGroupbg=BoyGroup('bg',3);GirlGroupgg=GirlGroup('gg',7);print(bgisIdol);print(ggisIdol);print(apinkisBoyGroup);print(apinkisGirlGroup);}classIdol{Stringname;intnumber;Idol({requiredthis.name,requiredthis.number,});voidsayName(){print('hi $name.');}voidsayNumber(){print('our member is $number');}}classGirlGroupextendsIdol{GirlGroup(Stringname,intnumbers):super(name:name,number:numbers);voidsayFemale(){print("our member is female");}}classBoyGroupextendsIdol{BoyGroup(Stringname,intnumbers):super(name:name,number:numbers);voidsayMale(){print("this is male");}}
[18-class(polymorphism)] method overriding1
method재작성
timestwo라는 class를 만든다. 숫자를 입력받아 2를 곱하는 함수
calculate가 있다.
static이 없으면 객체의 identity를 나타내는 instance변수라면,
static은 class의 특성을 나타내는 변수다.
static 변수에 해당하는 값이 모든 instance에 있지 않다. 그래서 nullable하게 한다.
static변수와 함수는 class에서 생성및 실행한다.
voidmain(){Employeesg=Employee('sg');Employee.building='big';sg.printNameAndBuilding();Employee.printBuilding();}classEmployee{staticString?building;finalStringname;Employee(this.name);voidprintNameAndBuilding(){print('$name works at $building');}staticvoidprintBuilding(){print('I works at $building');}}
[22-class(polymorphism)] interface
interface는 dart 3.0에서 새롭게 추가되었다. 그래서 여기선 생략한다.
[23-class(polymorphism)] generic type
type을 외부에서 받을때 사용한다.
type을 외부에서 받기때문에 class를 선언할때, type을 받을 수 있게 <>를 사용한다.
<>를 사용해서 type을 받기도 하고 전달하기도 한다.
Lecture라는 class를 만든다. class에는 id와 name을 멤버변수로 갖게 한다.