객체 지향 프로그래밍 (Object Oriented Programming)은 데이터와 기능이 별개로 취급되지 않고, 한 번에 묶어서 처리를 가능하게 해준다.
- 객체로 그룹화된다.
- 메모리상에서 반환되기 전까지 객체 내의 모든 것이 유지된다.
- 객체 내에는 메서드와 속성이 존재한다.
OOP Basic Concepts
객체 지향 프로그래밍의 주요 개념에는 크게 네 가지 기본적인 개념이 있다.
- Encapsulation (캡슐화)
- Abstraction (추상화)
- Inheritance (상속)
- Polymorphism (다형성)
1. 캡슐화 Encapsulation
- 데이터와 기능을 따로 정의하지 않고 하나의 단위로 묶는 것
- 은닉(hiding): 내부 데이터나 내부 구현이 외부로 노출되지 않도록하면서, 객체 외부에서 필요한 동작(메서드)만 노출시킴
객체 내 메서드의 구현만 수정하고, 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 할 수 있다. - 느슨한 결합(Loose Coupling), 언제든 구현을 수정할 수 있음
코드 실행 순서에 따라 코드를 작성하는 것이 아닌, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것
=> 코드나 데이터의 은닉시 사용
코드를 복잡하지 않게 만들고 재사용성을 높임
2. 추상화 Abstraction
- 내부 구현은 복잡하지만 실제로 노출되는 부분은 단순하게 만든다는 개념
- 인터페이스(interface)를 단순화할 수 있다. (클래스 정의 시, 메서드와 속성만 정의한 것)
- 예기치 못한 사용상의 변화가 일어나지 않는다.
=> 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것
변화에 대한 영향을 최소화
3. 상속 Inheritance
부모 클래스의 특징을 자식 클래스가 물려받는 것 (기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속)
ex) A클래스의 속성과 메소드 => B클래스에 상속 => B클래스가 A클래스의 속성과 메소드를 가지게 된다.
=> 불필요한 코드를 줄여 재사용성을 높임
4. 다형성 Polymorphism
poly = "많은", morph = "형태" => 다양한 형태를 가질 수 있다
객체가 똑같은 메서드라 하더라도 다른 방식으로 구현될 수 있다.
=>동일한 메서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능
'JavaScript' 카테고리의 다른 글
비동기 처리방식 - Promise /async & await (1) | 2023.04.18 |
---|---|
[객체 지향 프로그래밍]프로토타입 체인 (0) | 2023.03.16 |
[객체 지향 프로그래밍] 프로토타입과 클래스 (0) | 2023.03.15 |
[객체 지향 프로그래밍]class 와 instance (0) | 2023.03.15 |
원시 자료형과 참조 자료형의 종류와 특징 (feat. 얕은 복사와 깊은 복사) (0) | 2023.03.05 |