우당탕탕 무작정 앱 개발하기

일반인의 Flutter 앱개발 9. Dart(Class static, interface, abstract, generic, OOP)

간다간다숑간다 2022. 10. 10. 23:36
728x90

기초는 얼마나 남았을까?

앞으로 보려고 하는 영상이 2강 남았다. 지금 보는 이 영상도 오늘 포스팅이 끝나면 끝날지도 모르겠다. 제발

새벽 근무라 첫 문장 쓰고 잠깐 눈 붙이고 왔더니 2시간이 지나있었다.

쓸데없는 라임이 떠올라 끄적였으나 부끄러워 접어뒀다.

나의 부끄러움이 당신의 부끄러움으로 되지 않을 것 같다고 자신하는 사람만 열어보길.

더보기

잡설은 각설
이제는 본론으로 예썰

Static

static

당신이 항마력이 있던 없던 Static은 배워야 한다. 바로 예를 들면서 시작해보자.

우리는 미래에 사장님이 될 거니까 오늘은 사장님이 되어 아르바이트생을 관리하는 클래스부터 시작한다.

주석에도 달아놨듯이 'static은 instance에 귀속되지 않고 class에 귀속된다'.라고 써놨는데 

이제 이런 글을 봐도 느낌이 바로 오지 않는가?

이전이었다면 '대체 뭔 소리를 하는 거야'라고 했을 텐데 이제는 다르다.

클래스를 만들어줬고 함수까지 만들어주자.

static

이제 Instance에 귀속된다는 의미를 보겠다.

static
레드벨벳이 알바를 해줄리 만무하지만 예능에 나온셈 치자.

'seulgi'와 'chorong' 인스턴스를 만들고 각각의 이름을 부여해줬다.

'슬기'는 이름을 다시 '우당탕탕'으로 바꿔줬다.

그러고 나서 'seulg'i와 'chorong'의 이름과 빌딩을 출력해보면?

더보기
static
null로 나오는 것은 building의 값을 아직 지정하지 않아서 그렇다.

seulgi.name은 우당탕탕으로 되었고 chorong.name은 초롱으로 제대로 나오는데

instance에 따라 값이 달라지는 name은 바로 instance에 귀속되었기 때문에 그렇다.

 

static

building을 static으로 해주었더니 'Employee.'을 했을 때 builind을 선택할 수 있는 것이 보이는가?

static이 아니라면 building은 보이지 않는다. 믿어보자. 혹시나 해서 내가 해봤다.

이제 static으로 빌딩에 값을 입력하고 테스트를 해보자.

static

용산에 입성하자는 의미에서 드래곤시티로 해봤다.

결과는?

static

내가 아무리 인스턴스를 만들고 늘려도 class에 귀속된 bulding은 계속 같은 값을 출력해 주는 것이다.

 

결론
Instance에 귀속된다 = Instance를 실행하거나 만들 때 값이 정해져서 반영 가능
Class에 귀속된다 = Class에 직접 '.'으로 접근해서 값을 넣어서 반영 가능하여 모든 Instance에 적용

갑자기 오늘 와서 'Instance에 귀속된다'니 뭐니 하고 있긴 한데 지금껏 우리가 하고 있던 게 Instance에 귀속시켜서 해왔던 일이고 오늘은 'static을 사용하여 class에 귀속된다'라는 것만 알고 넘어가면 되겠다.

 

아 잠깐만, 초보자들은 flutter를 쓸 때 static을 몰라도 아무 문제가 없다고 한답니다. 여러분. 이 정도만 이해하면 된대요


Interface

이번 시간은 상속과 비슷? 한 거 같은 Interface다. 

실전 예제로 바로긔

기획사 사장이 되어 봤다.

특별한걸 안 넣고 이렇게 한 이유는 이 IdolInterface라는 형태를 이용해서 다른 Class들이 강제로 

사용하게 할 것이라 그렇다. 

BoyGroup에는 에러 메시지가 났고 implements는 처음 본다. 'implements'는' interface'를 쓸 때 쓰는 키워드다.

