객체 지향 프로그래밍 같은 경우에는 단순히 클래스 자체는 설계도. 클래스 객체는 그 설계도로 제작한 물건, 그리고 클래스 변수는 그 물건의 성질이며 클래스 메소드는 그 물건의 동작 기능들 정도로 이해하여, 결론적으론 프로그래밍 자체를 대상을 실체화 하여 조립하듯이 한다는 뜻 정도로 생각을 했다 😊
예를들면 인체 공학도는 클래스이고, 객체 인스턴스는 사람, 변수는 장기, 메소드는 행동 으로 생각하면 편할것같다.
상속은, 결론적으론 객체의 다형성을 위해 쓰이는 기능 정도로 이해를 했다.
클래스끼리 상속을 하게 되어 자손클래스가 부모클래스의 메소드,변수 등을 호출할 수 있고 추상클래스 같은 경우에는 상속을 하게 되면 메소드를 재정의 하여 같은 동작이지만 다른 행동을 하게끔 할 수 있기 때문이다. 이것이 바로 다형성의 특징이다 😊
여기서 헷갈렸던 부분은 부모 클래스 자식 클래스 이런식으로 이름을 짓다보니, 부모 클래스가 뭔가 다 할 수 있을거 같은 착각? 이 든다고 해야되나, 결국에 제일 많은걸 할 수 있는 클래스는 조상으로부터 모든걸 물려받은 제일 밑의 자손 클래스이다. 잊지말자! 🤦♂️
추상클래스는 하나 이상의 추상메소드를 포함한 클래스를 추상클래스라고 한다.
추상의 뜻이 뭘까?
추상(抽象)은 사물을 정확하게 이해하기 위해서는 사물이 지니고 있는 여러 가지 측면 가운데서 특정한 측면만을 가려내어 포착하는 것이다.
추상메소드를 선언할 수 있다. 말 그대로 뭔가 정의되지 않은 메소드이기 때문에, 상속받은 클래스에서 메소드를 오버라이딩 해서 사용해야 한다.
인터페이스같은 경우에는 추상 클래스와 헷갈리기 쉽다. 추상클래스와 인터페이스 모두 필드가 비어있는 추상메소드를 재정의 해서 사용하는게 가장 큰 특징이기 때문이다.
추상클래스 같은 경우에는 예를 들자면, 가장 조상인 People 클래스가 있고, 그 모든 자손들이 다 같은 행동을 하지만 특징이 다를때. 그럴때 추상 클래스를 사용한다
인터페이스 같은 경우에는, 조상이 다르다. 조상이 다르고 특징도 다르지만, 같은 행동을 할때 인터페이스를 사용한다.
인터페이스같은 경우엔 다중 상속이 가능하다. 다형성 구현의 주된 기술로 이용된다.
인터페이스 변수에 구현 객체를 대입해야한다. 메소드의 매개변수에 선언이 가능하다.
디폴트 메소드는 오버라이딩이 불가능하다.
구현 객체가 자식 인터페이스 변수에 대입되면 자식 및 부모 인터페이스의 추상 메소드를 모두 호출 할 수 있으나, 부모 인터페이스 변수에 대입되면 부모 인터페이스에 선언된 추상 메소드만 호출 가능하다. (클래스 상속과 비슷하다.😉)