객체지향 프로그래밍(OOP) 이해하기

객체지향 프로그래밍(OOP)은 현실 세계를 객체로 추상화하여 소프트웨어를 설계하는 방법론이다. 코드의 재사용성을 높이고 유지보수를 쉽게 만들어 백엔드 개발에서 자주 사용된다.

 

객체지향 프로그래밍의 4대 원칙

1. 캡슐화 (Encapsulation):

  • 데이터를 외부에서 접근할 수 없도록 숨기고, 필요한 기능만 공개.
  • 데이터와 메서드를 객체 안에 묶어 관리.

예제: 

class Car {
  constructor(brand) {
    this.brand = brand; // private data
  }

  getBrand() {
    return this.brand; // public method
  }
}

const myCar = new Car("Tesla");
console.log(myCar.getBrand()); // "Tesla"

 

 

2. 추상화 (Abstraction):

  • 객체의 복잡성을 감추고, 필요한 핵심 기능만 노출.
  • 불필요한 내부 구현을 감추어 사용자에게 단순한 인터페이스 제공.

예제:

class Payment {
  processPayment(amount) {
    console.log(`Processing payment of $${amount}`);
  }
}

const payment = new Payment();
payment.processPayment(100); // 세부 구현은 감춰짐
 
3. 상속 (Inheritance):
  • 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 사용.
  • 코드 재사용성을 극대화.

예제:

class Animal {
  speak() {
    console.log("Animal speaks");
  }
}

class Dog extends Animal {
  speak() {
    console.log("Dog barks");
  }
}

const myDog = new Dog();
myDog.speak(); // "Dog barks"
 
 
4. 다형성 (Polymorphism):
  • 같은 이름의 메서드가 객체에 따라 다르게 동작.
  • 메서드 오버라이딩(Overriding)을 통해 구현.

예제:

class Shape {
  draw() {
    console.log("Drawing a shape");
  }
}

class Circle extends Shape {
  draw() {
    console.log("Drawing a circle");
  }
}

const shapes = [new Shape(), new Circle()];
shapes.forEach((shape) => shape.draw());
// Output:
// "Drawing a shape"
// "Drawing a circle"

 

캡슐화의 중요성

  • 데이터를 보호하여 외부 접근으로 인한 무결성 훼손 방지.
  • 인터페이스를 통해 객체의 사용 방법을 통제.

실생활 비유:

은행의 ATM은 내부 로직을 숨기고, 사용자에게 단순한 "돈 인출" 버튼만 제공

 

추상화의 활용

  • 복잡한 구현을 숨기고, 중요한 부분만 드러냄으로써 코드의 복잡성을 줄임.
  • 핵심 메서드만 사용자에게 노출.

실생활 비유:

자동차 운전자는 내부 엔진의 동작 방식을 몰라도 "운전대"와 "가속 페달"만으로 자동차를 조작할 수 있음.

 

상속과 코드 재사용

  • 상속을 통해 부모 클래스의 기능을 확장하고 새로운 기능을 추가.
  • 코드를 중복 작성하지 않고, 유지보수를 쉽게 만듦.

실생활 비유:

"동물"이라는 기본 클래스를 만들고, 이를 상속받아 "개", "고양이" 등의 세부 동물 클래스를 생성.

 

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

  1. 코드 재사용성 증가:
    중복 코드를 줄이고, 재사용 가능한 컴포넌트를 생성.
  2. 유지보수 용이:
    객체 단위로 코드를 관리하여 수정이 쉬움.
  3. 확장성:
    새로운 기능 추가 시 기존 코드를 최소한으로 수정.
  4. 현실 세계 모델링:
    현실 세계의 개념과 동작을 코드로 직관적으로 표현.

 

결론

객체지향 프로그래밍(OOP)은 코드의 재사용성, 유지보수성, 확장성을 높이는 데 매우 유용한 방법론이다.

캡슐화, 추상화, 상속, 다형성 등 핵심 원칙을 활용하여 효율적이고 직관적인 백엔드 시스템을 구축할 수 있다.

 

 

 

참조:
https://m.blog.naver.com/tkdldjs35/221299078193

https://www.youtube.com/watch?v=M3zlc6jiB5o

https://inpa.tistory.com/entry/OOP-%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-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%B6%94%EC%83%81%ED%99%94-%EC%84%A4%EA%B3%84%EC%9D%98-%EC%9D%B4%ED%95%B4

+ Recent posts