flutter

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

객체지향 프로그래밍

클래스

// 클래스 선언
class Idol {
	final String
	final List<String> members;

	const Idol(this.name, this.members);
	
	Idol.fromList(List values)
			: this.members = values[0],
			  this.name = values[1];
	void sayHello() {
		print('안녕하세요 Sfthis.name}입니다.') ;
	}
}

// 인스턴스 선언 후 사용
Idol aIdol = Idol()

// 둘은 같은 것으로 본다.
Idol aPink = const Idol(
	'A',
	[1, 2, 3]
);

Idol bPink = const Idol(
	'A'
	[1, 2, 3]
)
  • const로 클래스를 만든 경우에는 같은 값을 가진 두 const class는 같은 것으로 판단된다. (원래 객체는 내부 값이 모두 같아도 새로 생성한 다른 객체의 경우 다르다고 판단하는데, 특이한 경우이니 기억해두자.)
  • static 키워드를 사용하면 모든 클래스에서 공통적으로 사용할 수 있는 변수가 된다. 따라서 한 번 값을 설정하고나면 전부 공용으로 사용한다. 함수의 경우에는 static 으로 선언하면 인스턴스 선언 없이도 메서드를 사용할 수 있다.

getter, setter

getter는 따로 파라미터를 받지 않는다.

setter는 무조건 하나의 파라미터만 받는다. 왜 그런것이냐? 평소에 알던 방식이랑은 다른 방식으로 값을 넣기 때문이다. 기존의 방식인 함수 사용이 아니다!

setter는 거의 안쓴다.

class Idol {
	String
	List<String> members;

	Idol(this.name, this.members);
	
	Idol.fromList(List values)
			: this.members = values[0],
			  this.name = values[1];
	void sayHello() {
		print('안녕하세요 Sfthis.name}입니다.') ;
	}
	
	String get firstMember{
		return this.members[0]
	}
	
	set firstMember(String name) {
		this.members[0] = name;
	}
}

// getter 사용
aPink.firstMember
// setter 사용
aPink.firstMember = "abc"

private

함수나 클래스나 변수 이름 앞에 언더스코어를 붙여주면 된다.

상속

  • super 라는 키워드가 부모 클래스를 의미한다.
  • 자식 클래스는 부모 클래스가 될 수 있다. 즉, 타입을 비교할 때 부모 클래스인지 아닌지 확인했을 때 true로 나온다.
  • 반대로 부모 클래스는 자식 클래스가 될 수 없다.
// 기본 클래스
class Idol {
	String name;
	int membersCount;

	Idol({
		required this.name, 
		required this.membersCount
	});
}

// 상속
class BoyGroup extends Idol {
	BoyGroup(
		String name,
		int memberCount,
	) : super(
		name : name,
		memberCount: memberCount
	);
}

Method overriding

상속한 함수를 덮어쓴다.

그냥 함수 작성하면 되는데, @override 라는 키워드를 적어주면 좋다.

Interface

타입 선언처럼 나중에 클래스 선언할 때 어떤 것이 들어가는지 적어주는 것.

// 인터페이스
class IdolInterface {
	String name;
	
	IdolInterface(this.name);
	
	void sayName() {}
}

// 사용
class BoyGroup implements IdolInterface {
	// ...
}

Generic

class Lecture<T> {
	final T id;
	final String name;
}

void main() {
	Lecture<int> lecture1 = Lecture(123, 'lecture1')
}