에러 메시지는

name과 sayName을 지정해 주라는 에러 메시지인데 이 에러 메시지를 없애려면

interface를 똑같이 맞춰줘야 한다.

 

똑같이 맞춰줬더니 에러가 사라졌다

이렇게 Interface를 사용하면 개발자들끼리 협업을 할 때 내가 정해놓은 Interface를 쓰게 지정해 놓는다면

이야기를 하지 않아도 다른 사람들은 해당 Interface를 써서 어떤 값들을 Class안에 넣어놔야 하는지 쉽게 알 수 있다

라고 한다. 안 해봐서 모름

GirlGroup도 만들어 보자.

name에 주석처리를 해서 Interface를 다르게 하니 같은 틀이 아니라며 에러가 나는 걸 볼 수 있다.

 

출력 결과는 잘 나올 것이다.

결론
상속(Inheritance) = 자식 Class에게 변수와 기능을 물려주는 것.
인터페이스(Interface) = 나와 같은 구조를 쓰게만 하도록 하는 것.

abstact

혹시나 공부하면서나 공부 이전에 코딩하는 걸 봤다면 abstract를 여러 번 보지 않았는가?

이번은 바로 그 시간이다. 어렵지 않은데 엄청 중요하니 빠르게 배워보자.

Interface로 쓰고자 하는 Class는 Instance로 쓰면 안 되는데 선언이 되긴 한다.

그렇기에 앞에 'abstract'를 써주면 이것은 interface로만 쓰자 라는 말이 되기 때문에 써두면 좋다.

abstract로 못을 박아뒀기에 IdolInterface를 Instance화 하려는 시도는 에러로 막혔다.

abstract 많이 쓰니까 꼭 기억해 두자

상속의 개념과도 비슷하다


generic

여러분 오늘 이거 진짜 마지막이다. 포기하지 말아라 금방 끝난다. 이거 쉬워요.

generic = type을 외부에서 받을 때 사용

바로 예제 긔

runtimeType은 해당 변수의 타입을 반환해준다.

generic으로 해줄 때는 class 이름 뒤에 <>을 해준다. 이거 어디서 많이 보지 않았는가? List에서 봤었다.

List<String> 이렇게 해줬지 않는가? 이때 이 String도 사실 generic이었다. 프로그래밍의 세계는 놀랍다...

 

자 다시 돌아와서. 

<> 안에는 내 마음대로 정해주면 되기에 나는 'myType'이라고 대충 정했다. 이제 'id'라는 변수는 외부에서 지정해주는

형태로 Type이 정해진다. 다음 예시를 보자.

lecture1은 String, lecture2는 int의 형태로 받았다.

결과는


이제 OOP(Object Oriented Programming)가 뭔지 알려주겠다

오늘은 이게 마지막이다. 사실 generic에서 마지막이라고 썼는데 강의에서 하나 더 나오길래 얼른 올라가서 마지막이라는 말을 지웠다.

 

Test라는 class를 만들어 본다. t로 instance화를 시키고 '.'을 눌러보니 아무것도 없던 Test Class안에 4가지의 기능들이 

들어있다. 이것은

모든 Class는 Object라는 class를 부모로 갖고 있기 때문이다. Object안에 저 기능들도 들어 있는 것이다.

허무한가? 그래서 Object Oritented 인 것이다. ^^

 

이제 강의 두 개 남았다. 함수형 프로그램이랑 비동기 프로그래밍이 남았는데 나 이거 두개 끝나면 진짜

안드로이드 스튜디오 킨다. 말리지 말아라 진짜.

틀린 점이나 궁금한 점이 있으면 댓글로 알려달라.
입문자라 아무것도 모르고 이상한 소리를
썼을 가능성이 매우 매우 농후하다.
궁금한 점은 댓글로 토론하며 정답을 찾아보자.
코드팩토리님의  Dart강의를 보고 공부 중입니다.

 

728x90