객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터와 해당 데이터를 처리하는 함수(메서드)를 하나의 논리적 단위인 '객체'로 묶어서 관리하는 프로그래밍 방식입니다.
높은 코드 재사용성
OOP는 객체를 모듈화하여 작성하는 방식이라 모듈화된 객체를 여러 곳에서 재사용할 수 있습니다. 고로 코드의 재사용성이 높아 개발 속도를 향상시킬 수 있습니다.
유지보수 향상
OOP는 캡슐화와 추상화 등의 개념을 이용하여 객체의 내부 구조를 보호하고, 필요한 부분에 집중함으로써 코드의 변경이나 수정이 용이해 코드의 유지보수성을 향상시킬 수 있습니다. 특히 대규모 프로젝트 시에 관리가 용이해집니다.
좋은 가독성
OOP는 추상화를 통해 객체의 내부 구조를 단순화하고, 다형성을 통해 메소드나 변수의 이름을 일관성 있게 사용함으로써, 코드의 가독성이 향상됩니다. 가독성이 좋으니 코드의 이해와 디버깅이 용이해집니다.
높은 코드 확장성과 낮은 코드 결함 가능성
OOP는 상속성과 다형성 등의 개념을 이용하여 새로운 객체를 추가하거나 기존 객체를 수정할 때, 다른 객체와의 상호작용에 영향을 주지 않고 코드를 수정할 수 있습니다. 이를 통해 확장성을 높일 수 있고 다른 객체와의 의존성이 낮아 코드의 결함을 줄일 수 있습니다.
객체 내부의 속성과 행위를 하나의 캡슐로 만들어 외부에서 직접적으로 접근할 수 없도록 보호합니다. 이를 통해 객체의 내부 구조가 변경되더라도 외부 인터페이스를 바꿀 필요가 없습니다.
부모 클래스의 특징을 자식 클래스가 물려받아 확장하거나 수정할 수 있는 성질로 이를 통해 코드의 재사용성을 높일 수 있습니다.
하나의 변수나 메소드가 다양한 데이터 타입에 대해 동작할 수 있도록 합니다. 이를 통해 유연하고 확장성 있는 코드를 작성할 수 있습니다.
객체의 복잡한 내부 구조를 단순화하여 필요한 부분에 집중할 수 있도록 합니다. 이를 통해 코드의 가독성을 높이고 유지보수성을 향상시킬 수 있습니다.
// 클래스 정의
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log(`Hello, my name is ${this.name}.`);
}
}
// 객체 생성
const person = new Person("yuni", 30);
// 객체 사용
console.log(person.name); // "yuni"
console.log(person.age); // 30
person.sayHello(); // "Hello, my name is yuni."
ES6 부터 자바스크립트에서도 class 와 constructor 사용이 가능해지면서 간결하게 객체지향 프로그래밍을 하는 것이 가능해졌습니다.
Person 클래스는 name과 age를 인자로 받아 객체를 생성하는 생성자(constructor)와 sayHello 메서드를 가지고 있습니다. 이렇듯 클래스를 사용하면 객체를 생성하는 과정이 간단해지고 후의 객체 사용 시에도 코드의 가독성이 향상됩니다.
좋은 점만 있을 것 같은 OOP에도 단점이 있습니다.
참고
https://substantial-eoraptor-be9.notion.site/3-31-00837313ec4c42709ab3a6ac33eb7573