학습 목표
1. dart 상속에 대한 개념을 알아 보자.
2. 부모 클래스에 사용자 정의 생성자가 있는 경우
3. 상속을 사용하지 말아야 하는 경우
1. dart 상속에 대한 개념을 알아 보자.
상속은 객체 지향 프로그래밍에서 중요한 개념 중 하나로, 이미 정의된 클래스(부모 클래스 또는 슈퍼 클래스)의 특성과 동작을 다른 클래스(자식 클래스 또는 서브 클래스)가 물려받는 것을 말합니다. 상속을 통해 코드의 재사용성이 증가하고 클래스 간의 계층 구조를 구성할 수 있습니다.
상속에 장점
코드의 재사용성을 높이고 중복 코드를 줄입니다.
프로그램을 더 나은 방식으로 설계하는 데 도움이 됩니다.
코드를 단순화하고, 유지 보수에 드는 시간과 비용을 절약할 수 있습니다.
실행에 흐름을 파악해보자
자바에서의 대표적인 메모리 영역
- Stack 영역
- 메소드 호출 시 지역 변수, 매개변수, 메소드 호출 정보 등이 저장됩니다.
- 메소드가 호출될 때마다 스택 프레임이 생성되며, 메소드가 종료되면 해당 스택 프레임이 제거됩니다.
- 스택은 빠른 접근과 해제가 가능하며, 주로 작은 크기의 데이터와 메소드 호출 정보를 저장합니다.
- Heap 영역
- 동적으로 생성된 객체들이 저장되는 영역입니다.
- new 연산자를 통해 생성된 객체나 배열은 heap 영역에 할당됩니다.
- GC(Garbage Collector)에 의해 관리되며, 더 이상 참조되지 않는 객체는 메모리에서 해제됩니다.
- Method Area (Static 영역 ):
- 클래스 정보, 메소드 코드, static 변수 등이 저장되는 영역입니다.
- 모든 클래스의 정보와 static 멤버들이 저장되며, JVM이 실행될 때 클래스 정보가 로드됩니다.
- Constant Pool (데이터(상수) 영역):
- 상수, 리터럴, static final 필드 등이 저장되는 영역입니다.
- 문자열 리터럴, 숫자 리터럴, final 필드 값 등이 저장됩니다.
- JVM이 실행될 때 클래스 정보와 함께 로드됩니다.
- 메모리 절약을 위해 상수들은 중복 저장되지 않고, 중복 사용 시에는 같은 상수를 참조합니다.
- Native Method Stack:
- 네이티브 코드(C, C++ 등)와 관련된 정보가 저장되는 영역입니다.
- 자바 코드에서 호출하는 네이티브 메소드의 정보를 저장합니다.
- PC Register:
- 현재 수행 중인 JVM 명령의 주소가 저장되는 영역입니다.
dart 에서 대표적인 메모리 영역
Dart는 다른 몇몇 언어와는 조금 다른 메모리 모델을 가지고 있습니다.
- Stack: 함수 호출과 관련된 지역 변수 및 함수 호출 정보가 저장되는 영역입니다. Stack은 일반적으로 빠르게 접근 가능하며, 함수가 호출될 때마다 생성되고 종료될 때 제거됩니다.
- Heap: 동적으로 할당되는 데이터 및 객체들이 저장되는 영역입니다. 객체들은 힙에 할당되며, 가비지 컬렉터에 의해 관리됩니다.
- Isolate: Dart 언어에서는 Isolate라는 개념을 사용하여 멀티스레딩을 지원합니다. Isolate는 독립적으로 실행되는 작업 단위로, 각 Isolate는 자체 메모리 공간을 갖습니다. Isolate 간에는 메모리를 공유하지 않으며, 데이터 전달을 통해 통신합니다.
- ReadOnly Heap: 불변 데이터와 상수 데이터가 저장되는 영역입니다. 이 영역은 수정되지 않는 데이터들을 저장하며, 읽기 전용 데이터로서 어디서든 접근 가능합니다.
Dart의 메모리 구조는 언어의 특성과 실행 환경에 따라 다를 수 있습니다. 위에서 설명한 구조들은 일반적인 Dart 실행 환경을 기준으로 한 것이며, 플랫폼이나 실행 방식에 따라 조금씩 차이가 있을 수 있습니다.
3. 상속을 사용하지 말아야 하는 경우
자동차와 엔진 간의 관계에서는 상속보다는 포함(Composition) 관계를 사용하는 것이 더 적절할 수 있습니다
'Flutter > Dart' 카테고리의 다른 글
dart static (0) | 2023.09.19 |
---|---|
dart 다형성 (0) | 2023.09.19 |
dart 캡슐화(Encapsulation) (0) | 2023.09.19 |
dart 생성자 - 1 (0) | 2023.09.19 |
dart Object (0) | 2023.09.19 |