Dart 객체 지향 프로그래밍(OOP) 기본 개념 학습
클래스 / 객체 / 인스턴스 변수 / static 변수
메서드 / static 메서드
생성자(기본 생성자, 매개변수 생성자, 네임드 생성자)
제네릭 클래스
상속, super, override, final class
예시) Person, Circle, Car, Vehicle
클래스(Class): 객체의 설계도, 틀
객체(Object): 클래스로 찍어낸 실제 데이터(붕어빵 틀 vs 붕어빵 비유)
인스턴스 변수
각 객체가 서로 다른 값을 가질 수 있는 변수
객체가 살아 있는 동안 유지 (life cycle = 객체 생명 주기)
지역 변수
메서드/블록 안에서만 쓰고 끝나는 잠깐 쓰는 변수
정적 변수(static)
클래스에 속하는 변수
클래스명.변수로 접근
모든 객체가 값을 공유
요약:
객체마다 다른 값 → 인스턴스 변수
모든 객체가 같이 쓰는 값 → static 변수
인스턴스 메서드
객체 기준 동작 정의
내부에서 인스턴스 변수, static 변수 모두 사용 가능
정적 메서드(static)
클래스명.메서드()로 호출
객체 없이 동작해야 할 때 사용
내부에서 인스턴스 변수 사용 불가
기본 생성자 : 매개변수 없는 기본 형태 (Car())
매개변수 생성자 : Car(this.name, this.models);
네임드 생성자 : Car.fromList(...) 처럼 이름 붙여주는 생성자
→ 다양한 초기화 패턴을 제공할 때 유용
핵심 포인트:
객체 생성 시 반드시 인스턴스 변수가 초기화 되어 있어야 함
생성자는 반환 타입이 없고 클래스 이름과 동일
형태: class Box< T > { T value; ... }
하나의 클래스 템플릿으로
Box< int >, Box< String > 등 다양한 타입을 재사용 가능
타입에 의존적이지 않게 만들어서 재사용성과 안전성을 동시에 챙김
기본 형태:
class Child extends Parent { ... }
부모 → 자식으로 속성과 메서드 상속
super 키워드로 부모의 변수/메서드에 접근
@override 로 메서드/속성 재정의 가능
그대로 쓰기 싫으면 덮어쓰기
super.method()로 기존 동작 + 추가 기능도 가능
final class : 더 이상 상속 불가능한 클래스
OOP 요약:
공통된 속성과 동작은 상위 클래스에
다른 부분만 하위 클래스에 구현
→ 중복 줄이고, 재사용성 높이고, 구조가 깔끔해짐
처음에는 이해하기 쉬웠는데 갑자기 너무 많은 양의 정보가 들어오니까 과부하가 와서 정리 및 예제 풀이가 필요할 것 같다.