오.. 드디어 나도 클래스 정리 하는 날! 요즘 벨로그 쓰는게 나쁘지 않다고 생각이 든다 후훗..!
class 설계도
instance 결과물
보통 이런 늬앙스로 많이 얘기하는거 같다. 솔직히 예시코드를 보고 따라서 작성 하면서 react만 사용하느라 클래스는 1도 몰랐던 나도 감이 조금씩 잡혀와서 신기했다.
void main () {
Idol bigbang = Idol();
bigbang.sayHello();
// 안녕하세요 저희는 빅뱅입니다
}
class Idol {
String name = '빅뱅';
List<String> members = ['탑','지드래곤'];
void sayHello() {
print('안녕하세요 저희는 빅뱅입니다');
}
}
위에 예시처럼 sayHello() 함수가 잘 실행 되는 것을 볼수 있다 하지만, 위에처럼 하다보면 빅뱅으로만 인스턴스를 생성할수 밖에 없는 문제가 있다.
그래서 이번에 다뤄볼 것은 클래스에다가 파라미터를 받는 형식이다.
void main () {
Idol me = Idol('김무개', ['김아무개','강아무개']);
print(me.name); // '김무개'
}
class Idol {
String name;
List<String> members;
Idol(String name, List<String> members)
: this.name = name,
this.members = members;
void sayHello() {
print('안녕하세요 저희는 ${this.name} 입니다');
}
}
위에서 this 는 클래스를 뜻하고 파라미터로 받은 값을 this.name 으로 넣어주는 것이다.
다음으로는
네임드 컨스트럭트는 기본 컨스트럭트 에다가 이름을 넣어주면 된다.
void main () {
Idol bts = Idol.fromList(
[
['RM','진'],
'BTS'
]
);
print(bts.name); // BTS,
bts.sayHello() // 안녕하세요 저희는 BTS 입니다
}
class Idol {
String name;
List<String> members;
Idol.fromList(List values): this.members = values[0], this.name = values[1];
void sayHello() {
print('안녕하세요 저희는 ${this.name} 입니다');
}
}
네임드 컨스트럭트를 통해서 파라미터를 받을수도 있다,
immutable 프로그래밍 - 개발자들은 한번 선언할 걸 바꾸고 싶지않다.
final 을 붙여주기 class 의 변수들을 final로 선언하는 습관들이기
추가로 constructor 앞에 const 를 붙여줄수 있다. const 를 붙여주는 순간 인스턴스 생성 할때도 const를 붙여주면 된다.
void main () {
Idol me = const Idol('김무개', ['김아무개','강아무개']);
print(me.name); // '김무개'
}
class Idol {
String name;
List<String> members;
const Idol(String name, List<String> members)
: this.name = name,
this.members = members;
void sayHello() {
print('안녕하세요 저희는 ${this.name} 입니다');
}
}
const 는 빌드타임에 값을 알아야 선언이 가능하다, 만약 dateTime.now 같은 값을 toString 해서 넣는다고 해도 빌드타임 으로는 선언이 불가능 하기때문에 const constructor로 만들수가 없다. 이렇게 만들면 좋은점은 효율이 좋다.
void main () {
Idol me = const Idol('김무개', ['김아무개','강아무개']);
Idol me2 = const Idol('김무개', ['김아무개','강아무개']);
여기서 두개의 인스턴스는 같은가?
print(me == me2) // false
두개가 다르다.
}
인스턴스를 생성을 하면은 컴퓨터 메모리 부분에 새로 올라간다.
아무리 값이 똑같아도 다르다!
여기서 재밌는 점은 const constructor 를 사용해서 만들 경우 똑같은 값으로 인지하게 된다.
너무 간단하지만 그래도 빼먹을 수는 없을 꺼 같다.
void main() {
Idol bts = Idol( 'bts' ,['진','RM']);
print(bts.firstMember); // 진
bts.firstMember = '랩몬';
// set 하는 과정 = 로 넣어준다
print(bts.firstMember); // 랩몬
}
class Idol {
final String name;
final List<String> members;
Idol(
this.name,
this.members,
);
// getter
String get firstMember{
return this.members[0];
}
// setter 세팅 하다
set firstMember(String name) {
this.members[0] = name;
}
}
getter를 사용하는 이유, 함수로 만들면 괄호를 열고 닫아야 하기 때문에, 크게 늬앙스 차이 데이터를 간단하게 가공할때 사용,
함수는 로직이 많이 들어가는 상황에 사용한다.
현대 프로그래밍에서 세터는 굉장히 쓰이지 않는다, final 생각.. 위에서 언급한 immutable 프로그래밍 을 생각하면 아하! 라고 할 것이다.
오늘은 이정도 까지 하고 다음은 클래스 2탄 정도로 생각할꺼 같다.