컴퓨터 프로그래밍 패러다임 중 하나(절대적인 것 아님)
기존의 절차지향 프로그래밍의 관점에서 벗어나 독립 단위인 객체의 모임으로 파악
(각각의 객체가 있고 이 객체 들을 잘짜여지게 프로그래밍 함)
각각의 객체는 메세지를 주고받고(메세지의 종류는 다양함), 데이터를 처리 할수 있는 능력 있음
(ex 이미지를 처리 객체, 통신을 위한 객체(서버, 클라이언트 객체)
객체 지향적으로 작성한 코드는 알아보기 쉽고 유지보수에 유리하다
클래스, 객체, 메서드
클래스 (class)(틀, 정의)
같은 종류의 집단에 속하는 속성과 행위를 정의한 것(=변수와 메서드로 구성된다)
클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인해야 한다
객체(Object)(=인스턴스)
클래스의 인스턴스(객체)로, 실제로 메모리 상에 할당 된 실체이다
자신(정의) 공유의 속성을 가지며, 클래스에 정의된 행위를 수행(행위=메서드)한다
객체와 클래스 예시
사람이라는 클래스에 먹는다는 메서드가 있다면, 사람이라는 개념은 먹지못하지만 실제 존재하는 정한솔은 먹을 수있다
그리고 그 외에 사람들은 똑같이 먹을 수 있다. 그리고 각각의 속성을 가진다.
배부르다는 속성이 있다면 각각의 행동에의해 결정된다
그러나 그걸 우리는 묶어서 사람으로 부를수 있다.
메서드(Method)(실체의 동작)
클래스로부터 생성된 객체를 사용하는 방법(위 예시에서 행위)
메소드는 한 객체의 속성을 조작하는 데에 사용 한다(배고프다는 속성을 먹는다 행위로 변화를 주는 것처럼)
OOP is A.P.I.E(갖추야할 것) oop는 a Pie이다 라고 읽음
Abstraction(추상화) : 자료 표현을 추상적으로 나타내는 추상 자료형을 사용함
추상화는 객체들의 공통 특징(property, method)을 뽑아 하나의 클래스(새로운 타입의 사용자 데이터형)로 표현하는 것이다.
Polymorphism(다형성) : 오버로딩과 오버라이딩을 하여 하나의 메소드명으로 다양한 동작을 구현할 수 있음
Encapsulation(캡슐화) : 사용자에게 불필요한 정보를 은닉/ 보호해야 한다.