본문 바로가기
카테고리 없음

플러터 공부 Day 2: OOP

by 벡터[x,y] 2023. 4. 5.
반응형

[분류 전체보기] - 플러터 공부 시작 Day 1

 

플러터 공부 시작 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에 있는 메소드와 변수를 사용가능하다

반응형

댓글