31일차 과제 링크 👉 31일차 과제
컴파일 타임 상수
프로그램 실행 중에 값이 결정되는 것이 아닌, 컴파일 시점에서 이미 알려진 상수 값
상수를 선언하는 동안 반드시 초기화되어야 함
불변성을 보장하기 때문에 같은 값을 가진 객체에 대해서는 항상 동일한 객체를 재사용
예시 코드
const int x = 5;
const double y = 3.14;
const String name = 'John';
const List<int> numbers = [1, 2, 3];
const Map<String, int> scores = {'Alice': 100, 'Bob': 90};
불변 변수
변수에 할당된 객체를 변경할 수 없음
런타임에 값이 결정되며 변수를 선언할 때 또는 생성자에서 초기화해야 함
한 번 할당된 후에는 새로운 값으로 업데이트할 수 없지만, 할당된 객체의 내부 상태는 변경될 수 있음
예시 코드
final int x = 5;
final double y = 3.14;
final String name = 'John';
final List<int> numbers = [1, 2, 3];
final Map<String, int> scores = {'Alice': 100, 'Bob': 90};
주의할점
final
및const
키워드는 변수가 불변이지만, 할당된 객체 자체가 불변하지는 않음. →final
및const
로 선언된 리스트의 내부 요소는 변경될 수 있음final List<int> numbers = [1, 2, 3]; numbers[0] = 10;
final
및const
로 선언된 리스트는 리스트 객체 자체에 대한 재할당을 방지하고 같은 리스트 객체를 계속 사용하도록 함. 그러나 리스트 내부의 요소는 변경될 수 있음
static
을 사용하여 정의된 멤버는 클래스의 인스턴스와는 독립적으로 존재하며, 클래스 자체에 연결됨특징
- 클래스 레벨에 속한다.
해당 클래스의 인스턴스를 생성하지 않고도 직접 접근할 수 있음- 인스턴스에 종속되지 않는다.
특정 인스턴스에 종속되지 않으므로 클래스의 모든 인스턴스에 공유됨
→ 인스턴스마다 독립적인 값이 아닌 하나의 값이 공유됨- 인스턴스 멤버에 접근할 수 없다.
클래스 자체에 속하기 때문에 인스턴스 멤버에 직접 접근할 수 없음
→ 인스턴스 멤버에 접근하려면 해당 멤버에 대한 인스턴스를 생성해야 함- 클래스 이름을 통해 접근한다.
ClassName.staticMember
와 같은 형식으로 접근할 수 있음
class Circle {
static const double pi = 3.14159;
static int numberOfInstances = 0;
double radius;
Circle(this.radius) {
numberOfInstances++;
}
static double calculateArea(double radius) {
return pi * radius * radius;
}
}
void main() {
Circle circle1 = Circle(2.0);
Circle circle2 = Circle(3.0);
print(Circle.pi); // 클래스 이름을 통한 접근
print(Circle.numberOfInstances); // 클래스 이름을 통한 접근
double area = Circle.calculateArea(4.0);
print(area);
}
페이지별 라우트를 넣어주고 관리할 때
class LoginPage extends StatelessWidget {
const LoginPage({super.key});
static const String route = '/login';
Widget build(BuildContext context) {
return Scaffold( ... );
}
}
정적 데이터를 보관하고 싶을 때
class AppRoutes {
static const String login = LoginPage.route;
static const String main = MainPage.route;
static const String signup = SignupPage.route;
}
Get.toNamed(AppRoutes.login);
Get.toNamed(AppRoutes.main);
Get.toNamed(AppRoutes.signup);
.
연산자를 사용하여 호출get
키워드를 사용하여 정의속성의 값을 설정하는 데 사용되는 메서드, 속성에 값을 할당할 때 =
연산자를 사용하여 호출
해당 속성을 쓰기 전용으로 만듦. 클래스 외부에서 수정할 수 있지만 읽을 수는 없음
해당 속성의 이름 뒤에 set
키워드를 사용하여 정의하고 매개변수를 받음
예시 코드
class Circle {
double _radius;
Circle(this._radius);
double get radius {
return _radius;
}
set radius(double value) {
if (value > 0) {
_radius = value;
}
}
}
void main() {
Circle circle = Circle(2.0);
print(circle.radius); // getter 호출
circle.radius = 3.0; // setter 호출
print(circle.radius); // getter 호출
}
Get.to(NextPage());
Get.off(MainPage());
Get.offAll(NextPage());
GetMaterialApp(
home: HomePage(),
getPages: [
GetPage(name: '/next', page: () => NextPage()),
],
)
Get.toNamed('/next');
// MaterialApp의 routes 맵에 경로와 페이지를 매핑
GetMaterialApp(
initialRoute: '/',
routes: {
'/': (context) => HomePage(),
'/details': (context) => DetailsPage(),
},
);
// 이전 페이지를 스택에서 제거하고 '/details' 페이지로 이동
Get.offNamed('/details');
// MaterialApp의 routes 맵에 경로와 페이지를 매핑
GetMaterialApp(
initialRoute: '/',
routes: {
'/': (context) => HomePage(),
'/details': (context) => DetailsPage(),
},
);
// 이전 페이지를 모두 스택에서 제거하고 '/details' 페이지로 이동
Get.offAllNamed('/details');
유튜브 끄세요