상속

허준호·2025년 6월 27일
0

dart 언어 공부

목록 보기
4/16
post-thumbnail

상속(Inheritance)

객체지향의 4대 특성 중 하나로서, 다른 객체의 필드와 메소드를 그대로 물려받는 것이다

장점

  • 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다
  • 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다

사용법

class SubClass extends SuperClass{
	// extends 키워드를 사용하면 된다
}

용어

  • 상속하는 클래스: 부모 클래스, 슈퍼 클래스
  • 상속받는 클래스: 자식 클래스, 서브 클래스

예시

class Hero {
	String name;
	int hp;
	
	Hero({required this.name, required this.hp});
	
	void attack() {}
}

class SuperHero extends Hero {
	int age;
	
	SuperHero({required super.name, required super.hp, required this.age})
	
	void fly() {}
}
  • super는 부모 클래스를 참조하는 키워드
  • this는 자기 자신을 참조하는 키워드
  • 생성자에서 부모 클래스에서 지정한 named parameter를 똑같이 지정해줘야 한다
  • 부모 클래스에 없는 자신만의 메소드를 추가로 정의할 수 있다

오버라이드(Override)

부모클래스(슈퍼클래스)의 메소드를 자식클래스(서브클래스)에서 재정의하는 것이다.

조건

  • 메소드의 선언부는 기존 메소드와 동일해야 한다
  • 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다.
  • 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없다.

사용법

💡부모 메소드에 @override 어노테이션을 붙여서 사용

예시

class Hero {
	String name;
	int hp;
	
	Hero({required this.name, required this.hp});
	
	void run() {}
}

class SuperHero extends Hero {
	int age;
	
	SuperHero({required super.name, required super.hp, required this.age})
	
	
	void run() {
		print('$name이 퇴각했다');
	}
}
  • 기존 메소드의 내용을 같이 사용하는 경우 super.메소드명() 사용

UML

Unified Modeling Language의 약자로, 객체지향 소프트웨어를 개발할 때 시스템과 산출물을 명세화, 시각화, 문서화할 때 사용하는 언어이다

클래스 다이어그램

클래스 내부 구성요소 및 클래스 간의 관계를 도식화하여 시스템의 특정 모듈이나 일부 및 전체를 구조화한다

작성법

  • 상단 부분에는 클래스명을 작성한다
  • 중간 부분은 필드명을 작성한다. public 변수는 필드명 앞에 ‘+’를, private 변수는 필드명 앞에 ‘-’를 붙여 표기한다
  • 하단 부분은 메소드명을 작성한다. 메소드명 뒤에 ()를 붙여야한다.

참조

https://velog.io/@sysy123/객체-지향-프로그래밍-상속-Inheritance

https://devjaewoo.tistory.com/14

https://brownbears.tistory.com/577

profile
후추랑 소금 좋아하는 개발자

0개의 댓글