불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 공통의 특징(속성 ,기능)들을 하나로 묶어 표현하는 방법.
객체의 데이터와 메서드를 하나로 묶어서 외부의 다른 객체들로부터 객체 내부의 구현을 감추고 사용법만 제공하는 것을 말한다. 각 객체는 고유한 데이터를 가지고 있는데 이런 데이터를 다른 객체에게 제공할지를 캡슐화를 통해 결정한다. 다시 말해 객체 외부에서는 객체 내부정보에 직접 접근하거나 조작할 수 없고 외부에서 접근할 수 있도록 정의된 오퍼레이션(getter, setter)을 통해서만 관련 데이터에 접근할 수 있다.
하나의 객체가 여러가지 타입을 가질 수 있는 성질을 말한다. 상속 관계에 있을 때 상위클래스의 타입으로 하위 클래스의 객체를 레퍼런스 할 수 있다. 다형성을 구현하는 방법에는 오버로딩, 오버라이딩, 함수형 인터페이스가 있다.
[다형성 예제코드]
SuperClass so = new SubClass1(); → 가능 ( 부모타입의 자식생성자) → 묵시적 upcasting
SubClass1 sso = new SuperClass(); → 불가능 ( 자식타입의 부모생성자)
SubClass1 ssso = new SubClass2(); → 불가능 ( 자식타입의 자식생성자)
기존 클래스를 수정하지 않으면서 기존 클래스에 이미 정의되어 있는 내용을 확장해서 사용할 수 있는 방법을 제공하는 기술이다.