본문 바로가기

[OOP] JavaScript 객체 지향 프로그래밍 - 12. super

 

들어가며

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

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

super

class를 활용한 객체를 만들 때, 메서드를 어떻게 구현할 수 있을까요? 이에 대해 알아보겠습니다.

 

기능을 도입할 때마다 눈에 보이지 않는 대가가 있습니다. 그것을 복잡성이라고 합니다. 이런 복잡성으로 인해 눈에 보이지 않는 여러 가지 문제가 보이기도 합니다. 우리가 상속이라는 것을 도입했을 때, 겪게 될 문제가 있습니다. 그것은 바로 자식 클래스와 부모 클래스 간의 관계에 대한 문제입니다. 결과적으로 이 문제를 super를 통해 해결할 수 있습니다. 

 

만약 PersonPlus 클래스에서 third라는 세 번째 값을 갖고 싶다면 어떻게 해야 할까요?

 

 

자식 클래스에 부모 클래스에 있던 constructor를 모두 옮기는 방법이 있습니다. 하지만 이렇게 한다면 원점으로 돌아가버립니다. 예전에 우리가 상속이라는 것을 할 필요가 전혀 없어집니다. 그럼 어떻게 해야 할까요? 이런 경우를 위해 부모 클래스를 불러서 부모 클래스에게 일을 시키고, 부모가 하지 못하는 일을 나만 하도록 하게 하는 키워드가 super입니다. super를 이용하면 부모가 갖고 있는 기능을 실행할 수 있습니다. 

 

 

 

constructor가 실행될 때, 부모 클래스가 먼저 실행되게 할 수 있다면 부모 클래스에서 이미 갖고 있는 기능과 자식 클래스에서 갖고 있는 기능과의 공통적인 부분에서 중복을 제거하고 super()를 쓰면 됩니다. 

 

super라는 키워드는 뒤에 괄호가 붙으면 부모 클래스의 생성자입니다. 여기에 name, first, second를 전달하면 personPlus의 부모 클래스의 생성자가 호출되고, 생성자안에서 프로퍼티들이 세팅되기 때문에 자식은 앞으로 추가할 third만 추가해주면 됩니다. 

 

만약 메서드인 sum이 1억 줄짜리 코드라면, 자식이 또 구현하는 것이 대단히 비효율적인 상황이라면 부모 클래스의 sum을 호출하고, 그 결과를 받아서 자식 클래스에서 추가적인 작업을 할 수 있게 만들 수 있습니다. 결과적으로 부모가 갖고 있는 sum이라는 것이 호출되고, 메서드가 실행되고 리턴된 값과 third를 추가한 값이 자식 클래스의 sum 메서드가 될 것입니다.

 

그렇다면, super의 용법에 대해 살펴보고, 밑의 질문에 답을 적어보겠습니다.

 

Q1. super에는 2가지 용법이 있습니다. 괄호가 있을 때는 무엇이고, 없을 때는 무엇인가요?
super의 용법 첫 번째, super()는 부모 class의 property를 불러옵니다. 두 번째, super. 는 부모의 method를 불러옵니다.

 

Q2. super가 없다면 어떤 불편함이 있을까요?
super를 사용하지 않고 자식 class 생성자 안의 코드를 추가하길 원한다면, 자식 class에게 부모 class 생성자 안의 코드를 그대로 불러와야 합니다. 이렇게 되면 코드의 중복으로 인해 상속을 이용했던 의미가 사라져 버립니다.

 

Q3. super가 있다면 어떤 편리함을 얻게 되나요?
super를 사용하게 되면 부모 class 생성자 안의 코드를 불러와 자식 class의 생성자 안에서 중복 없이 코드를 추가할 수 있고, 생성자 밖의 코드도 중복 없이 불러와 코드를 추가할 수 있게 됩니다.

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

마치며

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

출처