들어가기 전

C++, JAVA 같은 클래스 기반 객체지향 프로그래밍 언어의 특징인 클래스와 상속, 캡슐화를 위한 키워드인 public, private, protected 등이 없어서 JavaScript는 객체지향 언어가 아니라고 오해하는 경우도 있다. 하지만 JavaScript는 클래스 기반 객체지향 프로그래밍 언어보다 효율적이며 더 강력한 객체지향 프로그래밍 능력을 지니고 있는 프로토타입 기반의 객체지향 프로그래밍 언어다.

자바스크립트는 객체 기반의 프로그래밍 언어이며 자바스크립트를 이루고 있는 거의 '모든 것'이 객체다. (원시타입 제외)

 

객체지향 프로그래밍

프로그래밍에서 필요한 데이터를 추상화시켜 속성과 메서드를 가진 객체를 만들고

객체 간의 상호작용을 통해 로직을 구성하는 프로그래밍 패러다임

 

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

1. 추상화

2. 상속

3. 캡슐화

4. 다형성

 

1. 추상화

- 객체들이 공통적으로 필요로 하는 속성이나 행위를 추출

- 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것

2. 상속

- 클래스의 속성과 행위를 하위 클래스에게 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려 받는 것

- 새로운 클래스가 기존의 클래스의 데이터와 연산을 이용할 수 있게 하는 기능

3. 캡슐화

- 데이터 구조와 데이터를 다루는 방법들을 결합시켜 묶는 것 (변수와 함수를 하나로 묶는 것)

- 낮은 결합도를 유지할 수 있도록 설계하는 것

4. 다형성

- 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것

- 요소에 여러 개념을 넣어 놓는 것

하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성을 갖게 될 수 있다.

 

오버라이딩 : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용
오버로딩 : 같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것

 

 

객체 지향 프로그래밍의 장단점

장점 단점
클래스 단위로 수정이 가능하기 때문에 유지 보수가 편리 객체의 수가 많아짐에 따라 용량이 커질 수 있음
클래스를 재사용하거나 상속을 통해 확장함으로써 코드 재사용이 용이 처리 속도가 상대적으로 느림 (절차지향과 비교)
클래스 단위로 모듈화시켜서 개발하기 때문에 업무 분담이 편리하고 대규모 소프트웨어 개발에 적합 설계시 많은 시간과 노력이 필요하게 될 수 있음

 

SOLID (객체 지향 설계 원칙)

1. 단일 책임 원칙 (SRP, Single Resposibility Principle)

- 하나의 클래스는 단 하나의 책임만 질 것

- 지키지 않으면 변경에 의해 다른 책임과 관련된 코드에 영향이 갈 수 있다

 

2. 개방-폐쇄 원칙 (OCP, Open/Closed Principle)

- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다

- 기능을 변경하거나 확장할 수 있으면서 기능을 사용하는 코드는 수정하지 않는다

 

3. 리스코프 치환 원칙 (LSP, Liskov Substitution Principle)

- 프로그램 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함

- 상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상적으로 동작해야한다.

 

4. 인터페이스 분리 원칙 (ISP, Interface Segregation Principle)

- 범용 인터페이스 하나보다 클라이언트를 위한 여러 개의 인터페이스로 구성하는 것이 좋다

- 인터페이스는 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다

- 클라이언트가 필요로 하는 인터페이스로 분리함으로써 각 클라이언트가 사용하지 않는 인터페이스에 변경이 있어도 영향을 받지 않도록 만들어야 한다

 

5. 의존관계 역전 원칙 (DIP, Dependency Inversion Principle)

- 추상화에 의존

- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되고 저수준 모듈은 고수준 모듈에서 정의한 추상 타입에 의존해야한다.

 

객체지향 OOP에 대해서 간단히 포스팅했는데 부족한 부분에 대한 보충 설명은 추후에 하겠습니다.

 

https://jongminfire.dev/%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%EB%9E%80

https://www.yes24.com/Product/Goods/9274256

 

 

모던 자바스크립트 Deep Dive - 예스24

『모던 자바스크립트 Deep Dive』에서는 자바스크립트를 둘러싼 기본 개념을 정확하고 구체적으로 설명하고, 자바스크립트 코드의 동작 원리를 집요하게 파헤친다. 따라서 여러분이 작성한 코드

www.yes24.com

 

'Javascript' 카테고리의 다른 글

[JS] Class 작동원리  (0) 2024.11.15
[JS] 클로저와 스코프  (0) 2024.10.17
[JS] reduce() 에 대해서  (0) 2024.06.20
[JS] 동기(synchronous) 비동기(asynchronous)  (0) 2024.05.13
[JS] 구조 분해 할당  (0) 2024.04.24

+ Recent posts