자동차
, 오토바이
라는 하위 클래스(sub-class)들의 공통적인 기능 (전진
,후진
)을 추출하여 이동 수단
이라는 상위 클래스에 정의자바에서의 인터 페이스로 예시를 들어본다. (추상 클래스로도 추상화 구현 가능). 객체 지향적 설계에서 인터페이스는 객체의 역할만을 정의하여 객체들 간의 관계를 유연하게 연결하는 역할. 즉, 인터페이스는 추상 메서드나 상수를 통해 어떤 객체가 수행해야 하는 핵심적인 역할만을 규정하고, 실제 구현은 해당 인터페이스를 구현하는 각각의 객체들에서 진행
자동차
,오토바이
의 공통 기능을 추출하여이동수단
이라는 인터페이스에 정의.
Car
,MotoBike
라는 클래스에서 앞서 인터페이스에 정의한 역할을 각각의 클래스의 맥락에 맞게 구현. 두 클래스 모두 전진과 후진 기능을 갖지만, 자동차는 자동차의 시동을, 오토바이는 오토바이의 시동을 걸어야 하므로 구현은 각 클래스에 따라 달라져야 한다.
이를 객체 지향 프로그래밍에서는 역할과 구현의 분리라 함
Car
,MotorBike
클래스 공통 속성과 기능들을 추출(추상화)하여Vehicle
클래스(상위 클래스)에 정의,extends
키워드를 통해 각각 하위 클래스로 확장하여 반복 코드를 제거.MotorBike
처럼 메서드 오버라이딩 통해 내용 재정의 가능.
오버라이딩을 통해moveForward()
,moveBackward()
를 각각의 클래스의 맥락에 맞게 재정의.
객체 지향 프로그래밍에서 다형성이란 한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것을 의미. 좀 더 구체적으로, 상위 클래스 타입의 참조변수로 하위 클래스의 객체를 참조할 수 있도록 함.
상위 클래스 타입의 참조 변수로 관계있는 하위 클래스들을 참조
또한,
인터페이스 적용 전과 적용 후를 비교하면Driver
클래스의 코드가 간결. 이를 도식화 하면
Driver
클래스는 각각의 클래스 내부 변경이나 다른 객체가 새롭게 교체되는 것을 신경 쓰지 않아도 인터페이스에만 의존하여 수정이 있을 때마다 코드 변경 필요 없다.
public
, default
, protected
, private
총 4가지 접근 제어자가 있다.