OOP 는 객체지향 프로그래밍이라는 뜻으로 '객체'들의 상호작용(메세지 주고받기, 데이터 처리 등)으로 프로그램 로직을 구성하는 프로그래밍 이다.
OOP 라고하면 캡슐화, 추상화, 다형성, 상속성이 자동으로 떠올라야 한다.
캡슐화란 하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것을 의미한다.
따라서 클래스를 우리가 만들 때 훗날 이클래스에서 만들어진 객체가 특정한 목적을 가지고 사용해야할 변수와 그 변수를 가지고 특정한 메서드를 관련성 있게 클래스에 구성해야한다.
캡슐화의 중요한 목적은 정보의 은닉화이다.
정보를 은닉함으로써 외부에서 접근을 못하게 하고 오직 메서드를 통해서 간접적인 접근만을 할 수 있게 하는 것이다.
추상화에는 추상클래스(Abstract Class)와 인터페이스(Interface)의 개념이 들어간다.
추상화의 의미는 클래스를 구현하면서 공통적인 요소나 필수적인 요소를 추출하는 과정이라 생각한다.
예) 싼타페, 벤츠, BMW 라는 객체 들은 Car 라는 공통적인 특징을 가지고 있고,
더 세부적인 특징으로는 자동차를 타고 달릴 수 있고, 문을 열고 닫을 수 있고, 바퀴가 4개가 있다는것이 같듯이
공통적인 특징의 집합을 추상클래스나 인터페이스로 정의를 할 수가 있다.
다형성은 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해준다. 이를 통해 코드의 재사용, 코드길이가 감소 되어 유지보수가 용이하도록 도와주는 개념이다.
자바에서 다형성과 관련된 키워드는 오버라이딩(Overriding)과 오버로딩(Overloading) 이다.
오버라이딩은 부모클래스에서 상속받은 서브클래스 즉 자식클래스에서 부모클래스, 즉 상위클래스에서 만들어진 메서드를 자신의 입맛대로 다시 재창조해서 사용하는 것을 말한다.
오버로딩은 하나의 클래스 안에서 같은 이름의 메서드를 사용하지만 각 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념인데 오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 갯수나 데이터 타입이 다르면 오버로딩이 적용되어 메서드 이름이 같아도 문법 에러가 나지 않는다.
상속은 객체지향의 꽃이라고 할 수 이다.
상속이란 기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념이다.
기존클래스에 기능을 가져와 재사용할 수 있으면서도 새럽게 만든 클래스에 새로운 기능을 추가할 수 있게 만들어 준다.
자바에서는 다중상속(여러 클래스를 상속 받는 것)을 지원하지 않는다.
클래스 A 가 B,C 클래스를 상속받는다고 가정했을때, B와 C 에 같은 이름을 가진 메서드가 있으면 A에서 사용할때 어떤 메서드를 사용할 지 모르기 때문이다.