이전에 배운 내용
[JAVA] 상속 개념
이전에 배운 내용 [JAVA] package와 import [JAVA] package와 import 이전에 배운 내용 2023.10.19 - [내일 배움 캠프_Spring _3기/프로그래밍 기초 주차(2023.10.12~30)] - [JAVA] 접근제어자 [JAVA] 접근제어자 이전에 배운
dev-story93.tistory.com
상속은 어떤 표현을 하는지 상속이 아닌 다른 것은 어떻게 표현할 수 있는지에 대해 알아보자
클래스 간의 관계
공식
상속관계: is -a("~은~이다")
포함관계: has - a("~은 ~을(를) 가지고 있다.)
상속관계는 전에 배운 스포츠카는 자동차이다와 같은 고래는 포유류이다. 갤럭시 S22U는 전자기 기이다에 해당된다.
위에 형식대로 상속관계와 포함관계를 현실세계에 비유하자면
상속관계: 고양이는 동물이다
포함관계: 고양이는 동물을 가지고 있다.(?)
포함관계는 상속관계와 다르게 말이 이상하다.
그렇다면 포함관계는 어떤 구성을 가지는지 확인해 보자
포함관계는 포함이라는 단어에서 보듯이 포함되는 관계라고 볼 수 있다.
휴대폰을 예시로 들자면 카메라와 디스플레이, 버튼과의 관계라고 생각하면 된다.(부품)
공식에 대입해 보면,
휴대폰은 카메라를 가지고 있다.
휴대폰은 디스플레이를 가지고 있다.
휴대폰은 버튼을 가지고 있다.
예제를 통해 코드로 확인해 보자
타이어클래스
public class Tire {
String company; // 타이어 회사
double price; // 타이어 가격
public Tire(String company, double price) {
this.company = company;
this.price = price;
}
}
차문클래스
public class Door {
String company; // 차문 회사
String location; // 차문 위치, FL, FR, BL, BR
public Door(String company, String location) {
this.company = company;
this.location = location;
}
}
핸들클래스
public class Handle {
String company; // 핸들 회사
String type; // 핸들 타입
public Handle(String company, String type) {
this.company = company;
this.type = type;
}
public void turnHandle(String direction) {
System.out.println(direction + " 방향으로 핸들을 돌립니다.");
}
}
자동차클래스
public class Car {
static final String company = "GENESIS"; // 자동차 회사
String model; // 자동차 모델
String color; // 자동차 색상
double price; // 자동차 가격
double speed; // 자동차 속도 , km/h
char gear = 'P'; // 기어의 상태, P,R,N,D
boolean lights; // 자동차 조명의 상태
Tire[] tire;
Door[] door;
Handle handle;
public Car(String model, String color, double price) {
this.model = model;
this.color = color;
this.price = price;
}
public void setTire(Tire ... tire) {
this.tire = tire;
}
public void setDoor(Door ... door) {
this.door = door;
}
public void setHandle(Handle handle) {
this.handle = handle;
}
public double gasPedal(double kmh, char type) {
changeGear(type);
speed = kmh;
return speed;
}
public double brakePedal() {
speed = 0;
return speed;
}
public char changeGear(char type) {
gear = type;
return gear;
}
public boolean onOffLights() {
lights = !lights;
return lights;
}
public void horn() {
System.out.println("빵빵");
}
}
메인클래스
public class Main {
public static void main(String[] args) {
// 자동차 객체 생성
Car car = new Car("GV80", "Black", 50000000);
// 자동차 부품 : 타이어, 차문, 핸들 선언
Tire[] tires = new Tire[]{
new Tire("KIA", 150000), new Tire("금호", 150000),
new Tire("Samsung", 150000), new Tire("LG", 150000)
};
Door[] doors = new Door[]{
new Door("LG", "FL"), new Door("KIA", "FR"),
new Door("Samsung", "BL"), new Door("LG", "BR")
};
Handle handle = new Handle("Samsung", "S");
// 자동차 객체에 부품 등록
car.setTire(tires);
car.setDoor(doors);
car.setHandle(handle);
// 등록된 부품 확인하기
for (Tire tire : car.tire) {
System.out.println("tire.company = " + tire.company);
}
System.out.println();
for (Door door : car.door) {
System.out.println("door.company = " + door.company);
System.out.println("door.location = " + door.location);
System.out.println();
}
System.out.println();
// 자동차 핸들 인스턴스 참조형 변수에 저장
Handle carHandle = car.handle;
System.out.println("carHandle.company = " + carHandle.company);
System.out.println("carHandle.type = " + carHandle.type + "\n");
// 자동차 핸들 조작해보기
carHandle.turnHandle("Right");
carHandle.turnHandle("Left");
}
}
객체를 배열로 만들어서 포함관계를 만드는 것이구나!
포함관계는 보통 배열로 이루어질 것 같다.
다음은 단일, 다중상속과 final 클래스와 final 메서드 대해 알아보자!
'언어(language) > 자바(Java)' 카테고리의 다른 글
| [JAVA] 오버라이딩(overriding)과 슈퍼(super) (2) | 2023.10.19 |
|---|---|
| [JAVA] 단일상속, 다중상속, final 클래스, final 메서드, object (0) | 2023.10.19 |
| [JAVA] 상속 개념 (0) | 2023.10.19 |
| [JAVA] package와 import (2) | 2023.10.19 |
| [JAVA] 접근제어자 (0) | 2023.10.19 |