[Node.js] 객체 지향

Asher Park·2022년 12월 27일
0

내일배움캠프_Node.js

목록 보기
13/17
post-thumbnail

스파르타코딩클럽 내일배움캠프 Node.js 심화주차 강의를 들으며 공부한 것을 적은 것입니다.

객체 지향이란?

  • 소프트웨어의 핵심을 기능이 아닌 객체로 삼는다.
  • 객체를 도출하고 각각의 역할을 정의하는 것에 초점.
  • 책임권한을 가진 객체들이 서로 메시지를 주고받으며 협력.

객체지향적인 소프트웨어의 성격

  • 캡슐화, 다형성, 클래스 상속을 지원.
  • 데이터 접근 제한을 걸 수 있음.

캡슐화 (Encapsulation)

  • 객체 내부의 세부적인 사항을 감추는 것
  • 정보 은닉의 목적.
  • 변경하기 쉬운 객체를 만드는 것이 목적.
  • 객체 내부의 접근을 제한하면 객체간의 결합도를 낮출 수 있고 설계를 좀 더 쉽게 변경할 수 있다.
class User {
	private name: string;
  	
  	setName(name: string) {
      	this.name = name;
    }
  	getName() {
      	return this.name;
    }
}

상속 (Inheritance)

  • 이미 정의된 상위 클래스의 특징을 하위 클래스가 물려받아 코드의 중복을 제거
  • 코드 재사용성 증대
  • 클래스 간의 체계화된 구조를 파악
class Mother {
	constructor(name) {
      this.name = name;
    }
  	getName() {
      return this.name;
    }
}

class Child extends Mother {
	constructor(name) {
    	super(name);
    }
}
  • 자식 클래스는 super라는 메소드로 부모 클래스의 생성자를 상속 받을 수 있다.

추상화 (Abstraction)

  • 공통된 부분을 모아 상위 개념으로 새롭게 선언하는 것
  • 불필요한 부분을 생략하고 공통적이고 중요한 것에만 중점
  • 공통적으로 묶일 수 있는 기능을 추상화 -> 추상 클래스 -> 인터페이스로 모델링
interface Human {
	name: string;
  	setName(name);
  	getName();
}

class Employee implements Human {
	constructor(public name: string) {
    }
  
  	setName(name) {
    	this.name = name;
    }
  	getName() {
      	return this.name;
    }
}

다형성 (Polymorphism)

  • 클래스가 연산을 수행할 때 하나의 행위에 대해 각 클래스가 가지고 있는 고유한 특성
  • 동일한 메소드 이름을 사용하지만, 메소드에 대해 클래스마다 다르게 구현되는 개념
class Employee {
	constructor(name) {
    	this.name = name;
    }
    buy () {
  		console.log("employee class")
  	}
}

class User {
	constructor(name) {
    	this.name = name;
    }
	buy () {
    	console.log("user class")
    }
}

const employee1 = new Employee("가나다");
const user1 = new User("라마바");

const polymorphismArray = [employee1, user1];
polymorphismArray.forEach((polymorphism) => polymorphism.buy());

의존성 (Dependency)

  • 클래스들이 협력하는 과정에서 해당 클래스들이 다른 클래스를 의존하게 되는 정도
  • 어떠한 클래스가 변경될 때 그 클래스에 의존하는 다른 클래스도 함께 변경될 수 있다.

결합도 (Coupling)

  • 의존성의 정도를 나타냄
  • 클래스 사이의 결합도를 낮춰 변경이 용이한 설계를 만드는 것이 목표

응집도 (Cohesion)

  • 모듈에 포함된 내부 요소들이 각각 연관되어있는 관계의 정도
  • 1개의 메소드가 내부에서 변수를 많이 사용할 수록 응집도가 높아지게된다.
  • 자율적인 객체를 만들면 결합도를 낮출 수 있을뿐더러 응집도를 높일 수 있다.
profile
배움에는 끝이없다

0개의 댓글