안녕하세요 성장형 개발자입니다.
플러터 공부 중입니다
오늘 공부한 내용을 적어보았습니다
공부한 내용 : flutter 객체지향 프로그래밍
ㅇ 필요성
-> 서로 밀접한 관계가 있는 함수와 변수를 묶어두면 코드 관리가 용이
-> 클래스(설계도), 인스턴스(설계도를 통해 실제로 만들어진 것)
1. 클래스
ㅇ 기본
-> 멤버 변수 : 클래스에 종속된 변수
-> 메서드 : 클래스에 종속되는 함수, 클래스의 기능을 정의한 함수
-> this 키워드 : 클래스 내부의 속성을 지칭하고 싶을 때, 현재 클래스를 의미
-> 스코프 안에 같은 속성 이름이 하나만 존재하면 this 생략 가능
ㅇ 생성자
-> 클래스의 인스턴스를 생성하는 메서드(설계도의 실제물건을 생성하는 기능)
-> 생성자에서 입력받을 변수 -> 일반적으로 final로 선언(인스턴스화한 다음에 혹시라도 변수의 값을 변경하는 실수를 막기 위함)
ㅇ 프라이빗 변수
-> 다트에서의 프라이빗 변수는 다른 언어와 정의가 약간 다름
-> 일반적 : 클래스 내부에서만 사용하는 변수를 칭함
-> 다트 : 같은 파일에서만 접근 가능한 변수 (다른 파일에서는 접근 불가)
-> '_변수명' 의 형태로 프라이빗 변수 선언 가능
2. 상속
ㅇ 공유되는 기능을 상속받는 개념
ㅇ extends 키워드 사용
ㅇ 어떤 클래스의 기능을 다른 클래스가 사용할 수 있게 하는 기법
ㅇ 부모 클래스 : 기능을 물려주는 클래스
ㅇ 자식 클래스 : 물려받는 클래스, 부모 클래스의 모든 기능을 상속받는다.
ㅇ 현재 클래스를 지칭하는 this, 부모클래스를 지칭하는 super(부모클래스에 기본 생성자가 있기때문에 부모클래스의 생성자를 실행해줘야함)
ㅇ 부모 클래스에 공통으로 사용하는 변수와 메서드를 정의하면 자식 클래스들은 해당 값들을 사용할 수 있어 중복 코딩이 필요없어짐
3. 오버라이드
ㅇ 부모 클래스 or 인터페이스에 정의된 메서드를 재정의할 때 사용
ㅇ 다트에선 override 키워드 생략 가능 -> 직접 명시하는 게 협업 및 유지보수에 유리
4. 인터페이스
ㅇ 공통으로 필요한 기능을 정의만 해두는 역할
ㅇ 다트에는 인터페이스를 지정하는 키워드는 따로 없음
ㅇ implement 키워드 사용
ㅇ 반드시 모든 기능을 다시 정의해줘야 함 (애초에 반드시 재정의할 필요가 있는 기능을 정의하는 용도)
5. 믹스인
ㅇ 특정 클래스에 원하는 기능들만 골라넣을 수 있는 기능
ㅇ 특정 클래스를 지정해서 속성들을 정의할 수 있음
ㅇ 지정한 클래스를 상속하는 클래스에서도 사용 가능
ㅇ 인터페이스처럼 한 개의 클래스에 여러 개의 믹스인을 적용할 수 있음(여러 믹스인을 적용하고 싶으면, 기호로 열거)
ㅇ with 키워드 사용
6. 추상
ㅇ 상속이나 인터페이스로 사용하는 데 필요한 속성만 정의하고 인스턴스화할 수 없도록 하는 기능
ㅇ 따로 인스턴스화할 일이 없다면 추상 클래스로 선언해서 인스턴스화를 방지하고, 메서드 정의를 자식클래스에 위임할 수 있음
ㅇ 추상 메서드를 선언할 수 있음 -> 함수의 반환 타입, 이름, 매개변수만 정의하고 함수 바디의 선언을 자식 클래스에서 필수로 정의하도록 강제함
ㅇ 추상 클래스는 선언까지만 해주면 됨
ㅇ abstract 키워드 사용
ㅇ 추상 클래스를 사용하는 클래스에서 추상 클래스에 적용된 메서드를 하나라도 정의하지 않으면 에러 발생
ㅇ 부모 클래스를 인스턴스화할 일이 없고, 자식 클래스들에 필수적으로 또는 공통적으로 정의돼야 하는 메서드가 존재할 때 사용
ㅇ "추상 클래스는 인스턴스화가 필요 없는 공통 부모 클래스를 만들 때 사용한다"
7. 제네릭
ㅇ 클래스나 함수의 정의를 선언할 때가 아니라 인스턴스화하거나 실행할 때로 미룸
ㅇ 특정 변수의 타입을 하나의 타입으로 제한하고 싶지 않을 때 자주 사용
ㅇ Map, List, Set 등에서 사용한 <> 사이에 입력되는 값
ㅇ T : 변수타입 표현, E : 리스트 내부 요소들의 타입 표현, K : 키를 표현, V : 값을 표현
8. 스태틱(정적)
ㅇ static 키워드 사용
ㅇ 클래스 자체에 귀속, 다른 변수와 메서드 등 모든 속성은 각 '클래스의 인스턴스'에 귀속
ㅇ 클래스에 직접 귀속되기 때문에 생성자에서 static값을 지정하지 못함
ㅇ 인스턴스끼리 공유해야 하는 정보에 지정하면 됨
9. 캐스케이드 연산자
ㅇ 인스턴스에서 해당 인스턴스의 속성이나 멤버 함수를 연속해서 사용하는 기능
ㅇ .. 기호 사용
ㅇ 더 간결한 코드 작성 가능
* 플러터의 모든 위젯은 객체지향 프로그래밍을 통해 구현
-> 위 내용을 제대로 이해하는게 매우 중요
-> 객체지향 프로그래밍을 통해 중복 코드를 줄이고 정리가 잘된 효율적인 코드를 작성하는 건 개발자의 필수 덕목
- 저자
- 최지호(코드팩토리)
- 출판
- 골든래빗(주)
- 출판일
- 2023.01.01
'개발기록 > Flutter' 카테고리의 다른 글
[flutter log] 플러터 기본 위젯 (0) | 2023.01.17 |
---|---|
[flutter log] 플러터 소개 및 구조 (0) | 2023.01.17 |
[flutter log] 다트 비동기 프로그래밍 (0) | 2023.01.11 |
[flutter log] 기초 문법 (0) | 2023.01.10 |
[flutter log] flutter를 하게 된 계기 및 계획 (0) | 2023.01.09 |