본문 바로가기

카테고리 없음

6-3. 메서드 정의와 호출

파이썬 메서드 정의와 호출

안녕하세요! 지난 시간에는 객체지향 프로그래밍(OOP)의 핵심 개념인 생성자(__init__)와 인스턴스 변수에 대해 알아보았습니다. 이제 여러분은 클래스라는 설계도로 자신만의 고유한 데이터(속성)를 가진 객체를 만들 수 있게 되었죠!

하지만 객체는 단순히 데이터를 저장하는 것 외에도 특정 **행동(Action)**을 수행할 수 있어야 합니다. 예를 들어, Person 객체는 "인사하기"를, Car 객체는 "운전하기"를, BankAccount 객체는 "입금하기"를 할 수 있어야 합니다.

이번 시간에는 객체가 이러한 행동을 수행할 수 있도록 정의하는 **메서드(Method)**의 개념과, 메서드를 어떻게 정의하고 호출하는지 자세히 알아보겠습니다. 메서드는 객체가 할 수 있는 '동사'와 같다고 생각하시면 됩니다.


Part 1: 메서드(Method)란 무엇인가?

메서드클래스 안에 정의된 함수입니다. 일반 함수와 마찬가지로 특정 작업을 수행하는 코드 덩어리이지만, 반드시 특정 객체(인스턴스)에 속하여 그 객체의 데이터를 가지고 동작한다는 특징을 가집니다.

1. 메서드의 특징

  • 객체의 행동: 메서드는 객체가 수행할 수 있는 동작, 기능, 또는 행동을 정의합니다.
  • self 매개변수: 모든 인스턴스 메서드의 첫 번째 매개변수는 반드시 self여야 합니다. 이 self를 통해 메서드는 자신이 속한 객체의 인스턴스 변수에 접근하거나, 다른 메서드를 호출할 수 있습니다.
  • . (점) 연산자: 객체에 속한 메서드를 호출할 때는 객체이름.메서드이름() 형태로 . (점) 연산자를 사용합니다.

Part 2: 메서드 정의하기

메서드는 클래스 정의 블록 안에 일반 함수를 정의하는 것과 동일하게 def 키워드를 사용하여 정의합니다. 다만, 첫 번째 매개변수로 self를 반드시 포함해야 합니다.

1. 기본 형식

Python
 
class 클래스이름:
    def 메서드이름(self, 매개변수1, 매개변수2, ...):
        # self를 사용하여 객체 고유의 인스턴스 변수에 접근
        # self.인스턴스_변수 = ...
        # self.다른_메서드()
        # 이 메서드가 호출될 때 실행될 코드
        # 이 부분은 들여쓰기 필수!
  • self: 현재 객체 자신을 나타냅니다. 파이썬이 메서드 호출 시 자동으로 전달해줍니다.
  • 매개변수들: 메서드가 작업을 수행하는 데 필요한 추가적인 입력 값들입니다. (선택 사항)

예시: Person 클래스에 introduce() 메서드 추가

Python
 
# 파일 이름: define_method_person.py

class Person:
    def __init__(self, name, age):
        self.name = name # 인스턴스 변수
        self.age = age   # 인스턴스 변수

    # introduce() 메서드 정의
    def introduce(self):
        print(f"안녕하세요, 제 이름은 {self.name}이고, 나이는 {self.age}살입니다.")

# 객체 생성
person1 = Person("김철수", 30)
person2 = Person("이영희", 25)

print("메서드를 정의했지만 아직 호출하지 않았습니다.")
print("각 객체의 메서드를 호출해봅시다.")

 

[VS Code 터미널 출력]

파이썬 클래스 내 메서드 정의 예시

(주의: 이 단계에서는 메서드를 '정의'만 했으므로, 메서드 내부의 print 문은 실행되지 않습니다.)


Part 3: 메서드 호출하기

메서드를 정의했으면, 이제 그 메서드를 사용하여 객체가 특정 행동을 수행하도록 지시해야 합니다. 메서드는 객체이름.메서드이름() 형태로 호출합니다.

1. 객체를 통한 메서드 호출

예시: introduce() 메서드 호출

Python
 
# 파일 이름: call_method_person.py

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print(f"안녕하세요, 제 이름은 {self.name}이고, 나이는 {self.age}살입니다.")

# 객체 생성
person1 = Person("김철수", 30)
person2 = Person("이영희", 25)

