객체지향 프로그래밍

임수정·2023년 5월 18일
0
post-thumbnail

프로그래밍 패러다임은 크게 두 분류로 나눌 수 있습니다.
선언형과 명령형으로 나뉩니다.

오늘은 명령형 패러다임에서 객체지향 프로그래밍에 대해서 알아보겠습니다.

객체지향 프로그래밍

상호작용하는 객체들의 집합으로 표현될 수 있습니다. 객체라는 기본적인 단위를 중심으로 동작하며 객체 내부에 선언된 메서드를 활용하는 방식을 말합니다. 다른 프로그래밍 패러다임에 비해 코드설계 시간이 소요되며 처리속도 상대적으로 느립니다.

const arr = [11,13,15,17]
const sumArr = arr.reduce((acc,cur) => acc+cur)
console.log(sumArr) //56

위 예시는 선언형 프로래밍 중 함수형 프로그래밍의 순수함수로 배열의 합을 구한 예시입니다.
이번에는 객체지향 프로그래밍으로 배열의 합을 구하는 예시를 들어보겠습니다.

const arr = [11,13,15,17]
class Sum {
constructor(sum) {
	this.sum = sum
    this.result = sum.reduce((acc,cur) => acc+cur)
    }
    getSum() {
    return this.result
    }
}
const a = new Sum(arr)
console.log(a.getSum()) //56

이렇게 2개를 비교하니 확연한 차이를 알 수 있습니다.
객체지향 프로그래밍은 확연하게 설계시간이 많이 소요된다는것을 직관적으로 확인하 실 수 있습니다.

그렇다면 우리는 왜 객체지향 프로그래밍을 사용해야할까요?🧐

객체지향 프로그래밍이 단점만 가지고 있는것은 아닙니다.

객체지향 프로그래밍은 데이터와 해당 데이터를 처리하는 메서드를 함께 묶어 객체로 표현합니다. 이를 통해 데이터와 관련된 동작을 한 곳에 모아 관리할 수 있습니다. 객체지향 프로그래밍은 코드의 구조화, 모듈화, 재사용성을 강화시킨다는 장점도 가지고 있습니다.

또한, 객체지향 프로그래밍은 복잡한 문제를 해결하기 위한 강력한 도구이며, 코드의 구조화와 모듈화를 통해 유지보수성과 확장성을 높일 수 있습니다.

특징

1. 추상화(abstraction)

: 복잡한 시스템에서 핵심적인 개념과 기능을 간추리는 것을 의미합니다.

2. 캡슐화(encapsulation)

: 객체의 속성과 메서드를 묶고 외부에서 직접적으로 접근하지 못하도록 숨기는 것을 의미합니다. 객체 내부의 상태는 객체 자체에서 관리되며, 외부에서는 공개된 인터페이스를 통해 상호작용할 수 있습니다.

3. 상속성(inheritance)

: 상위 클래스의 특성을 하위클래스가 이어받아 재사용성을 높이거나 확장하는 것을 의미합니다. 상속을 통해 계층적인 관계생성, 유지보수성의 측면이 용이합니다.

4. 다향성(polymorphism)

: 하나의 메서드가 다른 클래스에서 다양한 방법으로 동작할 수 있도록 하는 특징을 가집니다. 대표적으로 오버로딩과 오버라이딩이 있습니다.

오버로딩 (정적 다향성) : 같은 이름을 가진 메서드나 클래스를 여러 번 사용하는 것을 의미합니다. 다른 매개변수를 가진 동일한 이름의 메서드를 정의함으로써 같은 기능을 수행하지만 다양한 상황에 대응할 수 있습니다.

오버라이딩(동적 다향성) : 상속 관계에서 부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하는 것을 의미합니다.

상속을 통한 코드의 재사용성, 추상화와 캡슐화를 통한 유지보수의 용이성, 다향성을 통한 확장성과 유연성을 가지고 있습니다. 이러한 특징들로 객체지향 프로그래밍은 대규모 프로젝트의 개발과 유지보수에 적합합니다.

📌 정리

다른 방법론도 비슷하겠지만 객체지향 프로그래밍은 장단점이 분명한 방법론인 것 같습니다. 여러특징을 가지고 있는 객체지향 프로그래밍을 한줄로 표현한다면

코드의 재사용성과 유지보수성은 높지만 초기 구축비용과 복잡성을 동반하는 프로그래밍 방법이다.

profile
부족함을 인정하고 채워나가는 개발자! (Node.js 개발자)

0개의 댓글