CS

객체지향 프로그래밍(OOP)란?

cob 2023. 1. 31. 20:49
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) 타이어를 갈아 끼울 수 있는 틀을 만들어 놓은 후 다양한 타이어를 교체할 수 있어야 한다. 즉, 상위 계층은 하위 계층의 변화에 대한 구현으로부터 독립해야 한다.

 

 

반응형