[Flutter] 2.객체지향 프로그래밍(OOP)

Beanxx·2024년 7월 11일
0

Flutter

목록 보기
2/5
post-thumbnail

Dart#2 객체지향 프로그래밍(OOP)

✅ 인스턴스

인스턴스: 클래스로 실제 결과물을 만들어 내는 것

  • 같은 값에 대해 const로 선언할 경우 같은 인스턴스 !
    // Idol newJeans = new Idol('뉴진스', ['하니', '민지']); // new 키워드 생략 가능
    Idol newJeans1 = const Idol('뉴진스', ['하니', '민지']);
    Idol newJeans2 = const Idol('뉴진스', ['하니', '민지']);
    
    print(newJeans1 == newJeans2); // true

  • 값은 값에 대해 const로 선언하지 않을 경우 다른 인스턴스로 인식
    Idol newJeans3 = Idol('뉴진스', ['하니', '민지']);
    Idol newJeans4 = Idol('뉴진스', ['하니', '민지']);
    
    print(newJeans3 == newJeans4); // false

✅ construcor: 생성자

immutable programming: 선언 후 변경 불가능 ❌

// Idol class
class Idol {
	// final: 값 변경 불가능 => final로 선언 지향!
	final String name;
	final List<String> members;
	
	// [기본 constructor] (class 이름과 동일한 constructor)
	Idol(String name, List<String> members)
		: this.name = name, this.members = members;
		// this -> 해당 클래스를 뜻함
		
	// === 하단처럼 축약해서 작성 가능
	const Idol(this.name, this.members); // const로 선언시 값 변경 불가
	
	
	// [named constructor]
	Idol.fromList(List values)
		: this.members = values[0], this.name = values[1];
		
	void sayHello() {
		print('안녕하세요 ${this.name}입니다.');
	}
	
	void introduce() {
		print('저희 멤버에는 ${this.members}가 있습니다.');
	}
}
Idol newJeans = Idol.fromlist([['하니', '민지'], '뉴진스']);
print(newJeans.name); // 뉴진스
newjeans.sayHello(); // 안녕하세요 뉴진스입니다.

Idol bts = Idol.fromlist([['v', 'jk'], 'bts']);
print(bts.name); // bts
bts.introduce(); // 저희 멤버에는 'v', 'jk'가 있습니다.

✅ getter & setter

  • getter: 데이터를 가져올 때
  • setter: 데이터를 설정할 때
class Idol {
	String name;
	List<String> members;
	
	Idol(this.name, this.members);
	
	// getter (return String type)
	Strring get firstMember {
		return this.members[0];
	}
	
	// setter (무조건 하나의 매개변수 존재해야함)
	set firstMember(String name) {
		this.members[0] = name;
	}
}

Idol newJeans = Idol('뉴진스', ['하니', '민지']);
	
print(newJeans.firstMember); // 하니 (get)
	
newJeans.firstMember = '아이유'; // (set)
print(newJeans.firstMember); // 아이유

✅ private

  • 이름 앞에 _ 붙이면 해당 파일 내에서만 사용 가능하며, 외부에선 사용 불가
  • 변수, 함수 등에서도 _ 붙으면 동일하게 private 동작
class _PrivateIdol {
	final String _name;
	
	_PrivateIdoll(this._name);
}

✅ 상속: inheritance

  • 상속을 받으면 부모 클래스의 모든 속성을 자식 클래스가 부여받음
  • 자식 → 부모 클래스로는 속성을 물려주지 않음
  • 자식 클래스끼리도 속성 공유 ❌

  • super(): 부모의 파라미터 정의
class Idol {
	Idol({ required this.name, required this.membersCount });
}

// 부모 클래스인 Idol의 속성을 다 물려받아 자식 클래스인 BoyGroup 클래스에서 부모 속성을 모두 사용 가능
class BoyGroup extends Idol {
	BoyGroup(String name, int membersCount)
		: super(name: name, membersCount: membersCount);
}

BoyGroup bts = BoyGroup('bts', 7);
bts.sayName();

// type 비교
print(bts is Idol); // true
print(bts is BoyGroup); // true

✅ method & override

  • 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);
	
	// method 덮어씌우기 (@override 키워드 생략 가능)
	
	int calculate() {
		return this.number * 4; // this 생략해도 ok
		return super.calculate() * 2; // 위 결과와 동일 (number * 2 * 2 = number * 4)
	}
}

TimesTwo tt = TimesTwo(2);
print(tt.calculate()); // 4
profile
FE developer

0개의 댓글