앞서 실존하는 대상의 상태와 행위를 추상화하여 클래스로 나타낼 수 있다고 하였다.
이러한 객체간의 협업(상호작용)을 통해 프로그래밍 하는 것을 객체지향 프로그래밍이라고 한다.
OOP의 대표적인 특성은 4가지로 나타낼 수 있다.
추상화(Abstraction), 다형성(Polymorphism), 상속(Inheritance), 캡슐화(Encapsulation)
현실의 대상으로부터 속성과 기능을 추출하여 클래스로 나타낼 수 있다.
추상클래스는 미완성 설계도, 인터페이스는 기본 설계도
미완성은 인스턴스화 할 수 없으며, 상속 및 구현한 클래스를 통해 사용가능하다.
단, 이때 상속 및 구현 클래스는 추상메서드를 반드시 오버라이딩해야 한다.(구현의 강제성 부여)
구현과 사용의 분리
하나의 객체를 여러가지 타입으로 참조할 수 있다.
단, 상속을 전제로 한다.(모든 클래스는 Object Class를 상속받는다.)
부모 타입의 참조변수로 자식 인스턴스를 참조할 수 있다.
instance of 연산자를 통해 해당 타입으로 참조가능한지를 알 수 있다.
A instance of B == true -> B는 A의 조상이다.
virtual Method Invocation 및 Dynamic Binding
멤버 변수는 참조 변수를 따르고, 오버라이딩된 메서드는 인스턴스의 메서드를 따른다.
부모의 자산을 물려받아 자식을 정의하고, 재사용이 가능하다.
단, 생성자와 초기화 블록은 상속되지 않는다.
코드 절감 및 유지보수 용이, 취사 선택은 불가능하다.
extends, IS A(구현상속), 단일 상속
모든 클래스의 시조 클래스인 Object 클래스가 존재한다.
메소드 오버라이딩(Method Override) @Override
상속을 통해 물려받은 메소드를 하위클래스에서 계승하되 수정,보완하는 경우를 뜻한다.
super : 부모 클래스 호출
데이터의 은닉과 보호를 위해 접근 지정자를 활용하며, 메소드를 통해 데이터를 보호한다.
접근 지정자를 사용하여 데이터의 접근 범위를 설정한다.(getter,setter)
public > protected > (default) > private
활용 지정자를 통해 데이터의 특성을 나타낸다.
모든 클래스는 하나의 패키지에 속해야 한다.
패키지란 물리적인 디렉토리를 뜻한다. 일반적으로 도메인을 역순으로 작성하고, 소문자로 작성한다.
다른 패키지의 클래스를 사용하는 경우 import를 사용한다.