객체지향 프로그래밍(OOP)은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어 여러개의 독립된 단위,

즉 “객체”들의 모임으로 생각하는 것. 각각의 객체는 메시지를 주고 받고, 데이터를 처리할 수 있음.


캡슐화(Encapsulation): 하나의 문제 해결을 위한 data와 method를 한 단위로 묶는 것으로서, 클래스 내부 정의에 대해
                                      외부에서 볼 수 없도록 함이 특징(은닉화)
추상화(Abstraction)  : 객체(Object)의 자세한 성질을 무시하고(숨기고) 그들의 일반적인 성질을 나타낸다는 것.
                                   일반적으로 클래스는 클래스로 표현할 서브클래스(또는 객체)의 공통적인 성질과 행위를
                                   일반화해 디자인되며 그로부터 생성된 객체는 자신의 고유한 성질을 갖게 됨.
다형성(Polymorphism) : 다형성이란 같은 메시지에 대해 클래스에 따라 다른 행위를 하는 특성.
                                       일반적으로 같은 이름을 갖는 method에 대해 인자(Argument) 개수와 Data Type에 따라 수행되는
                                       행위가 달라짐을 의미. 
                                       다형성을 통해 사용자는 약속된 인터페이스를 따르는 서로 다른 객체들를 같은 방식으로
                                        사용할 수 있게 됨.
상속(inheritance)   : 기존에 있던 클래스(즉, 기존의 클래스로부터 상속받은)를 바탕으로 다른 특성을 추가해
                                새로운 클래스를 만들 수 있음.
인스턴스(Instance)  : 인스턴스는 추상화 개념 또는 클래스 객체, 컴퓨터 프로세스 등과 같은 템플릿(무엇인가를 만들 때                                       안내 역할 하는 데 사용되는 형식, 꼴, 틀 또는 모형 등을 의미)이 실제로 구현된 것.