Dart언어에서 객체지향 프로그래밍의 대한 개념 정리.
그동안 알고 있다고 생각하면서 사용한 개념들과 기억에서 희미해진 내용들을 확실하게 복습과 정리
상속
extends 키워드를 사용해 상속할 수 있다.
상속은 어떤 클래스의 기능을 다른 클래스가 사용할 수 있게 하는 기법이다.
오버라이드
부모클래스 또는 인터페이스에 정의된 메서드를 재정의 할때 사용된다.
dart에서는 override 키워드가 생략 가능하다. 하지만 직접 명시하는 게 협업 및 유지보수에 유리하다.
인터페이스
상속은 공유되는 기능을 상속받는 개념이지만, 인터페이스는 공통으로 필요한 기능을 정의만 해두는 역할이다.
dart에는 인터페이스를 지정하는 키워드가 없다.
상속은 단 하나의 클래스만 상속할수 있지만 인터페이스는 여러 개 구현가능하다.
상속은 모든기능이 상속되므로 재정의할 필요가 없다. 인터페이스는 정의된 기능을 모두 재정의해야 한다.
애초에 반드시 재정의할 필요가 있는 기능을 정의하도록 하는 용도가 상속과 인터페이스의 차이점이다.
믹스인
특정 클래스에 원하는 기능들만 골라 사용할수있는 기능이다.
특정클래스를 지정해서 속성들을 정의할수있으며, 지정한 클래스를 상속하는 클래스에서도 사용할 수 있다.
그리고 인터페이스처럼 한 개의 클래스에 여러 개의 믹스인을 적용할 수 있다.
그렇다면 궁금한 점이 믹스인은 언제 사용하고 왜 사용하는가?
믹스인은 다중상속을 지원하지 않는 언어에서 코드 재사용성과 유연성을 높이기 위한 메커니즘이다.
일반적으로 단일 상속을 사용하는 언어에서 코드의 재사용성을 증가시키기 위함이다.
한마디로 다중상속의 장점을 활용할 때 사용한다.
상속과 믹스인의 주요 차이점은 상속은 클래스 간의 계층구조를 형성하고 부모클래스의 모든 기능을 자식 클래스에게 상속한다. 반면에 믹스인은 특정 기능만 다른 클래스에 주입하여 사용한다. 상속은 계층구조를 형성하므로 부모클래스의 변경이 모든 자식 클래스에 영향을 미칠수있다. 하지만 믹스인은 독립적으로 사용되므로 다른 클래스에 영향을 미치지 않는다. 그말인즉슨, 클래스간의 결합도를 낮추고 코드의 재사용성을 높이는데 도움 된다. 그리하면 코드의 유연성을 높일 수 있다.
추상
상속이나 인터페이스로 사용할 수 있고 필요한 속성만 정의하고 인스턴스화할 수 없도록 하는 기능이다.
인스턴스화를 방지하고 메서드 정의를 자식 클래스에 위임할 수 있다.
또한 추상클래스는 추상메서드를 선언할 수 있으며, 추상 메서드는 반환타입, 이름, 매개변수만 정의하고 함수 바디의 선언을 자식클래스에서 필수로 정의하도록 강제한다.
dart에서 추상클래스는 일반클래스와 유사하지만 차이점이 있다.
- 추상 메서드 정의 : 추상클래스는 추상 메서드를 포함한다. 추상메서드란 본문이 없는 메서드로,
하위클래스에서 반드시 구현해야 한다. - 일반메서드 및 속성 정의: 추상클래스는 추상메서드뿐 아니라 일반 메서드 및 속성도 포함한다.
코드의 재사용성을 위함이다. - 인스턴스화 불가 : 직접적으로 인스턴스화할 수 없다.
- 다형성 제공: 추상클래스를 사용하면 다형성을 활용할 수 있다. 추상클래스를 상속하여 여러 하위 클래스를 만들고, 각각의 하위 클래스가 고유한 동작을 구현할 수 있다. 이렇게 함으로써 각 하위 클래스는 추상클래스의 타입으로 사용될 수 있으며, 동일한 인터페이스를 사용하여 다양한 하위클래스를 다룰 수 있다.
추상클래스와 인터페이스는 비슷한 목적을 가지고 있지만 차이점이 있다.
추상클래스는 상태와 동작을 가질 수 있으며, 추상메서드를 포함할 수 있다.
반면에, 인터페이스는 메서드만을 정의하고 상태를 가질 수 없다.
따라서 각각의 사용사례와 요구사항에 따라 추상클래스 또는 인터페이스를 선택하는 것이다.
추상클래스는 하위클래스에서 extends 하거나 implements 두 가지 키워드로 사용 가능하다.
자바와 코틀린에서는 추상클래스를 직접적으로 구현하는 것은 허용하지 않는다.
추상클래스는 일반적으로 상속되어 확장되는 것이 목적이며, 하위클래스에서 추상메서드를 구현하거나 추상클래스의 일반적인 동작을 확장하기 위해 사용된다. dart에서는 추상클래스를 구현하는 개념이 있다.
다른 언어와 다른 dart의 특징 중 하나이다.
dart에서는 추상클래스를 구현함으로써 클래스가 일부 메서드를 강제로 구현하도록 만들 수 있다.
이것은 클래스가 특정 동작을 가져야 하지만 다른 클래스와 강한 결합(계층구조형성)을 피하고 싶을 때 유용하다.
해당 개념은 SOLID 원칙 중 인터페이스 분리 원칙(ISP)을 준수하면서 소프트웨어를 유연하고 확장가능하도록 한다.
제네릭
특정 변수의 타입을 하나의 타입으로 제한하고 싶지 않을때 자주 사용한다.
Map,List,Set 등에서 사용한 <> 사이에 입력되는 값이 제네릭 문자이다.
일반적으로 개발자들이 많이 사용하는 문자들이 존재한다.
- T - 변수 타입을 표현
- E - 리스트 내부 요소들의 타입을 표현
- K - 키를 표현
- V - 값을 표현
스태틱
static 키워드를 사용하면 클래스 자체에 귀속된다.
static 키워드는 인스턴스까지 공유해야 하는 정보에 지정한다.
케스케이드 연산자
인스턴스에서 해당 인스턴스의 속성이나 멤버 함수를 연속해서 사용하는 기능이다.
케스케이드 연산자는 .. 기호를 사용한다.
Stream
지속적으로 값을 반환 받을때 stream를 사용한다.
'2024 > flutter' 카테고리의 다른 글
flutter에서 iOS 애뮬레이터 기기연결 되지 않을때 해결방법 (0) | 2024.05.28 |
---|
Dart언어에서 객체지향 프로그래밍의 대한 개념 정리.
그동안 알고 있다고 생각하면서 사용한 개념들과 기억에서 희미해진 내용들을 확실하게 복습과 정리
상속
extends 키워드를 사용해 상속할 수 있다.
상속은 어떤 클래스의 기능을 다른 클래스가 사용할 수 있게 하는 기법이다.
오버라이드
부모클래스 또는 인터페이스에 정의된 메서드를 재정의 할때 사용된다.
dart에서는 override 키워드가 생략 가능하다. 하지만 직접 명시하는 게 협업 및 유지보수에 유리하다.
인터페이스
상속은 공유되는 기능을 상속받는 개념이지만, 인터페이스는 공통으로 필요한 기능을 정의만 해두는 역할이다.
dart에는 인터페이스를 지정하는 키워드가 없다.
상속은 단 하나의 클래스만 상속할수 있지만 인터페이스는 여러 개 구현가능하다.
상속은 모든기능이 상속되므로 재정의할 필요가 없다. 인터페이스는 정의된 기능을 모두 재정의해야 한다.
애초에 반드시 재정의할 필요가 있는 기능을 정의하도록 하는 용도가 상속과 인터페이스의 차이점이다.
믹스인
특정 클래스에 원하는 기능들만 골라 사용할수있는 기능이다.
특정클래스를 지정해서 속성들을 정의할수있으며, 지정한 클래스를 상속하는 클래스에서도 사용할 수 있다.
그리고 인터페이스처럼 한 개의 클래스에 여러 개의 믹스인을 적용할 수 있다.
그렇다면 궁금한 점이 믹스인은 언제 사용하고 왜 사용하는가?
믹스인은 다중상속을 지원하지 않는 언어에서 코드 재사용성과 유연성을 높이기 위한 메커니즘이다.
일반적으로 단일 상속을 사용하는 언어에서 코드의 재사용성을 증가시키기 위함이다.
한마디로 다중상속의 장점을 활용할 때 사용한다.
상속과 믹스인의 주요 차이점은 상속은 클래스 간의 계층구조를 형성하고 부모클래스의 모든 기능을 자식 클래스에게 상속한다. 반면에 믹스인은 특정 기능만 다른 클래스에 주입하여 사용한다. 상속은 계층구조를 형성하므로 부모클래스의 변경이 모든 자식 클래스에 영향을 미칠수있다. 하지만 믹스인은 독립적으로 사용되므로 다른 클래스에 영향을 미치지 않는다. 그말인즉슨, 클래스간의 결합도를 낮추고 코드의 재사용성을 높이는데 도움 된다. 그리하면 코드의 유연성을 높일 수 있다.
추상
상속이나 인터페이스로 사용할 수 있고 필요한 속성만 정의하고 인스턴스화할 수 없도록 하는 기능이다.
인스턴스화를 방지하고 메서드 정의를 자식 클래스에 위임할 수 있다.
또한 추상클래스는 추상메서드를 선언할 수 있으며, 추상 메서드는 반환타입, 이름, 매개변수만 정의하고 함수 바디의 선언을 자식클래스에서 필수로 정의하도록 강제한다.
dart에서 추상클래스는 일반클래스와 유사하지만 차이점이 있다.
- 추상 메서드 정의 : 추상클래스는 추상 메서드를 포함한다. 추상메서드란 본문이 없는 메서드로,
하위클래스에서 반드시 구현해야 한다. - 일반메서드 및 속성 정의: 추상클래스는 추상메서드뿐 아니라 일반 메서드 및 속성도 포함한다.
코드의 재사용성을 위함이다. - 인스턴스화 불가 : 직접적으로 인스턴스화할 수 없다.
- 다형성 제공: 추상클래스를 사용하면 다형성을 활용할 수 있다. 추상클래스를 상속하여 여러 하위 클래스를 만들고, 각각의 하위 클래스가 고유한 동작을 구현할 수 있다. 이렇게 함으로써 각 하위 클래스는 추상클래스의 타입으로 사용될 수 있으며, 동일한 인터페이스를 사용하여 다양한 하위클래스를 다룰 수 있다.
추상클래스와 인터페이스는 비슷한 목적을 가지고 있지만 차이점이 있다.
추상클래스는 상태와 동작을 가질 수 있으며, 추상메서드를 포함할 수 있다.
반면에, 인터페이스는 메서드만을 정의하고 상태를 가질 수 없다.
따라서 각각의 사용사례와 요구사항에 따라 추상클래스 또는 인터페이스를 선택하는 것이다.
추상클래스는 하위클래스에서 extends 하거나 implements 두 가지 키워드로 사용 가능하다.
자바와 코틀린에서는 추상클래스를 직접적으로 구현하는 것은 허용하지 않는다.
추상클래스는 일반적으로 상속되어 확장되는 것이 목적이며, 하위클래스에서 추상메서드를 구현하거나 추상클래스의 일반적인 동작을 확장하기 위해 사용된다. dart에서는 추상클래스를 구현하는 개념이 있다.
다른 언어와 다른 dart의 특징 중 하나이다.
dart에서는 추상클래스를 구현함으로써 클래스가 일부 메서드를 강제로 구현하도록 만들 수 있다.
이것은 클래스가 특정 동작을 가져야 하지만 다른 클래스와 강한 결합(계층구조형성)을 피하고 싶을 때 유용하다.
해당 개념은 SOLID 원칙 중 인터페이스 분리 원칙(ISP)을 준수하면서 소프트웨어를 유연하고 확장가능하도록 한다.
제네릭
특정 변수의 타입을 하나의 타입으로 제한하고 싶지 않을때 자주 사용한다.
Map,List,Set 등에서 사용한 <> 사이에 입력되는 값이 제네릭 문자이다.
일반적으로 개발자들이 많이 사용하는 문자들이 존재한다.
- T - 변수 타입을 표현
- E - 리스트 내부 요소들의 타입을 표현
- K - 키를 표현
- V - 값을 표현
스태틱
static 키워드를 사용하면 클래스 자체에 귀속된다.
static 키워드는 인스턴스까지 공유해야 하는 정보에 지정한다.
케스케이드 연산자
인스턴스에서 해당 인스턴스의 속성이나 멤버 함수를 연속해서 사용하는 기능이다.
케스케이드 연산자는 .. 기호를 사용한다.
Stream
지속적으로 값을 반환 받을때 stream를 사용한다.
'2024 > flutter' 카테고리의 다른 글
flutter에서 iOS 애뮬레이터 기기연결 되지 않을때 해결방법 (0) | 2024.05.28 |
---|