본문 바로가기

[OOP] JavaScript 객체 지향 프로그래밍 - 11. 상속

 

들어가며

어느 정도 개발에 대한 감을 익혔다고 생각했습니다. 코드를 순서에 맞게 작성하는 능력들을 아주 조금이지만 쌓아 올릴 수 있었습니다. 하지만 시간이 지나면서 제 코드를 봤을 때 너무 더럽다고 느껴졌습니다. 중복되는 코드가 많았고, 비효율적인 코드들도 많이 볼 수 있었습니다. 코드를 조금 더 재사용성이 높게 작성한다면 더 효율적으로 시스템이 동작할 수 있었을 텐데, 아쉬움이 남았습니다. 이런 고민을 하면서 객체지향 프로그래밍에 대해 배워야겠다고 생각했습니다. 앞으로 객체지향을 배우면서 공부하고 느낀 점들을 정리해나가고자 합니다. 아래 내용은 생활코딩의 OOP 수업을 듣고 정리한 내용입니다.

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

상속

클래스를 만들고 나서 보니 아쉬운 마음이 듭니다. Person이라는 클래스는 sum이라는 메서드가 있는데, 다른 메서드가 없는 상황입니다. 이 클래스에는 기능이 부족합니다. 만약 평균을 구하는 메서드를 추가하고 싶다면, Person에 추가해도 되겠지만 언제까지 Person class에 추가할 수 있는 것은 아닙니다.

 

 

만약 Person이라는 클래스가 다른 사람이 만들었거나, 라이브러리라고 한다면, 코드를 수정해버리면 객체가 업데이트됐을 때 우리가 작업한 것들을 덮어쓰기 하거나, 업데이트를 못하거나 이런 상황이 나올 수 있습니다. 스스로 적은 코드 안에서, Person이라는 기능은 최소한으로 유지하면서, 추가적으로 평균 메서드가 필요한 경우 클래스 모든 곳에 사용하는 코드를 추가하는 것은 부담스러울 수 있습니다. 이런 경우 상속을 사용할 수 있습니다.

 

물론 상속을 사용하지 않아도 괜찮습니다. 코드를 수정해도 됩니다. 하지만 코드를 수정하지 않고, 클래스를 하나 더 만들어 보겠습니다. PersonPlus라는 클래스를 정의해보겠습니다. 이렇게 하면 됩니다. 그런데, 우리는 아쉬움이 생깁니다. 중복된 코드가 나왔습니다. Person과 PersonPlus에 있는 중복을 제거하고 싶습니다. 그렇다면 어떻게 하면 될까요? 이것을 가능하게 해주는 것이 상속입니다. 

 

 

 

PersonPlus라는 객체에서 Person이라고 하는 클래스를 확장한다라고 적어주면 됩니다. 그리고 중복되는 코드를 지워버리면 됩니다. 그러면 extends Person을 통해서 클래스가 갖고 있는 요소들이 상속됩니다. PersonPlus라는 클래스에는 avg라는 함수만이 존재하고, Person과 공유하는 기능은 Person안에 있기 때문에 Person이라는 것을 개선한다면, sum을 사용하는 Person의 객체뿐 아니라 PersonPlus를 쓰는 객체 모두 동시다발적으로 변화합니다.

 

확장, 상속이라는 기능을 통해 중복되는 코드를 제거했고, 중복되는 코드를 통해 코드의 양을 줄였습니다. 중복해서 사용하는 부분을 바꾸면, 상속하고 있는 모든 클래스에서 동시다발적으로 변경이 일어나는 유지보수의 편의성을 도모할 수 있습니다. 그렇다면 지금까지 배운 내용을 토대로 몇 가지를 생각해봅시다.

 

 

Q1. 상속이란 무엇인가?
a라는 클래스를 만들었는데, a와 같은 기능을 기반으로 새로운 기능을 추가한 b라는 클래스를 만들고 싶을 때, b클래스에 a에 기능을 모두 다 옮겨 적지 않고, class b(새로 만드는 클래스명) extends a(베이스 클래스) {b에만 새로 추가하고 싶은 기능}라는 문법을 사용하여 만드는 것을 뜻합니다.

 

Q2. 상속이 없으면 무엇이 불편한가?
상속이 없을 때 불편한 점은, a 클래스를 기반으로 b, c.. 클래스를 만들 때 기반이 되는 클래스의 기능을 모두 옮겨 적는 중복이 발생하며, 부모 클래스를 수정하면 자식 클래스 모두 수정을 해야 하는 번거로움, 즉 유지보수가 어렵다.

 

Q3. 상속할 때, extends라는 키워드를 사용하는데, 상속받는 자식 클래스는 어떻게 구현하면 되는가?
상속받는 자식 클래스를 구현하는 방법은, class b(새로 만드는 클래스명) extends a(베이스 클래스) {b에만 새로 추가하고 싶은 기능}라는 문법을 사용하여 만듭니다.

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

마치며

객체지향에 대한 기본을 쌓아가고 있습니다. 앞으로 포기하지 않고, 하나씩 지식을 쌓아 가다 보면 언젠가는 기초가 튼튼한 개발자가 될 수 있을 것이라 믿습니다. 제대로 된 방향으로 하나씩 공부하고 싶습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

출처