[JavaScript] 객체지향의 특징과 클래스 객체 인스턴스 차이

2022. 7. 22. 18:35WEB/Javascript

# 객체 지향 프로그래밍

- 실제 세계를 모델링하여 소프트웨어를 개발하는 것.
- 절차지향의 반대의미가아닌 목적으로하는 개념이 다름. 객체지향은 객체간의 '관계/상호작용'에 중점을 둠 
- 코드의 재활용성이 높음, 유지보수가 쉬움, 협업에 유리함.
- 설계에 시간이 많이듬

# OOP Basic Concepts

  • Encapsulation
- 은닉화 : 구현은 숨기고 동작은 노출 ( 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만들고 객체 외부에서 필요한 동작만 노출)
- 관련된 기능과 데이터를 하나의 단위로 묶음
- 느슨한 결합에 유리, 언제든 구현을 수정할 수 있음. 
( 코드 실행 순서에 따라 절차적으로 코드를 작성하는것이 아닌, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는것. 즉 코드만 보고 기능을 상상 할 수 있게 작성하는 코드작성법)
- 코드를 단순화, 재사용성을 높힘.
  • Inheritance
- 부모의 클래스 속성,메서드를 자식도 그대로 물려받는것.
- 자식클래스에서 공통적으로 필요한 것들을 부모클래스에서 미리 구현해놓고 물려줌.
- 불필요한 코드를 줄여 재사용성을 높힘
  • Abstraction
- 클래스를 만들 때 미리 사용할것같거나 부모클래스에서 구현은 안되었지만 자식클래스에서 필수적으로 구현해야할 메서드들을 미리 작성해놓는것.
- 구체적인 구현을 배제하고 핵심만 남겨두는것.
- 따라서 depth가 깊어질수록 추상적인부분이 구체화된다고 볼수 있다.
- abstract, interface키워드를 사용한다.
- 공통사항이 한곳에서 관리되어 개발 및 유지보수에 용이하다.
  • Polymorphism
- 부모에서 물려받은 메서드들이나 속성을 자식클래스의 특징에 맞게 바꾼것.
- overriding, overloading이 대표적인 예
- 다형성을 지원하지 않는 언어는 부모클래스에서 하위 자식들이 가질 특성들을 고려해 모두 미리 선언해야한다. 방법상 큰 차이는 없지만 다른 자식들이 또다른 자식들의 특성을 가지고 있다는 점에서 OOP프로그램의 추구하는 방향성과 다름.
- 객체의 특성에 맞게 같은함수를 다르게 작성하는것이 가능해짐.

 

 

# 클래스 객체 인스턴스 차이

  • 클래스 : 객체를 만드는 틀. bluprint
class Mammal
{
	public void Cry(){}
}

class Dog : Mammal
{
	public void Bark(){}
}
  • 객체 : 틀을 통해 만들어진 모델(대분류)
static void Main(string[] args)
{
	Mammal mammal;		//선언만 한 상태. -> 객체
}
  • 인스턴스 : 실체화된 모델
static void Main(string[] args)
{
	Mammal mammal = new Mammal;		//선언후 초기화 상태. -> 메모리에 로딩이되어야 인스턴스라고 불림
    Mammal cat = new Mammal; 			// cat은 Mammal클래스의 인스턴스
}

 

# JavaScript ES6 에서 도입된 class 

class Mammal{
	constructor(name, age){ //생성자함수
   this.name = name;
   this.age = age;
    }
    
    cry(){
    }
}

let dog = new Mammal("춘식이","5");

- constructor : 오직 하나의 클래스에 하나의 생성자만 존재할 수 있음. 상속을 했지만 자식클래스에서 생성자를 정의하지 않으면 부모클래스의 생성자를 호출한다.

 

 

es5

function Mammal(name,age){
	this.name = name;
	this.age = age;
}
Mammal.prototype.cry = function(){	// prototype객체에 메소드, 속성을 정의할수 있음.
	//울음소리를 구현하는 코드
}

 

 

'WEB > Javascript' 카테고리의 다른 글

[JavaScript] 비동기  (0) 2022.07.27
[JavaScript] 프로토타입 (prototype)  (0) 2022.07.20
[JavaScript] This, new 키워드  (0) 2022.07.16
[JavaScript] Event에 관하여  (0) 2022.07.15
[JavaScript] DocumentFragment 장점  (0) 2022.07.15