OOP ?

: Object-Oriented Programming, 객체 지향 프로그래밍
: 여러개의 독립된 단위 "객체"들의 모임으로 프로그램 파악
특징

1. 자료 추상화(Abstraction)
불필요한 정보는 숨기고, 중요한 정보만을 표현함으로써 간단히 만드는 것
객체 내에 자세한 내용을 몰라도 중요 정보를 이용해 해당 객체를 사용 가능

2. 상속(Inheritance)
새로운 클래스가 기존의 클래스의 자료와 연산 이용 가능하게 하는 기능
상속 받는 새로운 클래스 -> 하위 클래스, 자식 클래스
상속하는 기존의 클래스 -> 상위 클래스, 부모 클래스
상속 통해 기존 클래스 상속받은 하위 클래스 이용해 요구에 맞추어 클래스 수정 가능
클래스 간 종속 관계 형성해 객체 조직화
더 일반적 코드를 재사용 및 작성 가능

3. 다형성(Polymorphism)
어떤 한 요소에 여러 개념을 넣어 놓는 것
같은 메소드라도 각 인스턴스에 따라 다양한 형태 가지는 것
즉, 객체의 변수나 메소드가 상황에 따라 다른 의미로 해석
오버 라이딩을 사용해 자식 클래스의 메소드가 부모 클래스의 메소드와 다르게 동작하거나 변수가 다른 값으로 지정 가능


Paypal, Visa 둘 다 PaymentGateway 클래스에서 상속 받은 하위 클래스들이지만 메소드를 각 내에서 오버 라이딩 하면서 해당 컨텍스트에 맞게 동작하는 구조인데, 이것이 다형성

4. 캡슐화(Encapsulation)
클래스 안에 관련 메소드, 변수 등 하나로 묶어줌
바깥에서의 접근을 막아 보안 강화 및 코드 관리에 용이