-
[개발일지] Dart 입문 2: Object Oriented ProgrammingStudy/Development 2022. 8. 18. 01:05
<인프런 코드팩토리 강의 수강일지>
1. class 선언
void main() { Idol blackPink = Idol('블랙핑크', ['지수', '제니', '리사', '로제']); Idol bts = Idol.fromList([ ['RM', '진', '슈가', '제이홉', '지민', '뷔', '정국'], 'BTS', ]); // 리스트로 값을 줄 수 있다. print(blackPink.name); // 블랙핑크 print(blackPink.members); // [지수, 제니, 리사, 로제] blackPink.sayHello(); // 안녕하세요 블랙핑크입니다. blackPink.introduce(); // 저희 멤버는 [지수, 제니, 리사, 로제]가 있습니다. print(bts.name); // BTS print(bts.members); // [RM, 진, 슈가, 제이홉, 지민, 뷔, 정국] bts.sayHello(); // 안녕하세요 BTS입니다. bts.introduce(); // 저희 멤버는 [RM, 진, 슈가, 제이홉, 지민, 뷔, 정국]가 있습니다. } // Idol class class Idol { String name; List<String> members; Idol(this.name, this.members); Idol.fromList(List values) : this.members = values[0], this.name = values[1]; void sayHello() { print('안녕하세요 ${this.name}입니다.'); } void introduce() { print('저희 멤버는 ${this.members}가 있습니다.'); } }
2. getter / setter
void main() { Idol blackPink = Idol('블랙핑크', ['지수', '제니', '리사', '로제']); Idol bts = Idol.fromList([ ['RM', '진', '슈가', '제이홉', '지민', '뷔', '정국'], 'BTS', ]); print(blackPink.firstMember); // 지수 print(bts.firstMember); // RM blackPink.firstMember = '최불암'; bts.firstMember = '윤여정'; print(blackPink.firstMember); // 최불암 print(bts.firstMember); // 윤여정 } // getter / setter // 값을 가져오고 변경할 때 class Idol { String name; List<String> members; Idol(this.name, this.members); Idol.fromList(List values) : this.members = values[0], this.name = values[1]; 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; } }
3. Private 속성
// _ 언더바를 붙이면, 한 파일 내에서만 사용할 수 있다. class _Idol {...}; // 클래스 this._members = values[0]; // 변수 _sayhello(){...} // 함수
4. 상속: 자식 / 부모 Class
void main() { print('---- Idol ----'); Idol apink = Idol(name: '에이핑크', membersCount: 5); apink.sayName(); apink.sayMembersCount(); print('----- BoyGroup ----'); BoyGroup bts = BoyGroup('BTS', 7); bts.sayName(); bts.sayMembersCount(); bts.sayMale(); // 부모클래스에서는 사용 불가 print('----- GirlGroup ----'); GirlGroup redVelvet = GirlGroup('Red Velvet', 5); redVelvet.sayName(); redVelvet.sayMembersCount(); redVelvet.sayFemale(); // 부모클래스에서는 사용 불가 print('----- Type Comparison -----'); print(apink is Idol); print(apink is BoyGroup); print(apink is GirlGroup); print('----- Type Comparison2 -----'); print(bts is Idol); print(bts is BoyGroup); print(bts is GirlGroup); print('----- Type Comparison3 -----'); print(redVelvet is Idol); print(redVelvet is BoyGroup); print(redVelvet is GirlGroup); } // 상속 - inheritance // // 상속을 받으면 부모 클래스의 모든 속성을 // 자식 클래스가 부여받는다. class Idol { //이름 String name; //멤버 수 int membersCount; Idol({ required this.name, required this.membersCount, }); void sayName() { print('저는 ${this.name}입니다.'); } void sayMembersCount() { print('${this.name}은 ${this.membersCount}명의 멤버가 있습니다.'); } } class BoyGroup extends Idol { BoyGroup( String name, int membersCount, ) : super( name: name, membersCount: membersCount, ); void sayMale() { print('저는 남자 아이돌입니다.'); } // 자식 클래스에서 선언한 값은 부모 클래스에서 사용 불가하다. } class GirlGroup extends Idol { GirlGroup( String name, int membersCount, ) : super( name: name, membersCount: membersCount, ); void sayFemale() { print('저는 여자 아이돌입니다.'); } // 자식 클래스에서 선언한 값은 부모 클래스에서 사용 불가하다. }
5. override: 덮어쓰기
- 부모로부터 상속받은 값, 함수를 덮어쓸 수 있다.
void main() { TimesTwo tt = TimesTwo(2); print(tt.calculate()); TimesFour tf = TimesFour(2); print(tf.calculate()); } // method - function (class 내부에 있는 함수) // override - 덮어쓰다 (우선시하다) class TimesTwo { final int number; TimesTwo(this.number); // method int calculate() { return number * 2; } } class TimesFour extends TimesTwo { TimesFour( int number, ) : super(number); @override int calculate() { // return super.number * 4; return super.calculate() * 2; // super 키워드 사용하여 변수나 함수 가져올 수 있다. } }
6. static
- static은 instance에 귀속되지 않고 class에 귀속된다. (전체에 해당)
void main() { Employee seulgi = Employee('슬기'); Employee chorong = Employee('초롱'); seulgi.name = '최불암'; seulgi.printNameAndBuilding(); chorong.printNameAndBuilding(); Employee.building = '육삼빌딩'; seulgi.printNameAndBuilding(); chorong.printNameAndBuilding(); Employee.printBuilding(); } class Employee { //static은 instance에 귀속되지 않고 class에 귀속된다. //알바생이 일하는 건물 static String? building; // class 전체에 귀속 //알바생 이름 String name; // 각 instance 값 Employee( this.name, ); void printNameAndBuilding() { print('제 이름은 $name입니다. $building 건물에서 근무하고 있습니다.'); } static void printBuilding() { print('저는 $building 건물에서 근무중입니다.'); } }
7. Interface
- 기본적인 포맷을 제시
void main() { BoyGroup bts = BoyGroup('BTS'); GirlGroup redVelvet = GirlGroup('레드벨벳'); bts.sayName(); // 제 이름은 BTS입니다. redVelvet.sayName(); // 제 이름은 레드벨벳입니다. print(bts is IdolInterface); // true print(bts is BoyGroup); // true print(bts is GirlGroup); // false print(redVelvet is IdolInterface); // true print(redVelvet is BoyGroup); // false print(redVelvet is GirlGroup); // true } // interface // abstract 키워드 사용하여 // instance로 사용 불가하도록 할 수 있다. 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입니다.'); } }
8. generic
- 타입을 외부에서 받을 때 사용
void main() { Lecture<String, String> lecture1 = Lecture('123', 'lecture1'); lecture1.printIdType(); // String Lecture<int, String> lecture2 = Lecture(123, 'lecture2'); lecture2.printIdType(); // int } // generic = 타입을 외부에서 받을 때 사용 class Lecture<T, X> { final T id; final X name; Lecture(this.id, this.name); void printIdType() { print(id.runtimeType); } }
10. OOP
- 객체 지향 프로그래밍
void main() { Test test = Test(); // 모든 클래스는 Object라는 클래스를 상속받기 때문에 // 아래 4개 값을 기본으로 가진다 test.hashCode; test.runtimeType; test.toString(); test.noSuchMethod(); } // OOP: Object Oriented Programming // 객체 지향 프로그래밍 class Test{}
반응형'Study > Development' 카테고리의 다른 글
[개발일지] Dart 입문 4: Asynchronous Programming (0) 2022.08.21 [개발일지] Dart 입문 3: Functional Programming (0) 2022.08.21 [개발일지] Dart 입문 1: 언어 기본 (0) 2022.08.17 [개발일지] JavaScript & JQuery 기초 수업 Level 3-2 (0) 2022.08.15 [개발일지] JavaScript & JQuery 기초 수업 Level 3-1 (0) 2022.08.09