print("--- Person1의 소개 ---")
person1.introduce() # person1 객체의 introduce() 메서드 호출

print("\n--- Person2의 소개 ---")
person2.introduce() # person2 객체의 introduce() 메서드 호출

# 메서드는 각 객체의 인스턴스 변수를 사용합니다.
# person1.introduce()는 person1의 name과 age를 사용하고,
# person2.introduce()는 person2의 name과 age를 사용합니다.
  • person1.introduce()를 호출하면, 파이썬은 내부적으로 Person.introduce(person1)과 같이 person1 객체를 self 매개변수에 전달하여 메서드를 실행합니다.
  • 따라서 person1.introduce()는 "김철수"와 "30"을 사용하여 인사말을 출력하고, person2.introduce()는 "이영희"와 "25"를 사용하여 인사말을 출력합니다.

 

[VS Code 터미널 출력]

파이썬 객체 메서드 호출 예시

2. 메서드에 매개변수 전달하기

메서드도 일반 함수처럼 매개변수를 가질 수 있습니다. self 다음으로 필요한 매개변수를 정의하고, 호출할 때 인자를 전달합니다.

예시: Calculator 클래스에 연산 메서드 추가

Python
 
# 파일 이름: method_with_params.py

class Calculator:
    def __init__(self, initial_value=0):
        self.value = initial_value # 현재 값 (인스턴스 변수)

    def add(self, num): # num을 매개변수로 받음
        self.value += num # 현재 객체의 value에 num을 더함
        print(f"현재 값에 {num}을 더했습니다. 새 값: {self.value}")
        return self.value # 변경된 값 반환

    def subtract(self, num): # num을 매개변수로 받음
        self.value -= num # 현재 객체의 value에서 num을 뺌
        print(f"현재 값에서 {num}을 뺐습니다. 새 값: {self.value}")
        return self.value # 변경된 값 반환

# 계산기 객체 생성
calc1 = Calculator(100) # 초기값 100으로 설정
calc2 = Calculator(50)  # 초기값 50으로 설정

print("--- calc1 계산 ---")
calc1.add(20)    # calc1의 value에 20 더함
calc1.subtract(50) # calc1의 value에서 50 뺌

print("\n--- calc2 계산 ---")
calc2.add(10)    # calc2의 value에 10 더함
calc2.add(5)     # calc2의 value에 5 더함
calc2.subtract(20) # calc2의 value에서 20 뺌

print(f"\n최종 calc1의 값: {calc1.value}") # 100 + 20 - 50 = 70
print(f"최종 calc2의 값: {calc2.value}") # 50 + 10 + 5 - 20 = 45

 

[VS Code 터미널 출력]

파이썬 메서드에 매개변수 전달 및 객체 상태 변경 예시

Part 4: 메서드 활용의 중요성

메서드를 사용하면 객체지향 프로그래밍의 핵심 목표 중 하나인 **캡슐화(Encapsulation)**를 실현할 수 있습니다. 캡슐화는 데이터(인스턴스 변수)와 그 데이터를 다루는 기능(메서드)을 하나의 객체 안에 묶어서 외부에서는 직접 데이터에 접근하기보다 메서드를 통해 접근하도록 하는 것입니다.

이를 통해 코드를 더욱 모듈화하고, 데이터의 무결성을 보호하며, 유지보수를 용이하게 만듭니다.


마무리하며

이번 시간에는 객체지향 프로그래밍에서 객체의 행동을 정의하는 **메서드(Method)**의 정의와 호출 방법에 대해 알아보았습니다.

  • 메서드는 클래스 안에 정의된 함수이며, 객체를 통해 호출됩니다.
  • 모든 인스턴스 메서드의 첫 번째 매개변수는 **self**로, 이는 현재 객체 자신을 가리킵니다.
  • 메서드는 self를 통해 객체의 인스턴스 변수에 접근하거나 다른 메서드를 호출하며 객체의 상태를 변경할 수 있습니다.

이제 여러분은 클래스라는 설계도로 자신만의 속성을 가진 객체를 만들고, 그 객체들이 특정한 행동을 수행하도록 지시할 수 있게 되었습니다. 이는 현실 세계를 모델링하는 데 한 걸음 더 나아간 것입니다!

다음 포스팅에서는 클래스에 속하지만 객체와는 조금 다르게 동작하는 특별한 변수와 메서드인 클래스 변수, 정적 메서드, 클래스 메서드에 대해 자세히 알아보겠습니다.


궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!

반응형