☕ JAVA

[Java] 클래스 간의 관계(상속 관계, 포함 관계)

별이⭐ 2024. 5. 24. 08:45

클래스 간의 관계(상속, 포함)

상속(inheritance)

  • 기존의 클래스로 새로운 클래스를 작성하는 것 (코드의 재사용)
  • 두 클래스를 부모-자식 관계로 맺어주는 것
    • class 자식 클래스 extends 부모클래스 { … }
class Point {
  int x;
  int y;
}

class Point3D {
  // Point 클래스랑 전혀 관계 X
  int x;
  int y;
  int z;
}

class Point3D2 extends Point {
  // Point 클래스와 상속 관계
  // Point 클래스의 변경에 영향 받는다.
  int z;
}
  • 자손은 조상(부모의 부모, …)의 모든 멤버를 상속 받는다. (생성자와 초기화 블럭은 제외)
  • 자손의 멤버 개수는 조상보다 적을 수 없다. (같거나 많다)
class Parent {
	int age;	// 멤버 1개
}

class Child extends Parent { 
	void play() {
      system.out.println("놀자~");
    }
 	// 자식 자신의 멤버 1개 + 부모의 멤버 1개 = 멤버 1개
}
  • 자손의 변경은 조상에 영향을 미치지 않는다.
  • 자바는 단일 상속만을 허용한다. (조상은 하나만!)
    • 다중 상속 문제 → 인터페이스로 해결 가능!
    • 또는 비중이 높은 클래스 하나만 상속 관계로, 나머지는 포함 관계로 설정한다.
  • 부모가 없는 클래스는 자동적으로 Object 클래스를 상속받는다.

 

포함 관계(composite)

  • 포함이란? 클래스의 멤버로 참조 변수를 선언하는 것
  • 작은 단위의 클래스를 먼저 만들고, 이들을 조합해서 클래스를 만든다.
class Car {
	Engine e = new Engine();
	Door[] d = new Door[4];
	}
}

 

클래스 간의 관계 결정하기

  • 상속 관계
    • ‘~은 ~이다’ (is-a)
    • 상속은 제약이 많아 꼭 필요할 때만 상속
  • 포함 관계
    • ‘~은 ~을 가지고 있다’ (has-a)
  • 예시
    • 원(Circle)은 점(Point)이다. (X)
    • 원(Circle)은 점(Point)을 가지고 있다. (O)