객체 지향 프로그래밍의 꽃 '메소드', 함수와 무엇이 다른 것일까?

aksen5240·2023년 12월 27일
1

JavaScript

목록 보기
6/15
post-thumbnail

📚 객체 지향 프로그래밍의 꽃 '메서드', 함수와 무엇이 다른 것일까?

앞선 글을 통해 '객체'에 대해 살펴보았다. 이번 글에서는, 여기서 한 단계 더 도약해 객체 지향 프로그래밍의 꽃 '메소드(Method)'에 대해 살펴보고자 한다.

단순 함수(Function)과 메소드(Method)의 차이는 무엇일까? 메소드(Method)와 함수(Function)는 둘 다 JavaScript에서 실행 가능한 코드 블록을 의미하지만, 주로 사용되는 맥락과 연관성에서 차이가 있다.

먼저 함수는 독립적인 실행 단위를 가진다. 또한, 함수는 어디에도 속하지 않고, 전역적으로 또는 다른 함수 안에 선언될 수 있다. 반대로 메소드는 객체에 속한 함수를 말하며, 객체의 데이터를 조작하거나, 객체와 관련된 특정 작업을 수행하기 위해 사용된다. 메소드에 대해 자세히 알아보며 함수와의 차이를 차근차근 파해쳐보자.


📌 객체의 메소드(Method)

객체의 메소드란

객체 안에 함수를 정의하면 이를 메소드(Method)라고 한다. 더 쉽게 설명하면, 객체에 저장된 값이 함수일 때, 이를 메소드(Method)라고 부른다.

JavaScript에서 객체의 메소드는 객체와 관련된 특정 작업을 수행하는 함수이다. 이 메소드들은 객체의 Property로 저장되며, 객체의 상태에 접근하거나 객체의 행동을 정의하는 데 사용된다.

정의 방법 / 호출방법

메소드는 객체 내부에서 정의할 수 있으며, 키:함수 형태로 표현된다.

객체의 메소드는 객체이름.메소드이름() 형태로 호출된다. 추가적으로, 메소드 내부에서 this 키워드를 사용하면 객체의 다른 property에 접근도 가능하다.

let person = { 
    name: 'John',
    age : 24,
    // 메소드 정의
    introduce: function() { 
      console.log("I'm " + this.name + " and my age is " + this.age);
    },
}
person.introduce(); // 메소드 호출 (출력: I'm John and my age is 24)
  

그렇다면 메소드는 왜 사용하는 것일까?

메소드는 왜 사용하는 것일까? 메소드는 어떤 객체의 고유한 동작으로, 함수에 의미를 부여할 수 있기 때문이다. 즉, 그 객체에 맞는 동작을 할 때 메서드를 사용하는 것이다. 또한, 메소드를 활용하면 다른 함수의 이름 중복을 피할 수 있고, 좀 더 객체에 집중해서 함수를 구현할 수 있다.

대표적인 예로, 삼각형과 사각형 넓이를 구할 때 메서드를 통해 Clean Code를 작성 가능하다.

let rectangle = { 
    width: 30,
    height: 50,
    getArea: function () {
        return rectangle.width * rectangle.height;
    }    
}

let triAngle = {
    width: 15,
    height: 40,
    getArea: function () {
        return triangle.width * triAngle.height / 2;
    }
}

또한, 메소드를 사용하면 특정 작업을 재사용 가능한 코드 블록으로 캡슐화할 수 있다. 이는 코드의 유지보수와 가독성을 향상시킨다.

따라서, 객체의 메소드는 JavaScript에서 객체 지향 프로그래밍의 핵심 요소 중 하나로, 객체의 행동과 상호작용을 정의하는 데 중요한 역할을 한다.


Outro

처음에는 메소드라는 단어가 생소해서인지 이에 대해서 어렵게 느껴졌다. 하지만, 메소드에 대해 학습해나가며 이는 내가 기존에 알고 있었던 개념과 상당히 유사하다는 유사점을 확인할 수 있었다.

필자는 앞서 가지고 있었던 지역변수와 전역변수의 지식과 개념, 그리고 Scope의 개념을 빌려 메소드에 대해 더욱 몸소 이해할 수 있었다. 이에 다음과 같은 결론을 도출하였다.

(혹여나 Scope에 대해 생소한 분들은 앞선 제 게시글을 통해 확인 가능합니다 -> Clean Code를 위한 한 발자국: Scope)

함수는 프로그램의 어느 곳에서나 접근하고 호출할 수 있다. 이 점에서 함수는 전역변수와 유사하다는 공통점을 찾을 수 있었다. 또한 Global Scope에서 선언된 함수는 프로그램 전체에서 접근 가능하며 전역변수처럼 프로그램의 어디서나 사용할 수 있는 독립적인 단위이다.

반면, 메소드는 특정 객체에 속한 함수로, 해당 객체의 Context 안에서만 의미가 있다. 이는 메소드가 특정 객체와 밀접한 관련이 있음을 의미하며, 지역변수와 유사한 성질을 가진다. 또한, 메소드는 그 메소드가 속한 객체의 속성에 접근할 수 있고, 객체의 Local Scope 안에서만 작동한다. 이는 함수 또는 블록 내부에서만 접근 가능한 지역변수와 매우 유사하다.

이러한 생각의 흐름은 나의 학습의 탄력성을 보여주는 좋은 예라고 생각이 든다. 새로운 지식을 기존의 지식과 연결 지으면서, 보다 빠르고 효과적으로 새로운 개념을 습득할 수 있었다. 학습의 탄력성은 지식의 확장이 새로운 지식을 이끌어내는 힘이며, 이는 끊임없는 학습과 성장의 원동력이 된다.

오늘 얻은 깨달음을 바탕으로 앞으로 더 많은 지식을 탐구하고 성장하는 데 있어 단단한 발판이 되길 바라며, 오늘의 학습이 내일의 더 큰 도약을 위한 기반이 되기를 희망한다.

profile
Tags of MyStudy🌱

0개의 댓글