티스토리 뷰
클래스의 간의 관계에는 크게 두 가지가 있다.
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
- MariaDB
- ACTUATOR
- 운동일기
- zipkin
- Logstash 활용
- github
- kafka
- MSA
- Feign
- consumer
- 빅-오
- JWT
- docker
- LoadBalancer
- Kafka Connect
- prometheus
- Spring + ELK
- Gateway
- Logstash to ElasticSearch
- elasticSearch
- rabbitmq
- 루틴기록
- 운동
- git
- 미래의나에게동기부여
- springcloud
- 오늘저녁 삼겹살
- UserService
- producer
- config
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |