플러터 공부 시작 Day 1
안녕하세요 제가 이번에 시작하는 것은 제가 여러 번 도전했다가 실패했던 모바일 앱 개발 공부입니다. 이 글에서는 온라인 강의를 듣고 공부한 내용을 간단한 노트형식으로 남겨볼까 합니다.
jastory.tistory.com
Day2. 오늘은 다트언어의 oop(object oriented programming)을 공부했습니다.
OOP라고 부르는 이유는 모든 class의 최상위 parentclass 가 object라는 class이기 때문에
class 형태:
class ClassName {
variable;
methods;
}
class 호출:
main function안에서: ClassName instanceName = ClassName(); 혹은 ClassName instanceName = new ClassName();
class의 method나 변수 사용:
instanceName.method();
instanceName.variable;
Constructor: class에서 받을 수 있는 parameter
선언방법: class안 어디서든 선언가능. ClassName();
parameter추가: ClassName(value): this.variable = value; 혹은 줄여서 ClassName(this.variable); 로도 가능
parameter로 가져온 variable은 method안에서 variable 앞에 this.을 붙여서 this.variable로 사용가능.
Named Constructor
선언방법: class안에서 ClassName.fromList(List values): this.variable = values[0]; 그리고 main함수에서
ClassName instanceName = ClassName.fromList([values]);
혹은
className({required this.variable}); 로도 가능, 이땐 main함수에서
ClassName instanceName = ClassName(variable: value);
- 특정한 constructor
- ClassName.contructorName({required type variable}): this.variable = variable;
- main함수에서는 ClassName instanceName = ClassName.constructorName(variable);
- 이렇게 하면 class 안에서도 종류를 나눌 수 있다.
Cascade Notation
- instance의 변수들을 바꾸고 싶을 때
ex)
ClassName instanceName = ClassName(variables);
instanceName.variable = newVariable;
instanceName.variable2 = newVariable2;
와 같이 class instance의 변수를 바꾸고 싶을때 새로운 값을 넣어주면 되는데 이걸 조금 더 줄여서
ClassName instanceName = ClassName(variables)
..instanceName.variable = newVariable
..instanceName.variable2 = newVariable2;
로 만들 수 있다
혹은
var newInstanceName = instanceName
..newInstanceName.variable = newVariable
..newInstanceName.variable2 = newVariable2;
로 나중에 만들 수도 있다.
Immutable:
class안에서 한번 선언한 변수를 다시 못 바꾸게 변수 앞에 final 붙이기
class안에 있는 constructor 앞에는 const 붙이고 class를 부를때도 앞에 const붙이기
ex) ClassName instanceName = const ClassName(blah blah blah);
*class를 부를 때 앞에 const를 붙이면 똑같은 값을 가진 class instance는 모두 같다.
ex) ClassName instanceName = const ClassName(variable);
ClassName instanceName2 = const ClassName(variable);
// then, instanceName == instanceName2
Getter / Setter
- Getter 데이터 가져올 때, Setter 데이터 설정할 때
- Setter 사용하려면 const, final 지우기(변수를 바꾸기 위해서)
- Getter: returnType get item{return value;}, main 함수에서 instanceName.item;으로 value를 가져올 수 있다.
- Setter: 하나의 parameter만 가능. class안에 있는 this.variable을 바꿀 수 있다.
ex) set item(String item1){
this.variable = item1;
}
- item을 지정해 줄 때는 main함수에서 instanceName.item = 'item name'; 으로 parameter 값을 넣어줄 수 있다.
Private variable
- 그 파일 안에서만 사용가능한 변수(외부에서 가져올 수 없다)
- class를 private으로 바꾸려면 class _ClassName{} 으로 해주면 된다 (앞에 _붙이기).
- method, class, variable 다 가능
Inheritance 상속
- 부모 class의 properties를 자식 class가 받는다
- class ChildClass extends ParentClass{} 로 상속받을 수 있음
- constructor에서도 super를 사용해서 parameter를 불러와야 된다 -> ChildClass(type variables): super(variables);
- 만약 parentclass constructor에서 named parameter로 되어있다면 super(variables); 이 부분을 variables: variables로 넣 어줘야됨
- 끝에 있는 variables: variables는 Parentclass에 있는 variables에 childclass의 variables를 넣어주는 것
- childClass is ParentClass, but ParentClass is! childClass
Method Overriding
- @override 로 parentclass의 메소드(함수)를 덮어씌울 수 있다.
ex) @override
int calculate() => super.calculate() *2;
- super.calculate() 는 parentclass에 있는 calculate 메소드 이다
Static
- instance가 아니라 class에 귀속된다, 그러므로 모든 instance에 적용된다. class에서 다이렉트로 부르고 사용할 수 있다.
- static type? variableName; 으로 만들 수 있다.
- 이 class안에 있는 static변수를 바꾸려면 main함수에서 className.variableName = value; 를 사용하면 된다.
- 이때 instanceName이 아닌 className만으로 바꿀 수 있다.
- static method도 똑같이 main함수에서 className만으로 실행시킬 수 있다.
Interface
- 상속과 비슷
- class를 만들 때 무조건 이렇게 만들어야 된다라는 틀을 잡아준다
- inheritance 에서는 extends를 사용하듯, interface에서는 implements를 사용
- abstract를 사용하면 그 interface를 instance로 사용하지 못한다, abstract로 만들면 method의 body를 지워도 된다
ex)
abstract class InterfaceEx{
String name;
InterfaceEx(this.name);
void sayName(){}
}
class Child implements InterfaceEx{
String name;
Child(this.name);
void sayName(){ print('제 이름은 $name 입니다);}
}
Generic
- 타입을 외부에서 받을 때 사용
- class안에 있는 변수의 타입을 외부에서 정해줄 때는 class ClassName<Type> {final Type variable;}으로 해주고 외부에서 ClassName<Type> instanceName = ClassName(); 처럼 타입을 정해주면 된다.
Mixin
- inheritance 와 비슷하지만 with를 사용하며 contructor 가 없다
ex)
class Fast{
void printFast(){
print("im fast");
}
}
class Player with Fast{
blah blah blah
}
이렇게 with 로 붙여놓으면 main함수에서 만든 instance에 Fast에 있는 메소드와 변수를 사용가능하다
댓글