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)을 넣어주겠다
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)
⭐️중요개념⭐️
상속을 하면 자식 클래스와 부모 클래스가 생기고, 부모클래스의 속성들이 자식속성들로 넘어간다.
자식클래스의 속성들은 부모 클래스로 넘어가지 않는다.
같은 자식 클래스끼리도 속성들을 공유하지 않는다.
📍참고자료