[Dart]객체지향 프로그래밍

Lia·2022년 8월 5일
0

🎯 Dart

목록 보기
1/3
post-thumbnail
post-custom-banner

oop-object oriented programming
클래스를 가지고 프로그래밍 하는것

클래스를 하나 정의 하고, 정의한 클래스를 사용하기 위해선 인스턴스를 만들어야 한다
클래스를 가지고 인스턴스를 생성하면 실제 해당되는 무언가를 만들 수 있다.
즉 class가 설계도면 인스턴스는 설계도를 바탕으로 실제로 만들수 있는 결과물->설계도를 기반으로 무한하게 생성할 수 있음

인스턴스에서 사용되는 다양한 기능들을 한 곳에 모아둔게 class

class를 통해서 프로그래밍 하는 것이 OOP
class 선언 하려면

void main() {
  
}
//Idol class
class Idol(class이름){
  
}

class사용법- 함수를 실행하는 것 처럼 인스턴스로 만들어서 사용
일단 클래스를 만든다

//Idol class
//name(이름)-변수
//member(멤버들)-변수
//sayHello(인사)-함수
//Introduce(멤버소개)-함수
class Idol{
  String name = '블랙핑크';
  List<String> members = ['지수','제니','리사','로제'];
  
  void sayHello(){
    print ('안녕하세요 블랙핑크입니다');
  }
  
  void introduce(){
    print('저희 멤버는 지수,제니,리사,로제가 있습니다.');
  }
}

만든 클래스를 이용하여 인스턴스를 만든다
클래스와 인스턴스의 차이
클래스는 설계서를 정의 해둔거 / 인스턴스는 설계서를 가지고 무한하게 만들수 있음

만들어놓은 Idol클래스로 인스턴스 만들기
Idol클래스로 인스턴스 만들기 위해서는 idol타입을 지정해줘야함

void main() {
 Idol blackPink(인스턴스이름) =new  Idol(); //dart에서 new는 생략가능함
blackPink. // 인스턴스 이름을 입력하고 . 을 붙이면 class에서 선언한 값들이 나온다 
}

이렇게 사용할 수 있음

void main() {
 Idol blackPink = Idol();

print(blackPink.name);
print(blackPink.members);
blackPink.sayHello(); // 함수실행
blackPink.introduce();  
}

class Idol{
  String name = '블랙핑크';
  List<String> members = ['지수','제니','리사','로제'];
  
  void sayHello(){
    print ('안녕하세요 블랙핑크입니다');
  }
  
  void introduce(){
    print('저희 멤버는 지수,제니,리사,로제가 있습니다.');
  }
}

그런데 이 Idol class의 문제는 class로 수많은 인스턴스를 생성할 수 있어야하는데 지금 현재로는 Idol class로 블랙핑크 인스턴스만 생성할 수 있다.
➡️파라미터를 받아서 함수의 중복적인 코드를 제거 할 수 있는 것 처럼 클래스에서도 파라미터를 받을 수가 있다. ‘constructor’(생성자)를 활용

constructor를 선언하는 방법
위치는 해당 클래스 내부면 됨.
1.클래스 이름을 입력한다. -> Idol(); // 가장 기본적인 constructor

2.()안은 함수로 치면 파라미터를 넣는 공간, constructor도 똑같이 파라미터를 입력할 수 있음->바꾸고 싶은것 ->name,members를 바꿔주면 매번 새로운 class를 생성하지 않아도 됨
->named파라미터와 포지셔널 파라미터를 모두 사용할 수 있음
Idol(String name, Listmembers)

3.이렇게 input을 받으면 현재 class안의 name과 members변수로 저장을 해줘야함
콜론을 입력하고 해당 클래스를 의미하는 this.입력
Idol(String name, Listmembers) : this.name = name;
//이 클래스의 name(this.name)에 다른 name(파라미터로 받은 name)을 넣어주겠다

  1. Idol();에 순서대로 파라미터를 넣어준다
    Idol blackPink = Idol(‘블랙핑크’ , ['지수','제니','리사','로제’], );
    이렇게 입력하면 class에서 선언한 부분을 지워도 됨
    ->외부에서 값을 받아 오기로 생성자를 선언 했기 때문에 !
void main() {
 Idol blackPink = Idol(‘블랙핑크’ , ['지수','제니','리사','로제’], );

print(blackPink.name);
print(blackPink.members);
blackPink.sayHello(); // 함수실행
blackPink.introduce();  
}
 
class Idol{
  String name ;
  List<String> members;
  
 Idol(String name, List<String>members)
:this.name = name,
this,members = members; //이렇게 하면 외부에서 name과 members를 받아서 class내부의 name과 members에 값을 넣어줄 수 있다.

  void sayHello(){
    print ('안녕하세요 블랙핑크입니다');
  }
  
  void introduce(){
    print('저희 멤버는 지수,제니,리사,로제가 있습니다.');
  }
}
 

새로운 인스턴스 bts를 만들어보자
마찬가지로 파라미터를 순서대로()에 입력한다.

void main() {
 Idol blackPink = Idol(‘블랙핑크’ , ['지수','제니','리사','로제’] );

print(blackPink.name);
print(blackPink.members);
blackPink.sayHello(); // 함수실행
blackPink.introduce();  

Idol bts = Idol( ‘bts’,[‘RM’, ‘진’, ‘슈가’ , ‘제이홈’, ‘지민’, ‘뷔’, ‘정국’] );
 print(bts.name);
print(bts.members);//얘네는 bts멤버가 잘나오지만
bts.sayHello(); //함수는 블랙핑크 값으로 나온다->class에서 그냥 String값으로 넣어놨기 떄문에 ! -> this를 사용하면됨 ${this.name}
bts.introduce();  
}
class Idol{
  String name ;
  List<String> members;
  
 Idol(String name, List<String>members)
:this.name = name,
this.members = members; //이렇게 하면 외부에서 name과 members를 받아서 class내부의 name과 members에 값을 넣어줄 수 있다.

  void sayHello(){
    print ('안녕하세요${this.name}입니다');
  } 
  
  void introduce(){
    print('저희 멤버는 ${this.mambers}가 있습니다.');
  }
}
 

-이렇게 설계서에 공통된 기능들만 작성해두고 변동되는 부분들을 constructor에서 파라미터로 받을 수 있다.

constructor 간결하게 만드는 법
Idol(this.name, this.members)

⭐️중요개념⭐️
상속을 하면 자식 클래스와 부모 클래스가 생기고, 부모클래스의 속성들이 자식속성들로 넘어간다.
자식클래스의 속성들은 부모 클래스로 넘어가지 않는다.
같은 자식 클래스끼리도 속성들을 공유하지 않는다.

📍참고자료

profile
꺾이지않기ᕙ༼*◕_◕*༽ᕤ
post-custom-banner

0개의 댓글