함수? 메서드? 맨날 헷갈리는 용어, 이번에 확실히 정리해봐요!

홍태극·2025년 4월 15일
0

함수? 메서드? 맨날 헷갈리는 용어, 이번에 확실히 정리해봐요!

코딩 공부를 시작하거나 다른 언어를 배우다 보면 '함수(function)'랑 '메서드(method)'라는 말을 정말 자주 듣게 되죠? 둘 다 뭔가 비슷한 일을 하는 코드 덩어리 같은데... "어? 그래서 뭐가 다른 거지?" 하고 갸우뚱했던 경험, 다들 한 번쯤 있으실 거예요. 저도 그랬거든요! 😂

특히 객체 지향 프로그래밍(OOP) 이야기를 할 때는 이 둘을 구분하는 게 꽤 중요해져요. 그래서 오늘은 맨날 헷갈렸던 함수와 메서드의 차이점을 속 시원하게! 확실하게! 정리해 보려고 해요.

함수는 뭐고 메서드는 뭔가요? (용어부터 정리!)

간단히 말하면 함수랑 메서드 둘 다 어떤 특정 작업을 수행하는 코드 묶음이에요. 비슷한 일을 하니까 헷갈리는 게 당연하죠. 하지만 결정적인 차이가 하나 있어요. 바로 '소속' 이 있느냐 없느냐 하는 점이에요!

💪 혼자서도 잘해요! 독립적인 일꾼, 함수

함수(Function) 는요, 프로그램 안에서 독립적으로 존재하는 코드 묶음이에요. 마치 망치나 드라이버처럼, 어디에도 소속되지 않고 필요할 때마다 이름만 불러서 바로 사용할 수 있는 범용 도구 같다고 생각하면 쉬워요.

함수는 혼자서도 완벽하게 자기 일을 해요. 특정 객체나 클래스에 묶여있지 않기 때문에 여기저기서 자유롭게 가져다 쓸 수 있죠. 입력을 받아서 결과를 내놓거나, 아니면 그냥 특정 동작만 수행하기도 하고요.

타입스크립트로 간단한 덧셈 함수를 만들어 볼까요? 타입스크립트는 변수나 함수가 어떤 종류의 값(타입)을 다루는지 명확하게 적어줘서 코드가 더 안전하고 이해하기 쉬워진답니다.

// 두 개의 숫자를 받아서 더한 결과를 숫자로 돌려주는 함수 'add'
// a: number 는 'a라는 이름의 값은 숫자 타입이야!' 라는 뜻이에요.
// 함수 이름 뒤에 : number 는 '이 함수는 숫자 타입의 결과를 돌려줄 거야!' 라는 뜻이고요.
function add(a: number, b: number): number {
  // 그냥 a랑 b를 더해서 돌려줘요. 간단하죠?
  return a + b;
}

// 이제 'add' 함수를 불러서 써볼까요?
const resultValue: number = add(5, 3); // 5랑 3을 더해줘!

// 콘솔에 결과 찍어보기
console.log('덧셈 결과', resultValue); // 8 이라고 나올 거예요!

여기서 add 함수는 어디에도 소속되어 있지 않아요. 그냥 '두 숫자를 더하는 기능' 그 자체로 존재하죠. 이게 바로 함수의 특징이에요!

🧑‍💼 객체에게 시키는 일! 소속감 있는 일꾼, 메서드

이번엔 메서드(Method) 를 알아볼까요? 메서드도 함수처럼 특정 작업을 하는 코드 묶음이지만, 가장 큰 차이점은 특정 객체(Object)나 클래스(Class) 안에 소속되어 있다는 거예요!

메서드는 자신이 속한 객체의 데이터(속성) 에 접근해서 그 값을 사용하거나 변경할 수 있어요. 마치 특정 기계(객체)에 붙어있는 버튼이나 레버(메서드) 같다고 할까요? 그 기계의 상태를 바꾸거나, 상태에 따라 다른 동작을 하는 거죠.

메서드를 부를 때는 반드시 그 메서드가 속한 객체를 통해서 불러야 해요. 보통 점(.)을 찍어서 객체이름.메서드이름() 이런 식으로 사용하죠.

