객체 지향 프로그래밍 (OOP, Object Oriented Programmin)이란
데이터를 추상화시켜 상태(속성)와 행위(methods)를 가진 객체(object)로 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직(흐름)을 구성하는 프로그래밍 방법을 말한다.
프로그램을 실제 세상에 가깝게 모델링하는 기법
ex) 로봇 설계도, 쿠키틀


왼쪽에 있는 코드를 다른 개발자에게 공유하고, 반복되는 (1,2)를 하나로 묶어서 편하게 쓸 수 있는 방법으로 클래스 사용이 가능하다.
class는 바로 만들 수 없고, 일단 절차지향적으로 생각하고 반복되는 무언가가 있고 하나의 집단에서 행위를 나눌 수 있겠구나, 상태, 속성을 나눌 수 있겠구나라고 판단이 될 때 class로 나눌 수 있다.
오른쪽에 있는 그림에 나와있는 init 메소드는 생성자(constructor)로, 클래스로 인스턴스를 하나 만들었을때 즉시 실행되는 함수이다.
cal1=Cal(1,2) 처럼 객체를 생성하면 메모리에 올라오고 그러면 즉시 init 메소드가 실행된다.
cal1에는 namespace 공간이 생기고 이 공간 안에는 a가 있고, b가 있고,
add,sub,mul,div가 있다.
print(cal1.a)
print(cal2.b)
print(cal1.add())
이렇게 cal1.a처럼 점(.)을 찍는 순간 cal1 공간에 접근이 가능해진다.
class에서 정의한 것(설계도)을 토대로 실제 메모리상에서 할당된 것 (실제 사물, object)으로
실제 프로그램에서 사용되는 데이터이다.
하나의 class로 만들어진 여러 instance(object)는 각각 독립적이다.
ex) 실제 로봇
★★ 인스턴스와 객체는 비슷한 언어로 사용되지만 분명한 차이가 있다.
① 캡슐화 (encapsulation)
객체(Object)의 속성과 행위(methods)를 하나로 묶고,
구현된 일부를 외부에 감추어 은닉한다.
② 추상화 (abstraction)
불필요한 정보는 숨기고 중요한(필요한)정보만을 표현함으로써
공통의 속성이나 행위(methods)를 하나로 묶어 이름을 붙이는 것
③ 상속화 (inheritance)
부모 class 속성과 행위(methods)를 그대로 상속받고 행위(methods)의 일부분을 수정해야할 경우 상속받은 자식 class에서 해당 행위 methods만 다시 수정하여 사용할 수 있도록 한다.
또한 자식 class에서 추가적으로 속성이나 행위를 정의할 수 있게 한다.
④ 다형성 (polymorphism)
여러 형태를 가질 수 있도록 한다.
즉, 객체를 부품화할 수 있도록 한다.