객체지향 - 상속, 합성, 인터페이스 복습!
<상황>
캠핑을 가서 텐트를 치고 밥을 먹는다.
그런데, 만약 텐트 3동이 텐트를 옮겨야한다면
어떻게 해야할지 객체지향으로 구현해보자.
- 부모 클래스 - 캠핑
- 자식 클래스 - 경량텐트, 에어텐트, 차박텐트
class Camping {
public void reservation() {
System.out.println("Camping - reservation");
}
}
class LightTent extends Camping{
public void shortly() {
System.out.print("빨리 피칭할 수 있는 경량 텐트");
}
}
class AirTent implements setUp {
public void doPack(int pack) {
System.out.println("pack : " + pack + " Setup Complete");
}
}
class CarTent implements interior {
public void accessory() {
System.out.println("Tent Interior");
}
}
//
class RoofTopTent extends Camping implements setUp, interior {
public void reservation() {
System.out.println("RoofTop Camping - reservation");
}
public void doPack(int pack) {
System.out.println("pack : " + pack + " RoofTop Setup Complete");
}
public void accessory() {
System.out.print("RoopTop Tent Interior");
}
}
interface setUp {
public void doPack(int pack);
}
interface interior {
void accessory();
}
public class HelloWorld{
public static void main(String []args){
//Camping c1 = new LightTent();
//c1.reservation();
//AirTent airTent = new AirTent();
//airTent.doPack(10);
//CarTent carTent = new CarTent();
//carTent.accessory();
Camping roofTopCamping = new RoofTopTent();
roofTopCamping.reservation();
roofTopCamping.accessory();
//System.out.println("Hello, World!");
}
}
- 메모리 구조
Vehicle a = new Car(); // 가능
Vehicle b = new Truck(); // 가능
Car c = new Bus(); // 불가능
// 나는 위의 합성을 이렇게 이해했다.
// 부모 그릇에 부모 혹은 자식들을 담을 수는 있으나, 자식이 형이나 누나 즉 형제나 자매를 담을 수 없다.
// 메모리로도 함께 이해하면 좋을 것 같다.
- public, protected, private
- public은 어디서든 볼 수 있다
- protected는 부모-자식간 볼 수 있다
- private는 부모-자식간에도 볼 수 없고 클래스 내부 블록 안에서만 사용 가능하다.
- 상속, 합성, 인터페이스 각각 특징
- 상속 : 특성에 focus를 맞춘 느낌. 이에 한계를 체감하고 행동에 집중하기 위해 합성 개념이 생겨났다. 상속은 1-2 뎁스로 가져가는 정도가 좋다. (가족)
- 합성은 멤버 객체로 받는 느낌. 마치 공장의 부품과 같고, 해당 부품의 재고가 바닥나서 더 이상 구할 수 없다면 그 재고만 바꿔 끼면 되는 정도의 느슨한 결합이다. (친구)
- 인터페이스 : 비즈니스 (비즈니스)
공부하는 방법에 대해 조언을 들었다.
책을 받게되면 처음에는 통독을 한다. 모르는 부분도 일단 지나간다.
그리고 N번 읽게되면 어느새 이해가 된다. 앞 부분에 제대로 설명되지 않았던 것도 뒷 부분에서 이해가 될 수 있기 때문이다.
단, 이렇게 읽을 때 '키워드'를 중점적으로 생각하며 읽고, 해당 개념을 아무것도 모르는 사람에게 설명할 수 있다면
그 지식은 내거라는 기준을 가지면 된다.
읽기의 끝은 쓰기다.
'개발 > JAVA' 카테고리의 다른 글
[JAVA] PreparedStatement(pstmt)와 Statement(stmt)의 차이점 (0) | 2020.07.30 |
---|---|
[JAVA] #02. [SQL] StringBuffer, StringBuilder, String 의 차이점 (0) | 2020.07.29 |
[JAVA] #10. 자동 형변환 / 강제 형변환 (CAST) (0) | 2020.07.28 |
[JAVA] #09. 비트 연산자(bitwise operator), 시프트 연산자 (0) | 2020.07.28 |
[JAVA] #08. 자료형(Java Data Type) :: boolean, int, char, double 등 (0) | 2020.07.28 |