Object-Oriented Programming
우리가 실생활에서 쓰는 모든 것을 객체라 하며, 객체 지향 프로그래밍은
프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말한다.
객체는 클래스라는 틀에서 생겨난 실체(instance)이다.
객체 지향 프로그램은 객체와 객체 간의 연결로 되어 있으며
각각의 객체 안에 자료구조와 알고리즘이 들어있는 것이다.
=객체 지향 모델링은 기능이 아닌 객체가 중심이 되며 "누가 어떤 일을 할 것인가?"가 핵심이 되며
객체를 도출하고 각각의 역할을 정의해 나가는 것에 초점을 맞춘다.
클래스를 이용해 연관 있는 처리부분(함수)과 데이터 부분(변수)을 하나로 묶어 객체(인스턴스)를 생성해 사용한다는 점이다.
객체지향 프로그래밍에서는 프로젝트를 독립적인 객체 단위로 분리해서 작업할 수 있기 때문에 여러 개발자와 협업해 규모가 큰 프로젝트를 진행할 수 있으며 유지보수측면도 뛰어나다는 장점이 있다.
OOP Basic Concepts
- Encapsulation(캡슐화)
- Inheritance(상속)
- Abstraction(추상화)
- Polymorphism(다형성)
추상화(abstraction)
객체들의 공통적인 특징(기능, 속성)을 도출하는 것
객체지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있다.
실제로 노출되는 부분은 단순하게 만든다는 개념
=>클래스가 없는 객체지향 언어도 존재 ex.JavaScript)
캡슐화(encapsulation)
실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있다.
객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리하는 것
코드가 묶여있어서 오류가 없어 편리하다.
데이터를 보이지 않고 외부와 상호작용을 할 때는 메소드를 이용하여 통신을 한다.
느슨한 결합(Loose Coupling)에 유리: 언제든 구현을 수정할 수 있음
=>보통 라이브러리로 만들어서 업그레이드해 사용할 수 있다.
상속성(inheritance)
하나의 클래스가 가진 특징(함수, 데이터)을 다른 클래스가 그대로 물려받는 것
=>부모 클래스의 특징을 자식 클래스가 상속(물려)받는 것
이미 작성된 클래스를 받아서 새로운 클래스를 생성하는 것
기존 코드를 재활용해서 사용함으로써 객체지향 방법의 중요한 기능 중 하나에 속한다.
다형성(polymorphism)
약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는 것
동일한 명령의 해석을 연결된 객체에 의존하는 것
프로그램 언어 각 요소들(상수, 변수, 식, 객체, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다.
=>여러 형태를 받아들일 수 있는 성질, 상황에 따라 의미를 다르게 부여할 수 있는 특성 등으로 정의하며
다형성이란 하나의 타입에 여러 객체를 대입할 수 있는 성질이다
오버라이딩(Overriding) - 부모클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것
오버로딩(Overloading) - 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하여 사용하는 것
동적바인딩(Dynamic Binding)
가상 함수를 호출하는 코드를 컴파일할 때, 바인딩을 실행시간에 결정하는 것.
파생 클래스의 객체에 대해, 기본 클래스의 포인터로 가상 함수가 호출될 때 일어난다.
함수를 호출하면 동적 바인딩을 통해 파생 클래스에 오버라이딩 된 함수가 실행
프로그래밍의 유연성을 높여주며 파생 클래스에서 재정의한 함수의 호출을 보장(다형 개념 실현)
객체 지향 프로그래밍의 장점
소프트웨어의 생산성 향상
- 신뢰성 있는 소프트웨어를 손쉽게 작성할 수 있다. (개발자가 만든 데이터를 사용하기 때문에 신뢰할 수 있다.)
- 코드를 재사용하기 쉽다 (상속, 캡슐화, 다형성으로 인해 재사용할 수 있다.)
- 업그레이드가 쉽다.
- 디버깅이 쉽다.
실세계에 대한 쉬운 모델링
- 실세계에 대한 모델링을 좀 더 쉽게 해준다. (모든 것을 객체들의 상호작용으로 생각)
보안성 향상
- 보안성이 높다 (캡슐화, 데이터 은닉, 다형성으로 인해 필요한 정보를 재정의하거나 getter, setter를 이용하기 때문에 보안성이 높다.)
객체 지향 프로그래밍의 단점
느린 실행 속도
- 절차지향 프로그래밍에 비해 느린 실행 속도
- 필요한 메모리양의 증가
'Javascript' 카테고리의 다른 글
비동기처리 (콜백함수, Promise, async/await) (0) | 2022.11.02 |
---|---|
프로토타입(prototype), 프로토타입 체인 (0) | 2022.09.21 |
클래스(class)와 인스턴스(instance) (2) | 2022.09.21 |
일급객체와 고차함수 (0) | 2022.09.20 |
이벤트 객체 (0) | 2022.09.14 |