객체 지향 프로그래밍(Object-Oriented Programming, OOP)
- 프로그램을 명령어 또는 함수의 목록으로 보는 전통적인 명령형 프로그래밍의 절차지향적 관점에서 벗어나 여러 개의 독립적 단위, 즉 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임
- 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임
- 실세계의 실체(사물이나 개념)를 인식하는 철학적 사고를 프로그래밍에 접목하려는 시도에서 시작
- 프로그램 설계 철학
- OOP의 모든 것은 "객체"로 그룹화
- OOP의 4가지 주요 개념을 통해 재사용성을 얻을 수 있음
캡슐화(Encapsulation)
- 데이터와 기능을 하나의 단위로 묶는 것
✔︎ 데이터(속성)와 기능(메서드)을 따로 정의하는 것이 아닌, 하나의 객체 안에 넣어서 묶는 것 - 은닉(hiding) : 구현은 숨기고, 동작은 노출시킴
✔︎ 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
✔︎ 은닉화 특징을 살려서 코드를 작성하면 객체 내 메서드의 구현만 수정하고,
노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 만들 수 있다 - 느슨한 결합(Loose Coupling)에 유리 : 언제든 구현을 수정할 수 있음
✔︎ 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라,
코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미
추상화(Abstraction)
- 객체에서 공통된 속성과 행위를 추출하는 것
- 공통의 속성과 행위를 찾아서 타입을 정의하는 과정
- 내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념
- 추상화를 통해 인터페이스가 단순해짐
- 너무 많은 기능들이 노출되지 않은 덕분에 예기치 못한 사용상의 변화가 일어나지 않도록 만들 수 있음
- 추상화와 캡슐화의 차이
✔︎ 캡슐화 - 코드나 데이터의 은닉에 포커스
✔︎ 추상화 - 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스 - 본질
✔︎클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라고 부른다
상속(Inheritance)
- 부모 클래스의 특징을 자식 클래스가 물려받는 것
- 새로운 클래스가 기존의 클래스의 데이터와 연산을 이용할 수 있게 하는 기능
- 장점
✔︎ 재사용으로 인한 코드가 줄어든다
✔︎ 범용적인 사용이 가능
✔︎ 자료와 메서드의 자유로운 사용 및 추가가 가능 - 단점
✔︎ 상위 클래스의 변경이 어려워진다
✔︎ 불필요한 클래스가 증가할 수 있다
✔︎ 상속이 잘못 사용될 수 있다
다형성(Polymorphism)
- poly : 많은
- morph : 형태
- 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것
- 어떠한 요소에 여러 개념을 넣어 놓는 것
- 같은 이름을 가진 메서드라도 조금씩 다르게 작동된다
- 객체 지향 프로그래밍은 하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나
상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성이라는 특징을 갖게 된다
✔︎ 오버라이딩
- 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것
✔︎ 오버로딩
- 같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것
객체 지향 프로그래밍의 장단점
✔︎ 장점
- 클래스 단위로 모듈화시켜서 개발하기 때문에 업무 분담이 편리하고 대규모 소프트웨어 개발에 적합
- 클래스 단위로 수정이 가능하기 때문에 유지 보수가 편리
- 클래스를 재사용하거나 상속을 통해 확장함으로써 코드 재사용이 용이
✔︎ 단점
- 처리속도가 상대적으로 느리다
- 객체의 수가 많아짐에 따라 용량이 커질 수 있다
- 설계시 많은 시간과 노력이 필요하게 될 수 있다
'CodeStates > JavaScript' 카테고리의 다른 글
Section2 / Unit2 : 프로토타입 체인 (0) | 2023.05.11 |
---|---|
Section2 / Unit2 : 프로토타입과 클래스 (0) | 2023.05.11 |
Section2 / Unit2 : 클래스와 인스턴트 (0) | 2023.05.11 |
내장 고차 함수 메서드 (0) | 2023.05.11 |
Section2 / Unit1 : JS 고차함수 (0) | 2023.05.10 |