본문 바로가기

개발/JAVA

객체지향 (상속, 합성, 인터페이스) 캠핑 상황으로 이해해보기

객체지향 - 상속, 합성, 인터페이스 복습!

 

<상황>

캠핑을 가서 텐트를 치고 밥을 먹는다.

그런데, 만약 텐트 3동이 텐트를 옮겨야한다면

어떻게 해야할지 객체지향으로 구현해보자.

 


  1. 부모 클래스 - 캠핑
  2. 자식 클래스 - 경량텐트, 에어텐트, 차박텐트
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번 읽게되면 어느새 이해가 된다. 앞 부분에 제대로 설명되지 않았던 것도 뒷 부분에서 이해가 될 수 있기 때문이다.

단, 이렇게 읽을 때 '키워드'를 중점적으로 생각하며 읽고, 해당 개념을 아무것도 모르는 사람에게 설명할 수 있다면

그 지식은 내거라는 기준을 가지면 된다.

 

읽기의 끝은 쓰기다.