2011. 5. 25. 11:21

자바(Java)에서 `is a` 관계와 `has a` 관계

'Is a' 관계라는 것은 상속을 의미한다. 만약 Cpu라는 클래스를 만들었다고 하고, SingleCore가 class SingleCore extends Cpu로 상속을 받았다면 SingleCore Is a Cpu가 되는 것이다. 이때 상속을 해주는 상위 클래스를 수퍼 클래스(Super Class)라고 하고, 상속을 받는 하위 클래스를 서브 클래스(Sub Class)라고 한다.

상속을 하는 것 이외에 클래스를 재사용하는 다른 방법으로 여러 클래스 간의 관계를 부여해 줄 수 있다. 이 방식을 Has a 관계라고 하는데 아래에 각각 Cpu, GraphicCard, Computer 클래스 3개를 만들고, Computer 클래스에서 Cpu와 GraphicCard 클래스를 포함하는 관계를 맺어주고 있다. 그래서 'Computer는 Cpu, GraphicCard를 가지고 있다.'라는 관계가 성립되게 된다.

이런 식으로 클래스를 작성하고 포함관계를 맺어주면 클래스들의 작성과 관리가 쉬어지고, 코드도 간결해져서 이해하기도 용이하다. 또한, 코드의 유연성이 높아지는 장점도 있다.

  1: class Cpu { 
  2:  public void calc() { 
  3:   System.out.println("계산을 수행하는 메서드") ; 
  4:  }  
  5: } 
  6:  
  7: class GraphicCard { 
  8:  public void monitorScan() { 
  9:   System.out.println("화면 출력을 담당하는 메서드") ; 
 10:  } 
 11: } 
 12:  
 13: class Computer { 
 14:  Computer() { 
 15:   Cpu cpu = new Cpu() ; 
 16:   GraphicCard vgaCard = new GraphicCard() ; 
 17:  } 
 18: }