객체지향 프로그래밍(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

Node.js란 무엇인가?

Node.jsChrome V8 JavaScript 엔진을 기반으로 만든 JavaScript 런타임 환경이다.
주로 서버 사이드 애플리케이션 개발에 사용되며, 다음과 같은 특징을 가진다.

  • 비동기 이벤트 기반으로 고성능 처리 가능.
  • 프런트엔드와 백엔드에서 동일한 JavaScript 언어를 사용 가능.
  • 파일 관리, 데이터베이스 연동, HTTP 서버 등 다양한 기능을 지원.

 

Node.js의 구조

Node.js는 클라이언트-서버 모델에서 주로 사용된다.

  1. Client-side:
    • 브라우저에서 실행되는 JavaScript 코드.
    • 사용자 인터페이스를 담당.
  2. Server-side:
    • 서버에서 실행되는 Node.js 코드.
    • 데이터 처리, API 제공, 데이터베이스 연동 등 수행.

Shared Code

Node.js를 사용하면 클라이언트와 서버 간 코드를 공유하여 생산성을 높일 수 있다.

 

 

Node.js의 강점

  • 비동기 처리:
    요청이 많아도 빠른 응답을 제공.
  • 확장성:
    모듈 시스템으로 원하는 기능만 추가 가능.
  • JavaScript 활용:
    프런트엔드와 백엔드 모두 동일한 언어로 개발 가능.

 

 

참조: 
https://nodejs.org/en
https://poiemaweb.com/nodejs-basics

+ Recent posts