widget은 객체라는 것을 앞서 언급하였다. 또 거의 대부분의 value가 obj라는 것을 알 수 있었다.
즉, 이 obj가 dart의 fundamental한 concept이라 하였다.
그런데 이 class는 java를 했다면 obj와 매우 밀접한 연관관계를 갖고있다고 볼 수 있다.
하지만 이를 이해하려면 dart는 결국 객체지향 언어라는 것을 알아야한다.
이는 Primitive한 원시타입은 물론이고 요상한 Widgets, Config Obj도 모두 객체라는 것에서 알 수 있다.
그런데 이 obj는 어디서 타입과 변수명등 즉, 데이터 구조를 지정해줄까? 바로 class이다.
이는 런타임에 생성될 때 어떤 종류의 데이터가 개체에 저장될지 정의하고 메서드라는 추가 함수가 어떤 개체에 저장될지도 정의한다.
그럼 각각의 class는 어디서 확인할까? 물론 간편하게 IDE에서 호버링으로도 확인할 수 있지만 공식문에서 자세히 확인 가능하다.
따라서 우리는 이를 기바으로 코드에서 클래스와 생성자 함수를 다루게 된다.
그런 다음 장치에서 응용 프로그램이 실행되고 코드가 위에서 아래로 실행되면 실제 개체는 생성(인스턴스화)되고 메모리에 저장되는 동작과정을 지닌다.
반드시 snake_case 혹은 PascalCase로 작성할 것.
StatelessWidget 를 extends하기
build함수 작성하기
const 키워드로 생성자 선언하기
여기서 생성자함수를 따로 만들진 않았지만 모든 클래스에 자동으로 추가되기 때문에 우리가 명시적으로 추가하지 않아도 되며
또 사용도한 가능하다.
물론 사용은 가능하나 추가적인 설정이나 구성을 추가하고 싶다면 이 위젯이 생성되는 시점에서 생성자함수를 명시하여 추가해줘야한다.
:
하여 부모클래스의 생성자함수를 호출super()
하여 key 값을 설정해주는데 이를 상속받은 클래스의 key값을 넣어준다.lib 폴더 밑에 파일을 생성하여 넣어주면 된다.
이때 반드시 snake_case로 작성해야하며 모두 소문자로 작성해야한다.
이때 파일 하나당 주요 함수나 주요 클래스를 기준으로 나눠주면 좋다.
package:
라는 키워드를 사용하고 뒤엔 현재 프로젝트 이름을 갖다 적으면 된다. 그리고 path대로 타고 들어가서 작성해주면 된다.Variables는 데이터 container이다.
Variables는 데이터 컨테이너이고 이 기능은 모든 프로그래밍 언어에서 존재한다.
왜냐하면 모든 프로그래밍 언어는 값과 관련된 일을 많이 하기 때문이다.
자 예를 들어보자.
이때 2가지 문제가 발생한다. 1. null은 할당이 안 된다. 2. 올바르지 않은 const 키워드 사용이다.
하지만 원인은 2번이라고 볼 수 있다.
2번이 왜 뜨냐면
class GradientContainer extends StatelessWidget {
const GradientContainer({super.key});
Widget build(ctx) {
return Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: [
Color.fromARGB(255, 121, 56, 231),
Color.fromARGB(255, 224, 108, 245),
],
begin: startAlignment,
end: endAlignment,
),
),
child: const Center(
child: StyledText(),
),
);
}
}
물론 이처럼 사용하는 것을 지양해야한다. 마치 TS에서 any를 남발하는 것과 같으며 이는 type을 지정해주는 장점과 이유를 무시해버리는 행동이기 때문이다.
그래도 정 사용하고 싶다면 앞에 type을 먼저 지정 후 optional keyword ?
를 통해 null이거나 값이 들어있거나 라는 선택지를 부여해주면 된다.
var startAlignment = Alignment.topLeft;
둘다 변경할 수 없는 상수를 선언하는 것인데 그럼 이 둘의 차이점은 무엇일까?
const는 컴파일 타임 상수 즉, 코드를 discord할 때 할당된다는 것이다.
즉, app이 실행될 때 실행된다는 것이다.
반면 final은 컴파일되는 시점이 아닌 코드가 실행된 후에 할당된다. 뭔가 time stamp 처럼 해당 코드가 실시될 때! 딱 결정되고 그 이후로는 바뀔 수 없다고 생각하면 된다.
즉, 선언 시점은 const가 더 선행된다.