[Java] 객체지향개념 - 클래스들 간의 관계 : 상속, 포함

miyeon·2023년 3월 19일
0

Java

목록 보기
6/10
post-thumbnail

상속(Inheritance)

  • 기존의 클래스로 새로운 클래스를 작성하는 것(코드의 재사용)
  • 두 클래스를 부모와 자식의 관계로 맺어주는 것
  • 자손은 조상의 모든 멤버를 상속 받음 (생성자, 초기화 블럭 제외)
  • 자손의 멤버개수는 조상의 멤버개수 보다 적을 수 없다. (같거나 많음)
  • 자손의 변경은 조상에 영향을 미치지 않는다.
class MyPoint {
	int x;
	int y;
}
class Circle extends MyPoint {	
	int r;
}

public class InheritanceTest {

	public static void main(String[] args) {
		Circle c = new Circle();
		c.x = 1;
		c.y = 2;
		c.r = 3;
		System.out.println("c.x = " + c.x);
		System.out.println("c.y = " + c.y);
		System.out.println("c.r = " + c.r);
	}

}

단일 상속

  • 자바는 단일 상속만을 허용한다. (C++은 다중상속 허용, 다중상속 시 충돌문제가 발생할 수 있음)

👉 비중이 높은 클래스 하나만 상속 관계로, 나머지는 포함관계로 한다.

Object 클래스

  • 모든 클래스의 최고 조상
  • 부모가 없는 클래스는 자동적으로 object클래스를 상속받음 (컴파일러가)
  • 모든 클래스는 object클래스에 정의된 11개의 메서드를 상속 받는다.
    ( toString(), equals(Object obj), hashCode(), 등등 )

참조변수 super

  • 객체 자신을 가리키는 참조변수
  • 인스턴스 메섣, 생성자 내에만 존재 (참조변수this와 동일)
  • 조상의 멤버와 자신의 멤버 구별할 때 사용
    • super.조상멤버, this.자신의멤버 (자신의 멤버가 없으면, this도 조상멤버를 가리킴)



포함(Composite)

  • 클래스의 멤버로 (다른 클래스 타입의) 참조변수를 선언하는 것
  • 작은 단위의 클래스를 만들고, 이 들을 조합하여 클래스를 만든다.
class MyPoint {
	int x;
	int y;
}

class Circle {		
	MyPoint p ; = new MyPoint(); //객체 초기화를 해야 저장공간(x,y) 생김
	int r;
}

public class InheritanceTest {

	public static void main(String[] args) {
		Circle c = new Circle();
		c.p.x = 1;
		c.p.y = 2;
		c.r = 3;
		System.out.println("c.x = " + c.p.x);
		System.out.println("c.y = " + c.p.y);
		System.out.println("c.r = " + c.r);
	}

}

💡 같은 코드를 포함과 상속으로 코딩했을 때 저장 공간의 개수는 같다.



클래스들간의 관계 결정

상속

  • A는 B이다. (is-a)

포함

  • A는 B를 가지고 있다.(has-a)

💡 대부분 포함관계를 사용한다. 상속은 여러가지 제약이 많음


참고 📑

profile
내가 보려고 기록하는 블로그

0개의 댓글