본문 바로가기

[OOP] JavaScript 객체 지향 프로그래밍 - 5. this

 

들어가며

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

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

this

객체란 서로 연관된 변수와 함수를 그룹화해서 이름을 붙인 것이라고 했습니다. 이런 객체에는 this라는 예약어가 있습니다. 그렇다면, this란 무엇일까요? this에 대해서 알아보겠습니다.  

 

우리 생활 속에서는 우리의 이름도 있지만, 자기 자신을 가리키는 대명사가 있습니다. 한국말로는 나, 영어는 me라고 하는데, 프로그래밍에서도 자기 자신을 가리키는 표현이 있습니다. 그것이 바로 this입니다.

 

 

 

 

 

this를 알아보기 전, 먼저 객체를 하나 만들어보겠습니다. kim이라는 객체를 만들고, 메서드 sum을 만들겠습니다. sum 메서드를 실행하면 잘 실행되는 것을 볼 수 있습니다. 그런데, 한편으로 아쉬운 마음이 듭니다. kim이라는 객체는 내부적으로 자신이 10점과 20점을 갖고 있다고 하는 내부정보를 이미 갖고 있습니다. 하지만 sum을 호출하면서 함수의 인자로 값을 또 한 번 언급하고 있습니다. 이 부분이 정말 비효율적이라고 생각했습니다.

 

이 부분을 개선해보기 위해 인자를 생략해보겠습니다. 

 

 

 

 

 

sum 메서드에 인자를 받지 않고, 바로 kim 객체 내부에 있는 속성, 프로퍼티인 first와 second를 바로 넣어서 실행했습니다. 그러자 정의되어있지 않다는 에러를 표시하고 있었습니다. 그럼 이 문제를 해결하기 위해서는 어떻게 해야 할까요?

 

 

 

 

 

 

sum 메서드에 객체의 속성 즉, 프로퍼티인 first를 추가하기 위해 kim.first라고 추가해보겠습니다. 그러자 잘 실행되는 것을 볼 수 있었습니다. 하지만 이 부분에서 조금 아쉬운 점이 있었습니다. 

 

 

 

만약 객체의 이름인 kim 대신 k라고 한다면, 메서드가 동작하지 않는 것을 볼 수 있습니다. 왜냐면 k.first가 있을 뿐, kim.first는 더 이상 존재하는 것이 아닙니다. 만약 객체의 이름을 바꾼다면, 메서드 안에 속해있는 프로퍼티 또한 바꿔줘야 합니다. 이런 점은 대단히 비효율적일 수 있습니다. 이런 문제 상황을 해결하기 위해서 나온 것이 바로 this입니다. 

 

 

 

 

sum 메서드에 this를 사용하면, this가 자신이 속해있는 객체를 가리키기 때문에, 객체의 이름이 k이거나 kim 그리고 어떤 이름이어도 메서드가 잘 동작하는 것을 볼 수 있습니다. 이런 특성이 있어서 객체에서 this를 잘 사용한다면, 유용하게 사용할 수 있습니다.

 

 

정리하면 this란 이렇게 설명할 수 있습니다.

 

this가 속해있는 메서드가 속해있는 객체를 가리키도록 약속된 특수한 예약어이다. 

 

 

 

 

this에 대해 잊지 않고 기억할 수 있길 바랍니다.

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

마치며

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

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

출처