타입스크립트로 '계산기(Calculator)' 클래스를 만들고 그 안에 덧셈 메서드를 넣어볼게요.

// 계산기 설계도 (클래스) 만들기
class Calculator {
  // 계산 결과를 저장할 공간(속성)을 만들어요. 타입은 숫자!
  currentResult: number;

  // 계산기 객체를 처음 만들 때 실행되는 특별한 메서드 (생성자)
  constructor() {
    console.log('계산기 작동 시작! 결과는 0으로 초기화.');
    // this는 '이 객체 자신'을 뜻해요. 여기선 새로 만들어지는 계산기 객체죠.
    // 계산기 객체의 currentResult 값을 0으로 설정해요.
    this.currentResult = 0;
  }

  // 숫자를 받아서 현재 결과에 더하는 메서드 'addValue'
  // value는 숫자 타입, 이 메서드가 돌려줄 값도 숫자 타입이라고 알려줘요.
  addValue(value: number): number {
    console.log(`${this.currentResult}${value}를 더할게요.`);
    // '이 객체(this)'의 'currentResult' 속성에 'value'를 더해요.
    this.currentResult += value;
    // 덧셈 후의 현재 결과값을 돌려줘요.
    return this.currentResult;
  }
}

// 위 설계도(Calculator 클래스)로 실제 계산기(객체) 만들기
const myCalc = new Calculator(); // "계산기 작동 시작! 결과는 0으로 초기화." 출력될 거예요.

// 계산기 객체의 addValue 메서드 호출!
const firstAddition: number = myCalc.addValue(10);
console.log('첫 번째 덧셈 후 결과', firstAddition); // 10 이라고 나오겠죠?

// 같은 계산기 객체의 메서드를 또 호출!
const secondAddition: number = myCalc.addValue(7);
console.log('두 번째 덧셈 후 결과', secondAddition); // 17 이라고 나올 거예요! (10 + 7)

여기서 addValueCalculator 클래스 안에 정의된 메서드예요. myCalc라는 계산기 객체를 통해서만 호출할 수 있죠 (myCalc.addValue(10)). 그리고 메서드 안에서 this.currentResult 처럼 this 키워드를 사용해서 자기가 속한 객체의 currentResult라는 속성 값에 접근하고 변경하는 걸 볼 수 있어요. addValue 메서드는 혼자서는 존재 의미가 없고, Calculator 타입의 객체와 함께 있어야 비로소 제 역할을 하는 거죠.

🤔 그래서 딱 정리하면 뭐가 다르다고요?

함수와 메서드의 가장 핵심적인 차이는 바로 객체와의 관련성이에요.

  • 함수 👉 독립적인 존재!
    어디에도 소속되지 않고 혼자서 호출될 수 있는 코드 블록.

  • 메서드 👉 객체에 소속된 존재!
    특정 객체나 클래스 안에 살면서, 그 객체의 데이터(속성)를 다룰 수 있는 코드 블록. 반드시 그 객체를 통해서 호출해야 함.

특히 객체 지향 프로그래밍에서는 이 차이가 중요해요. 메서드를 통해 객체가 자신의 상태(데이터)를 스스로 관리하고 외부와 소통하는 방식을 정해주거든요. 이걸 캡슐화라고 부르는데, 코드를 더 체계적으로 만들고 관리하기 쉽게 해주는 중요한 개념이에요.

✨ 알고 나면 쉬워요! (마무리)

함수와 메서드, 이제 좀 감이 잡히시나요? 😊 둘 다 코드를 재사용하고 깔끔하게 정리하는 데 꼭 필요한 도구들이에요. 비록 비슷해 보이지만 '객체에 소속되어 있는가?' 라는 핵심 차이를 이해하고 나면, 프로그램을 더 깊이 있게 이해하고 설계하는 데 정말 큰 도움이 될 거예요.

특히 타입스크립트처럼 객체 지향 개념을 적극적으로 사용하는 언어를 다룰 때는 함수와 메서드를 명확히 구분하고 각각의 특징을 잘 활용해서 더 튼튼하고 구조적인 코드를 만들어보세요! 화이팅! 💪

0개의 댓글