본문 바로가기
공부/Dart & Flutter

다트 기초 - OOP(객체지향 프로그래밍)

by 매니션 2024. 12. 3.

List (대문자)

List<타입> 변수명 = ['값1', '값2', '값3'];

List<String> name = ['짱구','철수','훈이','유리'];
List<int> numbers = [1,2,3,4,5];


index

0부터 시작


class

변수. < 마침표 찍으면 쓸 수 있는 클래스가 나옴
name.length < 갯수 체크

name.add('맹구');
name.remove('철수');
name.indexOf('짱구'); = 0


Map

key 와 value 둘 다 있어야함
Map<key의 타입, value의 타입> 변수명 = {key:value , key2:value}

  Map<String,bool> isHarryPotter = {
    'Harry' : true,
    'Ron' : true,
  };


Map에서 값 추가
1. addAll

isHarryPotter.addAll({
  'malfoy': true
});


2.[] 원하는 키의 값
추가 or 변경 가능

isHarryPotter['Hulk'] = false;



Map에서 값 삭제

isHarryPotter('Harry')
isHarryPotter.keys
isHarryPotter.values

 

Set

List는 중복가능, Set 중복불가
중복이여도 오류x, 자동으로 삭제

final Set<String> name = {}


add추가 / remove 삭제 / contains 유무확인


조건문

- if문
- switch문

switch(조건){
  case 0:
    0일때 실행
    brake;
  case 1:
    1일때 실행
    brake;
  default:
    기본 실행
    brake;
}


반복문(loop)

- break : 반복문 종료
- continue : 현재 반복 종료 후 다음 반복 실행
- for문

for(int item in List){}


- while문

while(total < 10){
  실행
  if(조건){break;}
}

 

enum

상태 선언
효과: 오타방지, 상태가 이것만 존재함을 제약
void main 바깥에 선언

enum Status(함수명){ 
  approved, // 승인
  pending, //대기
  rejected, // 거절
}

void main(){
  Status  stt = Status. // 자동완성됨
}

 

 함수

parameter / argument = 매개변수
positional parameter : 순서가 중요한 파라미터
[optional parameter] : 있어도 되고 없어도 되는 파라미터
named parameter : 이름이 있는 파라미터(순서 상관없음)
arrow function : 화살표함수

반환하려면 return / 함수명 앞에 반환타입

- optional parameter 사용법

test(int x, [int y = 20, int? z]){
  // y 기본값은 20, z는 null 가능
}



- named parameter 사용법

함수명({
  required int x,
  required int y,
  int z, // optional parameter로 사용하려면 ?나 기본값 넣기
})


실행시 파라미터에 이름을 넣어야함.
함수명(y:20, x:10, z:30);

-arrow function (화살표함수)
함수=> 반환값

typedef Poeration 

- 타입이 일치해야함(시그니처라 부름)


객체지향 프로그래밍(OOP)

최상위에서 object를 상속받기 때문에 OOP라고 부름

클래스 : 기본 정의
인스턴스 : 클래스를 이용해 만든 것 
immutable(이뮤테이블) 프로그래밍 : final키워드를 이용해 변수를 변경 불가하도록 만드는 것을 권장(버그방지)

const : constructor에 많이 사용
const를 붙이고 내용이 같으면 같은 인스턴스로 인식됨. 


getter / setter : 데이터 가져올 때 / 설정할 때

- getter : 함수와 기능은 비슷하지만 단순히 값을 가져올 때 사용
get firstMember{} // 중괄호만 사용

- setter : immutable programming에 어긋나서 거의 사용하지 않음
set firstMember(String name){ // 파라미터 무조건 1개
}


프라이빗 속성 

언더스코어 사용
클래스,변수, 함수 앞에 _를 붙이면 현재 파일에서만 사용 가능(외부에서 불러올 때 쓰지 못하도록 막음)


상속(inheritance)


부모클래스
자식클래스 : 부모클래스의 모든 기능 사용 가능


메소드 오버라이드(method override)

메소드란 : 클래스 내부에 있는 함수
오버라이딩 : 덮어쓰다(우선시하다) / 상속한 값에만 가능
@override (골뱅이필수)

void main() {
  numTwo a = numTwo(2);
  print(a.cal());
  
  numFour b = numFour(4);
  print(b.cal());
}

class numTwo {
  final int num;
  numTwo(
    // construct
    this.num,
  );

  // method
  int cal() {
    return num * 2;
  }
}

class numFour extends numTwo {
  numFour(
    int num,
  ) : super(num);
  
  @override
  int cal() {
    return super.cal() * 2;
  }
}

 

static

- static은 instance에 귀속되지 않고 class에 귀속된다.
- 하나만 변경해도 모든 변수 변경되어 적용됨


인터페이스(interface)

- 형식(시그니처)를 유지(강제)하기 위해 사용
- 함수 안에 정의하지 않아도 됨. 
- class 똑같이 사용.
- 인터페이스는 형태만 강제하기 위해 만드는 것이기 때문에 변경하면 안됨.
- 변경을 방지하기 위해 추상화(abstract) 사용

- abstract안의 함수는 바디{} 지워도 됨.

// 인터페이스
abstract class A { 형태1, 형태2 }
class B inplements A{ 형태1=name, 형태2=num}

 

ganeric : 타입을 외부에서 받을 때 사용

클래스 이름 옆에 명시

void main(){
  test<String> test = test('aa',123);
}
class test<A>{
  final T id;
  final int num;

  tset(this.id, this.name);
}

 

반응형

'공부 > Dart & Flutter' 카테고리의 다른 글

다트 기초 - 함수형 프로그래밍  (7) 2024.12.05
다트 기초  (0) 2024.11.27

댓글