📌절차적 언어
일어나는 사건과 순서에 따라 분석을 진행하는 방식의 언어
즉 실행 순서 즉 절차가 더 중점이 되는 언어이다.
📌객체지향 언어
절차 지향이 사건의 흐름 단계라면 객체 지향은 데이터의 단위를 중심으로 분석하는 방식의 언어
즉 객체들의 종류와 속성들이 더 중점이 되는 언어이다.
객체지향 프로그래밍을 통해 데이터의 접근 데이터의 처리 과정에 대한 모형을 만들어 내는 방식을 통해 데이터와 기능이 별개로 취급되지 않고, 한 번에 묶여서 처리할 수 있게 되었습니다.
자바스크립트는 엄밀히 말해 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성할 수 있습니다.
🦍절차 지향 vs 🦧객체 지향
두 언어로 짜인 예제를 보고 비교해 보자
//절차적 프로그래밍
function constructor() {
let value = 0;
value++;
value--
value++;
return value
}
console.log(constructor()) //1
//겍체지향 프로그래밍
class ObjectCounter {
constructor() {
this.value = 0;
}
//객체 지향 언어
increase() {
this.value++
}
decrease() {
this.value--
}
getValue() {
return this.value
}
}
let counter1 = new Counter()
counter1.increase()
counter1.getValue() // 1
장점 | 단점 | |
절차적 프로그래밍 | -속도가 매우 빠르다 | -실행순서가 정해져서 순서가 바귀면 동일한 결과를 보장하지 못한다 -유지 보수와 디버깅이 어렵다 |
객체 지향 프로그래밍 | -프로그램 신뢰성이 높다 -코드 재사용이 쉽다 -업그레이드와 디버깅이 쉽다 |
-속도가 느리고 설계에 시간이 많이 든다 |
그럼 둘 중에 어느 것이 더 좋을까??
사실 둘 중에 어느 것이 좋고 어느 것으로만 프로그램을 짜야하고 그런 룰은 없다. 개발자의 입장에서는 두 가지 방법 모두 꼭 필요한 방식입니다.
절차 지향 언어를 통해 큰 규모를 단순하게 정리하고 단순화해서 틀을 만들 수 있고, 객체 지향 언어를 통해서 각각의 틀 안에 배치되었는 데이터들을 최대한 줄이고 재사용하여 복잡하지만 디버깅이 쉽고 신뢰성이 높은 코드를 만들 수 있는 것입니다.
뛰어난 프로그래머라면 이 두 가지 언어를 적재적소에 사용해서 가독성과 기능성을 모두 잡은 프로그램을 제작해야 합니다. 더 자세한 내용이 궁금하시다면 https://m.blog.naver.com/atalanta16/220249264429
객체지향 vs 절차지향??
객체지향 프로그래밍을 소개하는 많은 강의 및 입문서에서는 보통 절차지향 프로그래밍 기법과의 ...
blog.naver.com
⚡객체지향 프로그래밍의 특징
객체 지향 프로그래밍의 주요 개념 에는 4가지 콘셉트(캡슐화, 상속, 추상화, 다형성)가 존재한다.
🍬Encapsulation(캡슐화)
- 클래스와 내부 변수와 메서드를 하나로 패키징 하는 것이 특징이다.
- 은닉(hiding): 구현은 숨기고, 동작은 노출시킴(캡슐화와 비슷한 개념)
- 느슨한 결합(Loose Coupling)에 유리: 언제든 구현을 수정할 수 있음
👯Inheritance(상속)
- 부모 class의 특징을 자식 class가 상속받는 것
- 상위 클래스에 이미 정의되어 있는 속성과 메서드를 하위 클래스에서 중복하여 정의하지 않게 하여 유지보수를 쉽게 하고 비용을 줄인다.
- 파생 클래스에서 필요한 속성/메서드만 추가로 정의할 수 있다.(오버 라이딩, Overriding)
👨🎨Abstraction(추상화)
- 데이터의 공통된 성질을 추출
- 불필요한 특성을 제거하고 가장 중요한 것에 초점을 두는 단순한 이름(변수)으로 두는 것
- 사용자가 필요하지 않은 메서드 등을 노출하지 않아 예기치 못한 사용상의 변화를 막을 수 있다.(인터페이스, Interface)
👪polymorphism(다형성)
- 같은 이름의 메서드를 호출하더라도 객체의 특성에 따라 다르게 동작하는 것을 의미
- 상위 클래스의 동작을 하위 클래스에서 오버 라이딩하는 것도 다형성의 사례이다.
each Characteristic
Encapsulation | Reduce complexity + increase reusability |
캡슐화 | 복잡성 감소 + 재샤용성 증가 |
Abstraction | Recude complexity + isolate impact of changes |
추상화 | 복잡성 감소+외부의 영향성 0 |
Inheritance | Eliminate redundant code |
상속 | 중복코드 제거 |
Polymorphism | Refactor ugly if/else if statements |
다형성 | if/else같은 못난이들 재조정 |
객체 지향은 코드가 복잡하지 않고 재사용성을 높이는 것에 초점이 맞춰져 있는 언어로 위의 4가지 특징을 잘 활용하면 불필요한 코드를 줄이고 가독성을 높여 줄 것입니다. 더 공부를 하고 싶다면 아래 사이트를 참조해 주세요
https://youngjinmo.github.io/2021/04/features-of-oop/
객체지향 주요특징 4가지
객체지향을 공부하며 정리한 포스팅이다. 객체지향의 주요 특징 4가지와 원칙 5가지를 구분하여 2개의 포스팅으로 정리했다. 객체지향 특징 4가지일반적으로 자바라는 언어를 공부하면 공부하
youngjinmo.github.io
'프론트 엔드 > javascript' 카테고리의 다른 글
[JavaScript] class의 상속 (0) | 2022.09.25 |
---|---|
[JavaScript]Prototype & Prototype chain (0) | 2022.09.24 |
[JavaScript]클래스와 인스턴스 (0) | 2022.09.21 |
[JavaScript]고차함수(array.filter, array.map, array.reduce)사용법 (4) | 2022.09.21 |
[JavaScript]javascript중간 정리(koans) (0) | 2022.09.18 |