본문 바로가기
자바(Java)/자바기초

[자바기초.014] is-a & has-a 관계

by 긱펀 2024. 3. 14.
반응형

[자바기초.014] is-a & has-a 관계

 

[1] is - a 관계(relationship)

  • is-a 관계는 ~이다 라는 뜻으로 아래와 같은 예시로 이해할 수 있다.
  • "사람은 동물이다", "강아지는 동물이다"
  • is-a 관계는 상속(Inheritance)으로 코딩하는 것이 효율적이다.

 

[2] has - a 관계(relationship)

  • has-a 관계는 ~을 가지고 있다 라는 뜻입니다.
  • has-a 관계는 상속을 사용하지 않고 다른 클래스의  field나 method 등을 가져와서 사용한다.

 

[3] 예제 코드로 is-a & has-a 관계 이해하기

Course, Student, Apcourse 라는 3개의 클래스를 코딩한 아래의 예제 코드를 보세요. 그리고 이 3개 클래스의 관계는 아래 그림과 같습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.*;
 
class Student
{
    private String name;
    private int id;
}
 
class Course
{
    private String title;
    private ArrayList<Student> roster; // has-a
}
 
public class APcourse extends Course // is-a
{
    private String APexamDate;
 
    public static void main(String[] args)
    {
        APcourse csa = new APcourse();
        System.out.print("Is an APcourse a Course? ");
        System.out.println(csa instanceof Course);
    }
}
cs

 

  • 위 코드에서 보면, Course 클래스는 Student 클래스의 ArrayList를 가지고(has-a)있습니다.
  • 그래서 Course와 Student는 has-a  관계로서, 상속으로 처리하지 않았습니다.
  • 하지만 APcourse는 Course와 is-a 관계라서 상속으로 처리되어 있습니다.

 

 

[예시 문제]

 


 

728x90
반응형

댓글