OOP는 객체지향 프로그래밍으로 실제 어느 사물에 대입하여 프로그래밍하는 거라고 설명들한다.
딱 정의할 수 있는 건 객체지향은 프로그래머들이 프로그래밍을 더 쉽게, 더 잘하기 위해 만든 방법론이라는 것이다.
데이터와 기능이 클래스로 캡슐화된 컴퓨터 자원의 묶음을 객체라고 한다.
대학교에서 강의를 들으면 이것을 붕어빵에 비유하는데 밀가루와 팥이 클래스라는 붕어빵 틀에 찍혀서 객체라는 붕어빵이 나오게 되는것이라고 설명한다.
즉, 무의미한 재료를 클래스라는 틀에 넣으면 유의미한 데이터와 기능을 가진 객체가 되는 것이다.
은닉성 : 내부구조는 private으로 감춰놓고 외부에서 조작해도 되는 것은 public으로 공객하는 것, 이로 바깥의 간섭으로 발생하는 오류를 방지할 수 있음
Interface : 상세한 구현은 생각하지 않고 객체들이 가진 공통부분을 뽑아 설계하는 것, 쉽게 말해 어떠한 기능을 정의 해놓지 않고 단지 비슷한 기능을 모아서 어떻게 만들겠다고 추상적으로 선언만 해놓은 것
조립 : 클래스를 조립해서 또 다른 클래스를 생성
상속 : 부모 클래스의 변수들과 메소드들을 그대로 물려받아서 중복을 없애고 거기에 새로운 변수와 메소드를 추가하여 새로운 클래스를 자식클래스로 생성
추상클래스 : 자체적으로는 객체를 만들 수 없지만 자식클래스들이 공통적으로 가져야 하는 변수와 메소드만 정의하여 자식클래스에 활용되는 클래스, 즉 자식클래스의 공통 분모 역할만을 위한 클래스라고 볼 수 있음
다향성 : 부모 클래스에서 정의된 메소드의 작업이 자식클래스에 다른 것으로 override(대체)될 수 있는 걸 말함