객체 지향 프로그래밍(Object-Oriented Programming), 즉 OOP
프로그램을 어떻게 설계해야 하는지에 대한 개념 또는 방법론.
초기 프로그래밍 방식은 절차적 프로그래밍 방식이었지만 복잡한 알고리즘에선 스파게티 코드가 만들어질 위험이 크므로 객제 지향 프로그래밍을 사용하게 되었다.
Bottom-up방식(작은 문제들을 해결할 수 있는 객체들을 만든 뒤, 이 객체들을 조합해서 큰 문제를 해결하는 방식)
1. 캡슐화(Encapsulation)
프로그램의 세부 구현을 외부로 드러나지 않도록 특정 모듈 내부로 감추는 것.
일반적으로 세 종류의 접근 제한이 사용된다.
public : 클래스의 외부에서 사용 가능하도록 노출
protected : 다른 클래스에게는 노출되지 않지만, 상속받은 자식 클래스에게는 노출
private : 클래스의 내부에서만 사용되며 외부로 노출되지 않음
2. 상속(Inheritance)
자식 클래스가 부모클래스의 특성과 기능을 그대로 물려받는 것.
3. 다형성(Polymorphism)
하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것을 말함. 이를 오버로딩(Overloading)이라한다.
4. 추상화(Abstraction)
대상의 특성 중 불필요한 부분은 무시하고 필요한 공통부분만 다루는 것.
관점에따라 다를 수 있다. 지도를 볼때 등고선만 보고 싶은 경우와 지하철 노선을 보고 싶은 경우가 다르듯이.