본문 바로가기
Javascript/Javascript 객체지향

[생활코딩] 객체지향 - 메소드 구현 / 상속

by 닉우 2020. 7. 31.

<객체안에 소속된 함수 메소드>

 

전통적인 방법에서는 생성자 함수에서의 prototype 객체에 sum이라는

프로퍼티를 함수로 지정하는것을 통해서 Person이라는 생성자로 만들어진

모든 객체가 공유할수있는 함수를 만들수있었다.

 

우리가 class에서는 어떻게할까?

첫 번째는 저 방법은 그대로 사용하는것이다.(class는 이미 있는것에서 문법만 좀 추가된것이므로)

두 번째 저렇게 안에 넣어서 사용가능하다. (clasas는 function을 안붙인다.)

kim이라고 하는 객체만은 다르게 동작하는 함수를 정의하고 싶다면

전에 사용했던 같은 방법으로 정의하면 된다.

자바스크립트는 우선 kim이라는 객체가 sum이라는 함수를 가지고 있는지를 확인해보고,

없다면 kim이라는 객체의 person이라는 객체에 sum이라는 메소드가 정의되었는지 보고

있다면 그것을 실행하는것이다.


<상속>

 

형식이 뭔지 보고 상속이 왜 필요하고 어떤것을 이룰수있는지를 우선 공감하는게 중요하다.

class Person{
  constructor(name, first, second){
    this.name = name;
    this.first = first;
    this.second = second;
  }
  sum (){
    return 'prototype : ' +(this.first + this.second);
  }
  
}
var kim = new Person('kim',10 ,20);
kim.sum = function(){
  return 'this : ' +(this.first+this.second);
}
console.log('kim',kim);
console.log(kim.sum());

저 코드에서 아쉬운점은 Person이라고 하는 저 클래스는 sum이라는 메소드가 있는데,

다른 메소드는 없어서 기능이 부족해보인다.

평균을 추가하고 싶을 때 다음과 같이 추가해도 되지만 저 방법은 언제나 할 수는 없다.

저 Person이라는 클래스가 다른 사람이 만들었거나

우리가 가져다쓴 라이브러리라고 한다면

그 코드를 수정해리면 업데이트 되었을때 우리가 작업한것을 덮어쓰거나

우리가 수정한게 있어서 업데이트를 못할수도 있다.

본인이 만든것이라고 해도 Person이라는 기능은 유지하는게 좋을수도 있다.

( avg 를 사용하는 경우가 거이 없을수도 있으니 ) 

 

이런 경우에 우리가 상속을 사용할 수 있다.

class를 하나 더 만들수도 있다.

하지만 중복이 많아보인다.

그럼 우리는 중복을 상속을 통해서 제거할수있다.

Person을 수정하면 그것을 상속하고 있는 모든 클래스는 동시다발적으로 변경이 일어난다.


 

 

 

 

 

 

 

 

 

 

※ 본 포스팅은 개인 공부 기록을 목적으로 남긴 글이며 본 사실과 다른 부분이 있다면 과감하게 지적 부탁드립니다.

댓글