Java

[Java - TIL] ❓객체 상속 시 this 가 가르키는 객체는 무엇일까 (내적 일관성)

민돌v 2022. 10. 6. 10:35
728x90

 

아래 코드의 정답은..!?!?!?

@Test
void test(){
    A a = new B();
    a.run();
}

class A {
    protected void print(){
        System.out.println("A run");
    }

    public void run(){
        this.print();
    }
}

class B extends A {
    protected void print(){
        System.out.println("B run");
    }
}

 

 

📗 객체지향적인 언어를 만들 때 약속했다고 합니다.

모든 this 는 생성된 객체를 가르키기로 약속했기 때문에.

상속받은 B 객체의 부모객체의 A 의 메소드에서 this를 호출해도, 생성된 객체인 B 객체를 가르키는 것입니다!

➡️ 이게 내적일관성에 대한 약속

 

 

비야네 스트로스트룹 (C++ 창시자) 가 이를 제안했고, 이는 객체지향의 내적일관성을 지키기위한 제안에 불과합니다.

 


⚙️ Polymorphism(다형성) = 대체가능성 + 내적일관성

  • 확장된 객체는 원본으로 대체 가능하다
  • 생성 시점의 타입이 내부에 일관성 있게 참조된다.

 

이게 대체 가능성과 내적 일관성이며, 이 2가지가 지켜진다면 객체지향 언어라고 보자고 약속한거라고 생각됩니다..?!

 

 

📗 소중한 알쓸신잡

 

 


참고

  • 팀장님 브래인
  • 팀장님이 보신 Object 책

 

반응형