
추상화(Abstraction)
- 객체의 공통적인 속성과 기능을 추출하여 정의
- 함수, 변수, 클래스 모두 추상화
추상화 클래스(abstract class): 추상화 method가 하나라도 있는 클래스
인터페이스(interface): 추상화 클래스 안의 method 가 모두 추상화 method인 경우
- 객체가 수행해야 하는 역할만을 규정하고, 실제적인 구현은 해당 인터페이스를 구현하는 각각의 객체들에게서 하도록 함.(overriding) (역할과 구현의 분리)
상속(Inheritance)
- 기존의 클래스를 재활용하여 새로운 클래스를 작성
- 클래스 간 공유된 수 있는 속성과 기능들을 상위 클래스로 추상화시켜, 해당 상위 클래로부터 확장된 하위 클래스들이 모두 상위 클래스의 속성과 기능을 사용할 수 있게 함
- method overriding: 상위 클래스 내용 재정의
interface vs inheritance
- interface: 규정한 역할을 하위 클래스에서 구체적으로 구현하도록 강제
- inheritance: 상위 클래스에서 구체적인 내용 정의해 두고, 하위 클래스에서 재사용/선택적으로 재정의하여 사용 가능
다형성(Polymorphism)
- 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질
- 한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 만듦 -> 상위 클래스 타입의 참조변수로 하위 클래스의 객체를 참조할 수 있도록 함
- method overriding: 각각의 클래스에서 재정의하면, 같은 이름의 method가 상황에 따라 다른 역할 수행
- method overloading: 하나의 클래스 내에서 같은 이름의 method 여러 개 중복해서 정의
캡슐화(Encapsulation)
- 서로 연관 있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호
- 각 객체 고유의 독립성과 책임 영역을 안전하게 지키고자 함
- 데이터 보호(data protection): 외부로부터 클래스에 정의된 속성과 기능들을 보호
- 데이터 은닉(data hiding): 내부의 동작을 감추고 외부에는 필요한 부분만 노출
- 접근제어자(java):
public, default, protected, private
getter, setter
references
객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화
Polymorphism, Encapsulation, Data Abstraction and Inheritance in Object-Oriented Programming