Object-oriented programming(OOP)는 프로그래밍 패러다임으로 'objects'라는 개념에 기반합니다.
여기서 'objects'는 클래스의 인스턴스를 말합니다.
클래스는 'objects'를 만들기 위한 청사진인데 데이터와 행동을 가지고 있습니다.
OOP는 객체들이 상호작용함으로써 복잡하고 거대한 소프트웨어 시스템을 구성할 수 있게 합니다.
OOP를 구현한 프로그래밍 언어의 종류는 많습니다.
그 중 가장 대중적인 것은 class-based OOP입니다.
OOP는 주요 4가지 principles가 있습니다.
Encapsulation
캡슐화는 클래스안에 데이터와 함수를 담는 것을 말합니다.
이때 데이터와 함수는 외부에 공개할 수도 있고 공개하지 않을 수 있습니다.
Inheritance
클래스는 계층 구조를 가질 수 있습니다.
하나의 클래스에서 파생된 하위 클래스가 생길 수 있다는 것입니다.
이때 파생된 클래스가 상위 클래스를 상속받았다고 표현합니다.
이렇게 상속을 받으면 상위 클래스의 데이터와 함수를 가진채 추가적으로 자신만의 데이터와 함수를 가질 수 있습니다.
Polymorphism
다형성은 런타임 시간 동안 타입이 바뀔 수 있는 것을 말합니다.
Abstraction
추상화는 실제 사물에 대한 모델, 뷰, 또는 기타 집중된 표현을 나타냅니다.