
class에 대한 설명을 찾다보면 계속 어려운 단어가 등장한다.
이 단어들의 의미를 아무리 gpt한테 물어보고 주변 사람들한테 물어봐도 도대체 와닿지가 않았다..
그런데 직접 클래스를 만들고 활용하니 조금은 이해에 도움이 되는 것 같아 예제를 공유하고 싶다.
일단!! 나에게 가장 와닿은 class의 정의는 다음과 같다.
"" class란 어떤 객체의 속성, 기능이 들어가 있는 설계서 이며
이 설계도로 정의된 속성, 기능대로 만들어진 것을 인스턴스라고 한다.""
class Person {String name; int age;
Person(this.name, this.age);
void printInfo() {
print('name: $name, age: $age ');
}
}
// Person 클래스 생성: name, age값을 가지고, printInfo라는 함수 기능을 가진 클래스
void main() {
var person = Person('John Doe', 30);
person.printInfo();
}
// 클래스의 기능 실행: Person이라는 class를 person 변수에 넣어, printInfo 함수를 실행
1) Person이라는 클래스, 즉 설계서가 생겼다.
2) 이 설계서에 따르면 Person 클래스는 이름과 나이라는 속성을 반드시 가지고, printInfo 라는 기능을 가진 무언가를 만들 수 있다.
3) 이 설계서를 활용해 person이라고 부르는 무언가를 만들었다.
=> "무언가"라고 부르는게 바로 인스턴스다.
5) 인스턴스 뒤에 .을 찍으면 Person 클래스에 있는 속성과 함수에 접근할 수 있다.
=> 멤버속성, 멤버함수라고 부른다.
✷ 클래스명은 대문자로 시작해야 하며, 클래스는 멤버 변수와 멤버 함수를 가질 수 있다.
class는 꼭 하나만 만들어야 되는 건 아니다. 다른 class를 또 만들 수 있고, 미리 만들어둔 클래스의 속성을 상속 받을 수 있다.
아래 예시를 보면, IronMan이라는 클래스가 있으나, 그 아래 IronManMK3라는 클래스를 또 만든 것을 볼 수 있다.
class IronMan {String name; int powerLevel;
IronMan(this.name, this.powerLevel);
void shoot() {
print('$name is shooting guns!');
}
}
// IronMan 클래스 생성
class IronManMK3 extends IronMan{
var flyheight;
IronManMK3(String name, int powerLevel, this. flyheight):super(name, powerLevel);
void shoot() {
print('$name is shooting laser!');
}
void fly(){
print('$name is flying in $flyheight');
}
}
// IronManMK3 생성: IronMan을 상속받음
void main (){
IronMan mk1 = IronMan('mk1',10);
IronManMK3 mk3 = IronManMK3('MK3',20,1000);
mk1.shoot();
mk3.shoot();
mk3.fly();
}
// 함수실행
조금 복잡하니 IronManMK3의 생성과 상속 과정을 차례로 살펴보면 아래와 같다.
class IronManMK3 extends IronMan{
var flyheight;
IronManMK3(String name, int powerLevel, this. flyheight):super(name, powerLevel);
void shoot() {
print('$name is shooting laser!');
}
void fly(){
print('$name is flying in $flyheight');
}
}
IronManMK3는 IronMan에게 상속을 받는다.
void main (){
IronMan mk1 = IronMan('mk1',10);
IronManMK3 mk3 = IronManMK3('MK3',20,1000);
mk1.shoot();
mk3.shoot();
mk3.fly();
}
class를 안 쓴다고 오류가 나는 것도 아니고, 복잡한데 왜 쓰지? 라는 질문을 누군가했다.
class를 쓰는 궁극적인 이유는 무엇인지 생각해보아야 한다.
다트는 객체지향 언어이다! 그럼 이 객체지향 언어가 왜 탄생했을까?
클래스를 만들어 현실세계와 동일한 느낌의 객체를 만들면, 사람이 이해하기 쉬운 코드가 되기 때문이다.
즉, 인간세상과 코드를 동일하게 만들어 이해를 쉽게 하기 위해 탄생한 것이 객체지향이다.
클래스를 쓰면 가독성과 재사용이 좋아진다는 장점이 분명히 있기도 하지만, 다트 자체가 객체지향 언어이기 때문에 그 목적에 맞게! 클래스를 써야 하는 것이다.