-객체 지향 프로그래밍은 데이터 접근, 데이터 처리 과정에 대한 모형을 만들어내는 방식 >> 데이터와 기능을 합쳐서 생각
OOP(객체 지향 프로그래밍)
프로그램 설계철학이자 개념의 일종으로, 명령형 프로그래밍에 속한다.
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라,
프로그램을 객체라는 단위로 나누고, 그룹화 하여 이들의 상호작용으로 서술하는 방식이다.
(4가지의 주요 개념을 통해 재사용성을 얻을 수 있다.)
4가지의 주요개념
1. Encapsulation (캡슐화) : 코드가 복잡하지 않게 하며, 재사용성을 높인다.
- 데이터의 기능을 하나의 단위로 묶는 것. (하나의 객체 안에 넣어 묶어 *느슨한 결합을 함.)
- 구현을 숨기고, 동작만을 노출시킴. >> 객체 내 메서드의 구현만 수정하고, 노출된 메서드를 사용하는 코드의 흐름은
바뀌지 않도록 만드는 것이 가능하다.
2. Inheritance (상속) : 불필요한 코드를 줄여, 재사용성을 높인다
- 기본(부모) 클래스의 특징을 파생(자식) 클래스가 상속받는다.
- 기존의 클래스로 회사의 사원들을 두었을 때, 우리는 그 안에서 1) 이름, 나이, 성별, 주소 와 같은 속성이나, 2) 퇴근하기, 출근하기, 정보
전달하기 와 같은 메서드로 이를 구현했을 것이다.
하지만, 이 안에서 부서의 사원들을 두자면, 또 다시 그에 따른 1) 2) 를 구현하는 것은 비효율적이다.
이럴 때, 상속을 이용하여 회사의 사원 클래스를 상속 받아 같은 속성/메서드를 추가하는 것.
3. Abstraction (추상화) : 단순화된 사용으로 변화에 대한 영향을 최소화한다.
- 복잡한 내부 구현을 외부에서는 단순하게 노출되도록 하는 것 (기능 노출을 하지않아, 예기치 않은 사용상 변화가 일어나지 않도록)
- 인터페이스를 단순화 하는 것
4. Polymorphism (다형성) : 객체의 특성에 맞게 달리 작성하는 것이 가능하다
- 같은 메서드, 다른 방식의 구현
기본(부모) 클래스에 정의된 입력하기 메서드는
파생(자식) 클래스에서 각기 사용될 때, 1) 일자로 입력 하기 2) 버튼을 눌러 입력하기 3) 그려서 입력하기 4) 소리로 입력하기
등등 다르게 작동된다. (다형성이 없다면, 기본 클래스에 각각의 경우를 모두 분류하여 상황에 맞게 지정해주어야 한다.)
느슨한 결합: 코드 실행 순서에 따라서 절차적으로 코드를 작성하는것이 아니라,
구동을 위한 중요 과정 몇가지를 메소드로 정하여 코드만 보고 해당 인스턴스의 기능을 상상할 수 있게 작성하는 것.
언제든 구현을 수정할 수 있다는 장점이 있다.
ex) 스마트키로 자동차 열기
1. 스마트 키 > 자동차 연결 > 오픈버튼 > 문열림
과 같이 어떤 역할을 하는 지 확인이 가능하며,
(특징으로는)
절대적인 하나의 스마트 키가 아닌 다른 스마트 키도 연결하여 사용할 수 가 있다.
또한 인터페이스만 준수한다면, 자동차가 아닌 다른곳의 쓰임도 가능하며,
스마트키가 없다고 하여, 자동차를 아예 못여는 것도 아니다
캡슐화와 추상화의 차이점
캡슐화와 추상화는 둘 다 외부로부터 내부의 구체적 기능을 숨긴다는 것에서 같은 개념이라고 느껴진다.
하지만 둘의 차이점의 기능을 숨기는 의도에 있는 것 같다.
캡슐화는 정보 보안을 위해 내부의 기능을 외부로부터 숨긴다. (은닉에 포커스가 맞춰있는 것)
우리의 정보 기능을 숨기고, 밖의 코드의 변화가 안까지 영향을 미치게 하지 못하도록 하는 것이다.
하지만, 추상화는 아니다.
기능을 숨겨 외부로부터 보호의 목적이 아닌 , 이를 사용하는 유저에게 필요하지 않은 메서드를 노출시키지 않으므로써
간단한게 사용할 수 있도록 하는 것. 복잡한 행동이 아닌 단순한 행동으로서 필요한 목적을 이루게 하고 싶은 것에 의도가 있다.
(절차 지향 프로그래밍): 순차적(절차적) 으로 생각하기. 별개의 변수, 함수를 순차적으로 이동함.
'TIL > JavaScript' 카테고리의 다른 글
| 프로토타입 체인 (0) | 2023.01.14 |
|---|---|
| prototype(프로토타입) (0) | 2023.01.13 |
| 객체 지향 프로그래밍 (클래스와 인스턴스) in JS (0) | 2023.01.13 |
| 함수 (0) | 2022.12.23 |
| 반복문(for, while) (0) | 2022.12.22 |