Flutter 클래스

Suyeon Lee·2024년 1월 10일
0
post-thumbnail

생성자

  • 클래스의 인스턴스를 생성하는 메서드
void main() {
// 변수 타입을 Idol로 지정하고 Idol의 인스턴스를 생성할 수 있습니다.
Idol blackPink = Idol();
// 메서드 실행
blackPink.sayName();
}

class Idol {
// 생성자에서 입력받는 변수들은 일반적으로 final 키워드 사용
final String name;

// 생성자 선언
// 클래스와 같은 이름으로 지정해야 함
// 함수의 매개 변수를 선언하는 것처럼 매개변수를 지정
Idol(String name) : this.name = name;

void sayName() {
	print('저는 ${this.name}입니다.');
	}
}

해당 Idol 클래스로 인스턴스 생성

void main() {
	// name에 '블랙핑크' 저장
	Idol blackPink = Idol('블랙핑크');

	// name에 'BTS' 저장
	Idol bts = Idol('BTS');
	bts.sayName();
}

네임드 생성자

class Idol {
	final String name;
	final int membersCount;

// 1.  생성자
Idol(String name, int membersCount)
// 1개 이상의 변수를 저장하고 싶을 때는 , 기호로 연결해 주면 됩니다.
	: this.name = name,
		this.membersCount = membersCount;

// 2. 네임드 생성자
// {클래스명.네임드 생성자명} 형식
Idol.fromMap(Map<String, dynamic> map)
	: this.name = map['name'],
		this.membersCount = map['membersCount;'];

void sayName() {
	print('저는 ${this.name}입니다. ${this.name} 멤버는
	${this.memebersCount}명입니다.');
	}
}
  1. 생성자에서 매개변수를 2개 받습니다.
  2. 네임드 생성자를 {클래스명.네임드 생성자명} 형식으로 지정합니다
void main() {
// 기본 생성자 사용
	Idol blackPink = Idol('블랙핑크', 4);
	blackPink.sayName();
// fromMap이라는 네임드 생성자 사용
	Idol bts = Idol.fromMap({
	'name': 'BTS',
	'membersCount': 7,
	});
	bts.sayName();
}

프라이빗 변수

class Idol {
// 1. '_'으로 변수명을 시작하면 프라이빗 변수를 선언할 수 있습니다.
	String _name;
	Idol(this._name);
}

void main() {
	Idol blackPink = Idol('블랙핑크');

// 같은 파일에서는 _name 변수에 접근할 수 있지만,
// 다른 파일에서는 _name 변수에 접근할 수 없습니다.

print(blackPink._name);

}

게터/세터

getter: 값을 가져올 때 사용

settier: 값을 지정할 때 사용

void main() {

	Idol blackPink = Idol();
	blackPink.name = '에이핑크'; // 1. 게터
	print(blackPink.name); // 2. 세터
}

상속

extends 키워드를 사용해 상속할 수 있으며 상속은 어떤 클래스의 기능을 다른 클래스가 사용할 수 있게 하는 기법으로 기능을 물려 주는 클래스를 부모 클래스, 받는 클래스를 자식 클래스

class Idol {
	final String name;
	final int membersCount;

Idol(this.name, this.membersCount);

void sayName() {
	print('저는 ${this.name]입니다');
	}
void sayMembersCount() {
	print('${this.name} 멤버는 ${this.membersCount}명입니다.');
	}
}

오버라이드

부모 클래스 또는 인터페이스에서 정의된 메서드를 재정의

class GirlGroup extends Idol {
	// super 키워드를 사용해도 되고 다음처럼 생성자의 매개변수로 직접
	// super 키워드르 사용해도 됩니다.
GirlGroup (
	super.name,
	super.membersCount,
);


void sayName() {
	print('저는 여자 아이돌 ${this.name}입니다.');
	}	
}

void main() {

GirlGroup blackPink = GirlGroup('블랙핑크', 4);
blackPink.sayName(); // 1 자식 클래스의 오버라이드된 메서드 사용

// saymembersCount는 오버라이드하지 않았기 때문에
// 그대로 Idol 클래스의 메서드가 실행됩니다.
// 2 부모 클래스의 메서드 사용
blackPink.sayMembersCount();
}

인터페이스

상속은 공유되는 기능을 상속받는 개념이지만 인터페이스는 공통으로 필요한 기능을 정의만 해 두는 역할을

class GirlGroup implements Idol {
	final String name;
	final int membersCount;

GirlGroup(
	this.name,
	this.membersCount,
	);

void sayName() {
	print('저는 여자 아이돌 ${this.name}입니다.');
	}

void sayMembersCount() {
	print('$(this.aname)')
	}

} 

믹스인

특정 클래스에 원하는 기능들만 골라넣을 수 있는 기능

특정 클래스를 지정해서 속성을 정의 가능하며 지정한 클래스를 상속하는 클래스에서도 사용 가능

mixin IdolSingMixin on Idol {
	void sing() {
	print('${this.name}이 노래를 부릅니다.');
	}
}

class BoyGroup extends Idol with IdolSingMixin {
	BoyGroup(
	super.name,
	super.membersCount,
	);

void sayMale() {
	print('저는 남자 아이돌입니다.');
	}
}

void main() {
	BoyGroup bts = BoyGroup('BTS', 7);

// 믹스인에 정의된 sing() 함수 사용 가능
bts.sing();
}

추상

상속, 인터페이스로 사용하는 데 필요한 속성만 정의 후 인스턴스화할 수 없도록 하는 기능

// 추상 클래스 지정
abstract class Idol {
 final String name;
 final int membersCount;

 Idol(this.name, this.membersCount); // 생성자 선언
// 추상 메서드 선언
void sayName(); 
void sayMembersCount(); 
}
// implements 키워드를 사용해 추상 클래스를 구현하는 클래스
class GirlGroup implements Idol {
	final String name;
	final int membersCount;

GirlGroup(
	this.name,
	this.membersCount,
	);

void sayName() {
	print('저는 여자 아이돌 ${this.name}입니다.');
}
void sayMembersCount() {
	print('${this.name} 멤버는 ${this.membersCount}명입니다.');
	}
}

void main() {
	GirlGroup blackPink = GirlGroup('블랙핑크', 4);
	blackPink.sayName();
	blackPink.sayMembersCount();
}

제네릭

// 인스턴스화할 때 입력받을 타입을 T로 지정합니다.
class Cache<T> {
// data의 타입을 추후 입력될 T 타입으로 지정합니다.
final T data;

Cache({
	required this.data,
	});
}

void main() {
	// T의 타입을 List<int>로 입력합니다.
final cache = Cache<List<int>> (
	data: [1,2,3],
	);

	// 제네릭에 입력된 값을 통해 data 변수의 타입이 자동으로 유추됩니다.
print(cache.data.reduce((value, element => value + element));
}

스태틱

static 키워드 사용 시 클래스 자체에 귀속됩니다

class Counter {
// 1 static 키워드 사용 시 static 변수 선언
static int i = 0;
// 2 static 키워드 사용 시 static 변수 선언
Counter() {
	i ++ ;
	print(i++);
	}
}

void main() {
	Counter count1 = Counter();
	Counter count2 = Counter();
	Counter count3 = Counter();
}

캐스케이드 연산자

void main() {
	// cascade operation (..)를 사용하면 선언한 변수의 메서드를 연속 실행 가능
Idol blackPink = Idol('블랙핑크, 4')
	.. sayName()
	.. sayMembersCount();
	
}
profile
매일 렌더링하는 FE 개발자

0개의 댓글