본문 바로가기
Web dev/Javascript

자바스크립트 10 객체 지향 프로그래밍

by growingTangerine 2022. 11. 20.

1. 현재의 무드: 굿! 집 근처의 새로운 카공할 스팟을 찾아냈다 ㅎㅎ 

2. 오늘 학습한 내용 중 키워드: 객체 지향 프로그래밍, 캡슐화, 추상화, 상속, 다형성

3. 오늘 학습한 내용 요약

 

저번 글에 이어서, 객체 지향 프로그래밍 (Object-Oriented Programming) 에 대해 더 자세히 알아보겠음!

1. 등장 배경: 

객체 지향 프로그래밍 이전의 프로그래밍 패러다임을 살펴보면, 객체 지향에 대해 더 쉽게 이해할 수 있다. 

 

순차적 (비구조적) 프로그래밍

: 정의한 기능의 흐름에 따라 순서대로 동작을 추가하며 프로그래밍하는 방식. 

흐름이 눈에 보여 매우 직관적이지만, 조금이라도 프로그램의 규모가 커지게 되면 곤란해짐. 동작이 직관적이지 못하게 되고, 난리부르스가 되어 버리는 셈!

 

절차적 (구조적) 프로그래밍

: 그래서 등장한 것이 절차적 프로그래밍! 절차는 함수를 의미하며, 반복되는 동작을 함수 및 프로시저 형태로 모듈화하여 사용하는 방식.

반복 동작을 모듈화하여 코드를 많이 줄일 수 있었지만, 자료형과 함수의 연관 관계를 단번에 알아차리기 어렵다. 

 

이를 묶기 위한 패러다임으로 객체 지향 프로그래밍이 등장하게 되었다, 

 

2. 객체 지항 프로그래밍이란?

: 자료형과 함수, 즉 속성과 메서드를 객체 형태로 묶어서 관리하는 프로그래밍 패러다임! 

-> 객체 간의 독립성 뚜렷하게 생기며, 유지보수에 용이해짐. 

 

3. 객체 지향 프로그래밍의 4가지 특징

 

3-1. 캡슐화 Encapsulation - reduce complexity / increase reusability 

: 데이터와 기능을 하나의 단위로 묶는 것. 

코드나 데이터의 은닉(hiding) -> 구현은 숨기고, 동작은 노출시킴

느슨한 결합 (loose coupling)에 유리해짐 -> 언제든 구현을 수정할 수 있음. 

3-2. 추상화 Abstraction - reduce complexity / isolate impact of changes

: 인터페이스를 단순화하여 예기치 못한 side effect 감소. 

사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는것에 포커스! 

3-3. 상속 Inheritance - eliminate redundant code

: 부모 클래스 (base class) 의 특징을 자식 클래스 (deprived class)가 물려받는 것. 

3-4. 다형성 Polymorphism - refactor ugly if/else if statements 

: 종류별로 분기할 필요성을 없애고, 본질적인 특징을 묶어 다양하게 사용할 수 있도록 함. 

 

엄밀히 말하면 자바스크립트는 객체 지향 프로그래밍 언어는 아니다. 함수형 언어를 기반으로 하지만 객체 지향 프로그래밍의 맛을 느낄 수 있을 정도... 로 언어를 만든 것이기 때문이다. 타입스크립트나 자바 등 객체 지향 언어에서는 private, interface 키워드로 은닉화와 추상화를 해줄 수 있지만, 자바스크립트는 두 키워드를 사용할 수 없다. (private은 존재는 하나 지원하는 브라우저가 적은 듯...? 대신, 클로저 모듈 패턴을 사용한다) 

 

ref: https://velog.io/@haero_kim/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

객체지향 프로그래밍 제대로 이해하기

캡슐화를 핵심으로 두고 보는 OOP 의 핵심 포인트

velog.io

https://yozm.wishket.com/magazine/detail/1396/

 

자바스크립트에서 객체지향을 하는 게 맞나요? | 요즘IT

이번 글에서는 객체지향 프로그래밍에 대해 이야기를 해보려고 합니다. 그리고 자바스크립트의 객체지향은 일반적인 객체지향 프로그래밍과는 어떻게 다른지 그리고 Javascript에서는 객체지향

yozm.wishket.com