객체 지향 프로그램. 프로그래밍 패러다임 중 하나로, 프로그래밍을 객체들의 모임으로 파악하고자 한다. 다른 패러다임 중 하나인 절차 지향 프로그래밍과 달리 OOP는 객체들이 서로 커뮤니케이션하며 데이터를 처리할 수 있다.
여기서 객체란, 특정한 대상을 나타내는 개념이다. '나'라는 사람, 내가 쓰는 '아이폰 11'이라는 스마트폰, 오늘 신고있는 그 '신발' 과 같이 각 대상 하나하나를 객체라고 할 수 있다. 같은 아이폰이더라도 누구의 소유인지, 언제부터 썼는지, 액정의 상태가 어떻게 되는지 등 세부사항이 모두 다르기 때문에 그 대상을 나타내는 객체 자체는 유니크하다고 할 수 있다.
:객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
-불필요한 정보를 감출 수 있다
-객체의 데이터를 외부에서 직접 접근하지 못하게 막는다
ex) 리모컨을 사용할 때 우리는 필요한 기능만 사용하지, 리모컨 내부의 회로 및 설계를 이해하며 사용하지는 않는다
부모 클래스의 데이터들을 자식 클래스가 받을 수 있다 ( 수정 가능 )
상속을 할 때 캡슐화를 유지하여 재사용을 쉽게 할 수 있다
ex) 아이폰이라는 클래스는 아이폰11과 아이폰12에 각각 아이폰의 데이터들을 물려주지만, 아이폰11과 아이폰12이 가진 데이터가 모두 같지는 않다(상속 받으며 정보를 수정할 수 있기 때문)
ex) 아이폰이라는 클래스를 잘 추상화하여 만들어놓는다면, 아이폰11, 아이폰12 등의 업데이트가 있을 때 세부 자식 클래스들의 클래스들을 건드리지 않고도 손쉽게 변경사항을 적용시킬 수 있다
ex) 아이폰11과 아이폰12의 기능과 성능, 디자인은 비슷하지만 완전히 같지는 않다.
+++ 오버라이딩 : 부모 클래스로부터 상속을 받은 속성에 대해 자식 클래스에서 물려받은 속성을 재정의 하는 것
+++ 오버로딩 : 같은 이름의 메소드를 상황에 따라 다르게 할 수 있는 것(파라미터 수정 등)