OOP
객체지향 프로그래밍은 객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활요하는 방식을 말한다.
- OOP는 설계에 많은 시간이 소요되며 처리속도가 다른 프로그래밍 패러다임에 비해 상대적으로 느리다.
프로그래밍 패러다임이란?
프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론이다.
1. OOP의 예
배열에서 최댓값을 찾는 로직을 OOP를 적용
const ret = [1,2,3,4,5,11,12]
class List {
constructor(list) {
this.list = list
this.mx = list.reduce((max, num) => num > max ? num :max, 0)
}
getMax() {
return this.mx
}
}
const a = new List(ret)
console.log(a.getMax()) // 12
2. OOP 특징
2-1) 추상화
추상화(abstraction)란 복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추려내는 것을 의미한다.
- ex) 군인, 장교, 키180, 여친있음 등 이러한 특징 중에서 코드로 나타낼 때 일부분의 특징인 군인, 장교만 뽑아내거나 조금 더 간추려서 나타내는 것을 말한다.
2-2) 캡슐화(encapsulation)
캡슐화는 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것을 말한다.
2-3) 상속성(inheritance)
상속성은 상위 클래스의 특성을 하위 클래스가 이어받아서 재사용하거나 추가, 확장하는 것을 말한다. 코드의 재사용 측면, 계층적인 관계 생성, 유지 보수성 측면에서 중요하다.
2-4) 다형성(polymorphism)
다형성은 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것을 말한다. 대표적으로 오버로딩, 오버라이딩이 있다
3. OOP 설계 원칙
객체 지향 프로그래밍을 설계할 때는 SOLID 원칙을 지켜주어야 한다.
3-1) S : 단일 책임원칙(SRP)
- 단일 책임 원칙은 모든 클래스는 각각 하나의 책임만 가져야 하는 원칙이다.
- ex) A라는 로직이 존재한다면 어떠한 클래스도 A에 관한 클래스여야 하고 이를 수정한다고 했을 때도 A와 관련된 수정이어야 한다.
3-2) O : 개방-폐쇄 원칙(OCP)
- 개방-폐쇄 원칙은 유지 보수 사항이 생긴다면 코드를 쉽게 확장할 수 있도록 하고, 수정할 때도 닫혀있어야 하는 원칙이다. 즉, 기존 코드는 잘 변경하지 않으면서도 확장은 쉽게 할 수 있어야 한다.
3-3) L : 리스코프 치환 원칙(LSP)
- 리스코프 치환 원칙은 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 하는 것을 의미한다. 부모 객체에 자식 객체를 넣어도 시스템이 문제없이 돌아가게 만드는 것을 말한다. 즉, A객체가 B객체의 자식 계층일 때 A객체를 B객체와 바꿔도 문제가 없어야 한다.
3-4) I : 인터페이스 분리 원칙(ISP)
- 인터페이스 분리 원칙은 하나의 일반적인 인터페이스보다 구체적인 여러 개의 인터페이스를 만들어야 하는 원칙을 말한다.
3-5) D : 의존 역전 원칙(DIP)
- 의존 역전 원칙은 자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변화에 영향받지 않게 하는 원칙을 말한다.
- ex) 타이어를 갈아 끼울 수 있는 틀을 만들어 놓은 후 다양한 타이어를 교체할 수 있어야 한다. 즉, 상위 계층은 하위 계층의 변화에 대한 구현으로부터 독립해야 한다.
반응형
'CS' 카테고리의 다른 글
Spring MVC 아키텍처 구조 (0) | 2023.05.18 |
---|---|
오버로딩(Overloading)과 오버라이딩(Overriding)이란? (0) | 2023.02.01 |
MVVM 패턴(Model, View, ViewModel)이란? (0) | 2023.01.27 |
MVP 패턴(Model, View, Presenter)이란? (0) | 2023.01.26 |
MVC 패턴(Model, View, Controller)이란? (0) | 2023.01.23 |