✅ 객체지향프로그래밍 (object-oriented programming(OOP))
프로그램 설계방법론이자 개념의 일종으로, 명령형 프로그래밍에 속한다.
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고
이들의 상호작용으로 서술하는 방식이다. 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다.
object-oriented programming(OOP)
- OOP는 프로그램 설계 철학입니다.
- OOP의 모든 것은 "객체"로 그룹화됩니다.
- OOP의 4가지 주요 개념을 통해 재사용성을 얻을 수 있습니다.
OOP는 객체로 그룹화된다. 이 객체는 한번 만들고 나면, 메모리상에서 반환되기 전까지 객체 내의 모든 것이 유지된다.
객체 지향 프로그래밍의 주요 개념
- 캡슐화 (Encapsulation)
- 상속 (Inheritance)
- 추상화 (Abstraction)
- 다형성 (Polymorphism)
✅ 캡슐화 (Encapsulation)
캡슐화는 데이터(속성)와 기능(메서드)을 따로 정의하는 것이 아닌, 하나의 객체 안에 넣어서 묶는 것입니다.
데이터(속성)와 기능(메서드)들이 느슨하게 결합되는 것이다. 느슨한 결합은 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미합니다.
캡슐화라는 개념은 "은닉화"의 특징도 포함하고 있는데, 은닉화는 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것입니다.
-
public: 클래스의 외부에서 사용 가능하도록 노출시키는 것이다.
-
protected: 다른 클래스에게는 노출되지 않지만, 상속받은 자식 클래스에게는 노출되는 것이다.
-
private: 클래스의 내부에서만 사용되며 외부로 노출되지 않는다.
✅ 상속 (Inheritance)
상속은 부모 클래스의 특징을 자식 클래스가 물려받는 것이다. 기능의 일부분을 변경해야 할 경우 자식 클래스에서 상속받은 그 기능만을 수정해서 다시 정의하게 되는데, 이러한 작업을 '오버라이딩(overriding)'이라고 한다. 상속은 캡슐화를 유지하면서도 클래스의 재사용이 용이하도록 해 준다.
✅ 추상화 (Abstraction)
추상화는 내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념이다.
추상화를 통해 인터페이스가 단순해진다. 하지만 반대로 너무 많은 기능들이 노출되지 않아 예기치 못한 사용상의 변화가 일어나지 않도록만들 수 있다.
추상화와 캡슐화를 비교하면 종종 헷갈려하는 개념 중 하나인데, 캡슐화는 코드나 데이터의 은닉에 포커스가 맞춰져있다면,
추상화는 클래스를 사용하는 사람이 불필요한 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져있다.
클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라고 부른다. 이것이 추상화의 본질이다.
✅ 다형성 (Polymorphism)
다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다.
다형성을 HTML 엘리먼트를 예로 들어 설명해 보겠습니다. DOM을 배울 때 Textarea(TextBox), Select, 그리고 Checkbox 등을 배웠을 텐데요, HTML에서는 이와 같이 모든 요소를 전부 Element라고 부릅니다.
모든 엘리먼트들은 전부 객체이므로, 내부적으로 모양을 그리고 화면에 뿌리는 메서드가 존재할 것입니다. 이 메서드가 render라는 이름을 갖고 있다고 가정해 봅시다.
이 경우에는, TextBox, Select, Checkbox의 공통의 부모인 HTML Element라는 클래스에 render라는 메서드를 만들고 상속을 받게 만들 수 있습니다. 그런데 다형성의 핵심은 이 같은 이름의 render라는 메서드가 조금씩 다르게 작동한다는 데 있습니다.
TextBox는 가로로 긴 네모 상자와 커서가 있는 형태일 것이고, Select 박스는 눌렀을 때 선택지가 나오도록 화면에 그려야 할 것입니다. 이처럼 같은 이름을 가진 메서드라도 조금씩 다르게 작동합니다. 이것이 바로 다형성입니다.
'JavaScript' 카테고리의 다른 글
[Javascript]콜백함수와 비동기 처리 - Promise (0) | 2023.03.21 |
---|---|
[Javascript] 콜백함수와 비동기 처리 part1 (1) | 2023.03.21 |
[JavaScript] - 프로토타입과 클래스를 알아보자! (0) | 2023.03.15 |
[JavaScript] - JavaScript (타입) (0) | 2023.02.20 |
[JavaScript] - JavaScript 개념! (0) | 2023.02.20 |