프로그램을 여러개의 "객체" 로 나누고 그 객체들의 상호작용으로 서술하는 방식.
코드의 재사용성이 높아진다.
유지보수가 쉽다.
코드가 간결해진다.
처리 시간이 비교적 오래 걸린다.
프로그램을 설계할 때 많은 고민과 시간을 투자해야 한다.
추상화(Abstraction)
필요로 하는 속성이나 행동을 추출하는 작업
인터페이스로 클래스들의 공통적인 특성(변수, 메소드) 들을 묶어 표현 하는 것
ex) 아우디, BMW, 벤츠는 모두 '자동차' 하는 공통점이 있다.
자동차라는 추상화 집합을 만들어두고, 자동차들이 가진 공통적인 특징들을 만들어 활용한다.
캡슐화(Encapsulation)
높은 응집도 와 낮은 결합도를 유지할 수 있도록 설계하는 것
한 곳에서 변화가 일어나도 다른 곳에 미치는 영향을 최소화 시키는 것
응집도 : 객체 안의 모듈 간의 요소가 얼마나 서로 밀접해 있는가를 나타내는 말
결합도 : 어떤 기능을 실행할 때 다른 클래스나 모듈에 얼마나 의존적인가를 나타내는 말
즉, 독립적으로 만들어진 객체들 간의 의존도를 최대한 낮게 만드는 것이 중요하다.
캡슐화는 정보 은닉(Information Hiding) 을 활용한다.
외부에서 접근할 필요가 없는 것들은 private으로 접근하지 못하도록 제한을 두는 것 이다.
상속(Inheritance)
하나의 클래스가 가지고 있던 특징들을 그대로 다른 클래스가 물려 받는 것
일반화 관계 : 여러 객체들이 지닌 공통된 특성을 부각시켜 하나의 개념으로 성립하는 과정
또 다른 캡슐화 : 자식 클래스를 외부로부터 은닉 하는 캡슐화의 일종
기능의 일부분을 변경하는 경우, 자식 클래스에서 상속받아 수정 및 사용함
Overriding : 부모 클래스의 메소드를 자식 클래스의 용도에 맞게 수정
코드의 재사용성을 높임 (메서드 재정의)
다형성(Polymorphism)
서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력
한 요소에 여러 개념을 넣어 놓는 것
간결한 코드 및 유연성 향상
Overloading : 같은 이름의 메서드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것.
Overriding : 같은 이름의 메서드가 여러 클래스에서 다른 기능을 하는 것.