Flutter 클래스 및 객체 개념 정리
이번 포스팅에서는 Flutter에서 클래스(Class)와 객체(Object)의 개념을 배우고, 이를 활용하여 게임 프로젝트를 리팩토링하는 방법을 설명합니다.
1. 클래스(Class)란?
클래스는 객체(Object)를 만들기 위한 설계도입니다. Flutter에서 UI 요소뿐만 아니라 게임 캐릭터, 사용자 정보, 설정 값 등을 클래스로 정의할 수 있습니다.
📌 클래스 기본 구조
class 클래스명 {
// 멤버 변수 (속성)
타입 변수명;
// 생성자
클래스명(this.변수명);
// 메서드 (기능)
void 함수명() {
// 실행할 코드
}
}
📌 클래스 예제: 인간(Human) 객체 만들기
class Human {
final String id;
final String name;
int age;
final String gender;
// 생성자
Human(this.id, this.name, this.age, this.gender);
// 나이를 증가시키는 메서드
void addAge() {
age++;
}
}
2. 객체(Object) 생성 및 활용
클래스는 직접 사용할 수 없고, 객체(Instance)로 만들어야 합니다.
📌 객체 생성 예제
void main() {
// Human 객체 생성
Human person = Human("860303-1234567", "김성덕", 39, "남성");
// 나이 증가시키기
person.addAge();
print("${person.name}의 나이는 ${person.age}살입니다.");
}
이 코드를 실행하면 다음과 같은 결과가 출력됩니다.
김성덕의 나이는 40살입니다.
3. 클래스와 객체를 활용한 카드 게임 리팩토링
이제 카드 게임 프로젝트에서 클래스를 활용하여 코드를 정리(Refactoring)하는 방법을 설명합니다.
📌 1) 카드 모델(Card Model) 클래스 생성
class CardModel {
final int index; // 카드 위치
final int value; // 카드 값
bool isFlipped; // 카드가 뒤집혔는지 여부
// 생성자
CardModel({required this.index, required this.value, this.isFlipped = false});
// 카드 상태 변경 메서드
void setFlipped(bool flipped) {
isFlipped = flipped;
}
}
이제 카드 정보를 객체로 관리할 수 있습니다.
📌 2) 카드 리스트(Card List) 생성 및 셔플
List generateCards() {
List cardValues = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6];
cardValues.shuffle(); // 카드 섞기
return List.generate(12, (index) => CardModel(index: index, value: cardValues[index]));
}
📌 3) 기존 코드에서 카드 정보를 CardModel로 변경
class CardBoard extends StatefulWidget {
@override
_CardBoardState createState() => _CardBoardState();
}
class _CardBoardState extends State {
late List cards; // 카드 리스트
@override
void initState() {
super.initState();
cards = generateCards(); // 카드 초기화
}
// 카드 클릭 이벤트
void onCardTapped(int index) {
setState(() {
cards[index].setFlipped(!cards[index].isFlipped);
});
}
@override
Widget build(BuildContext context) {
return GridView.builder(
itemCount: cards.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4),
itemBuilder: (context, index) {
return GestureDetector(
onTap: () => onCardTapped(index),
child: Card(
child: Center(child: Text(cards[index].isFlipped ? "${cards[index].value}" : "?"))
),
);
},
);
}
}
4. 리팩토링(Refactoring) 개념
리팩토링(Refactoring)이란 기능을 변경하지 않으면서 코드의 구조를 개선하는 것입니다.
📌 리팩토링의 목적
- 코드를 더 읽기 쉽게 만들고 유지보수를 쉽게 함
- 반복되는 코드를 줄여 재사용성을 높임
- UI/로직을 분리하여 코드의 확장성을 증가
📌 리팩토링 적용 전 vs 후
기존 코드 | 리팩토링 코드 |
---|---|
|
|
위처럼 데이터를 하나의 클래스(CardModel)로 묶어서 관리하면 코드가 간결해지고 확장성이 높아집니다.
5. 결론
- Flutter에서 클래스(Class)를 활용하면 데이터와 기능을 객체화하여 관리 가능
- 객체(Object)를 생성하고 메서드를 통해 데이터를 조작할 수 있음
- 게임 프로젝트에서 클래스를 활용하면 코드가 더 깔끔하고 유지보수가 쉬움
- 리팩토링(Refactoring)을 통해 가독성과 확장성을 개선
다음 시간에는 게임 점수 관리 및 최종 기능 개선을 진행하겠습니다. 🚀
'스파르타 코딩 클럽 내일배움캠프 6기 > [Flutter 트랙] 앱개발 종합반' 카테고리의 다른 글
[Flutter 트랙] 앱개발 종합반 2-2 - Stateless와 Stateful 위젯 살펴보기 (0) | 2025.03.04 |
---|---|
[Flutter 트랙] 앱개발 종합반 2-1 - Flutter 기본기 (2) | 2025.03.04 |
[Flutter 트랙] 앱개발 종합반 1-13 - Widget Tree 위젯 트리 (0) | 2025.03.04 |
[Flutter 트랙] 앱개발 종합반 1-12 - 동기 / 비동기 (2) | 2025.03.04 |
[Flutter 트랙] 앱개발 종합반 1-11 - 조건문 (0) | 2025.03.04 |