티스토리 뷰

클래스의 간의 관계에는 크게 두 가지가 있다. 

IS-A Relationship

쉽게 말하면 상속관계이다. 부모클래스와 자식클래스를 구별할때 IS-A 관계를 생각하곤 하는데 

예를들면 사과는 과일이다.컴퓨터는 전자기기이다. 등 의 관계를 생각해보자  

어떤 걸 부모클래스로 둬야할지 감이 오지 않는다면, 이렇게 생각해보자 

사과는 과일이다는 틀리지 않지만, 과일은 사과이다? 이건 명백하게 틀린말이다. 

HAS-A Relationship

IS-A가 카테고리를 구별하기 위해 만든다면, HAS-A 는 특정기능을 사용하고 싶을때 자주 사용한다. 

차로 예를 들자면 차는 엔진을 가지고 있다. 즉 기능을 포함시키고 싶을때 사용 하는 것이 HAS-A 이다.

 

IS-A와 HAS-A의 관계를 이해한다면 사실 다 이해했다고 봐도 무방하다. 

쉽게 풀어서 말하면 IS-A는 카테고리 혹은 분류를 위해 사용하고 HAS-A는 기능을 포함시키기 위한 관계이다.

 

아래의 그림을 보면서 조금 더 심화적으로 이해해보자 .

부모클래스로 컴퓨터를 지정했고, 자식클래스는 삼성  이다. 

컴퓨터라는 범주안에 삼성이라는 브랜드가 존재하기 때문에.  명백하게 자식 부모 관계가 성립된다. 

삼성 컴퓨터는 파워를 on/off하는 기능이 있기 때문에 Power 는 has-a관계를 가진다. 

여기까지 이해가 됐다면, 코드를 살펴볼시간이다. 

기본적으로 is-a관계는 꼭 넣어줘야하는 코드가 있다. 

public class Computer{

}
public Samsung extends Computer{

}

 

위와 같이 extends를 입력해서 Computer 클래스의 자식이라는 것을 명시해줘야한다. 

*is-a 관계는 다중상속이 되지 않는다 자식하나에 부모도 하나, 꼭 명심할것

이렇게 코드를 작성해주면 정상적으로 is-a 클래스를 생성한것이다. 

그럼 이제 has-a관계를 보자

public class Power {
	public void on(){
		System.out.println("Power on");
	}
	public void off(){
		System.out.println("Power off");
	}
}

다음과 같이 파워의 기능을 정의하는 메소드를 넣었다. on/off를 출력할 수 있는 기능이다. 

이제 이 기능을 삼성이 만든 컴퓨터의 기능으로 넣기 위해 다음과 같이 코드를 작성했다. 

public Samsung extends Computer{
public void SamsungPower(){
Power power=new Power;
power.on();
}
}

 

 is-a는 상속관계이기 때문에 새로 생성하지 않아도  자유롭게 호출할 수 있지만,has-a는 기능을 불러오기 때문에 

꼭 새로운 생성자를 생성해야한다. 그렇지 않으면 프로그램내에서 인식하지 못해서 power.on이라는 기능자체를 

실행못시킨다. 

이 코드를 메인에서 호출해서 사용한다면 정상적으로 Power on이 출력될 것 이다. 

*구조가 이렇다는 것이지 이렇게 작성하면 별로 좋지 않다. computer만이 가지는 특징중 내가 사용할 객체를 computer에 선언해주고 samsung브랜드만의 차별점을 가지는 특징을 꼭 samsung클래스에 객체로 선언해주자 .

 

'웹 프로그래밍 > JAVA(이론 )' 카테고리의 다른 글

Interface의 이해 (JAVA)  (0) 2021.02.27
Inner class 의 이해 (member,static)  (0) 2021.02.16
Stack과 Heap의 이해 (JAVA)  (0) 2021.01.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
26 27 28 29 30 31
글 보관함