본문 바로가기
Programming/프로그래밍언어 공부

클래스와 메서드의 차이. [Java, C++, Python 프로그래밍언어 상식]

by choiyeong 2025. 4. 8.

4월7일 면접 당시 프로그래밍 관련으로 질문이 들어올 것이라고 예상은 했지만 언어 쪽은 전혀 상상도 못 했고, 너무 기초적인 질문이 들어왔음에도 나는 대답을 확실하게 할 수 없었다.

 

클래스와 메서드의 차이는 웹 프로그래머에겐 가장 기초적인 질문이지만 나같은 전기공학 엔지니어는 따로 언어를 공부하지 않는 이상 기초지식임에도 준비하지 못했다.

그러므로 이 글을 남기며 앞으로 잊지 않으려 한다.

 

클래스는 객체(인스턴트) 생성을 위한 설계도이고, 메서드는 클래스 내에 정의된 동작이다.

클래스에겐 속성(필드)와 동작(메서드)를 포함하고 있고, 객체는 이 클래스를 기반으로 생성되는데
내가 파이썬에서 클래스를 작성할때 가장 먼저 쓴 함수인 _init_으로 객체 속성을 설정해둔 것과 같다.

 

메서드는 생성한 객체(인스턴트)를 어떻게 동작 시킬건지에 대한 것이다.

 

이제 예시를 들면

 

class Car: 라는 클래스를 만들고

def _init_(self, name, year, distance) 함수로 자동차의 속성을 설정한다면

name = name.self

year = year.self

distance = distance.self

라고했을때

G1=Car("제네시스", 2025, 100000)으로

G1은 "제네시스"라는 이름의 2025년식 1만km 주행거리를 가진 객체(인스턴트)로 생성된다.

 

이제 이 G1 객체를 동작시키려면

class Car: 클래스 안에 선언한 메서드를 사용하면 된다.

메서드는 함수처럼 선언된다.

go(self, name)라는 메서드 선언으로

print(f"name.self 가 가속합니다.")

stop(self)라는 메서드 선언으로

print(f"name.self 가 감속합니다.")

이렇게 선언하면 

 

G1.go 명령어로 G1는 "제네시스가 가속합니다."를 동작하고

G1.stop 명령어로 G1은 "제네시스가 감속합니다."를 동작 시킬수있다.

(예시는 간단하게)

 

즉, 요약하자면 클래스는 객체 생성을 위한 틀과 생성된 객체를 동작시키는 메서드를 포함한 것이고,

메서드는 객체를 동작시키는 것으로 형태는 함수와 비슷하게 생겼다.

 

나는 클래스를 이용하기보단 모듈로 넘어가버렸는데.... 초보 프로그래머는 클래스부터 완벽하게 다룰 줄 안 뒤에 모듈화를 공부하면 좋을거 같다.

 

아래는 전에 Python으로 클래스와 메서드를 학습했던 코드이다.

(공부해놓고 까먹은게 아깝다.)

#클래스 메서드

# 1) 대체 생성자(Alternative Constructor)패턴
class Person:
    def __init__(self, name, age):
        self.name=name
        self.age=age
    @classmethod
    def form_birth_year(cls, name, birth_year): #cls = class 즉, Person 클래스를 말한다.
        age=2025-birth_year
        return cls(name,age) #Person(name,age)
   
p1=Person("김철수",20) #기본생성자로 객체생성
p2=Person.form_birth_year("홍길동",1990) #생년도를 이용해 대체생성자로부터 객체 생성
print(p1.name,p1.age)
print(p2.name,p2.age)

#class인 Person(이름,나이)로 인스턴트를 생성하는 방법과
#class의 메소드인 Person.from_birth_yeear(이름,나이)로 인스턴트를 대체생성하는 방법이 있다.


# 2)유틸리티 함수 구현
# 유틸리티 함수? 여러곳에서 재사용할 수 있는 특정한 기능을 하는 독립적인 함수
# ex. 마일 단위를 킬로미터로 단위 변환
class Converter:
    conversion_rate = 1.60934 #클래스 변수
    @classmethod
    def miles_to_km(cls,mile):
        return mile*cls.conversion_rate
   
my_mile=7
print(Converter.miles_to_km(my_mile))
#객체 생성없이 바로 클래스.메서드명()으로 사용 가능. = 클래스메서드의 존재이유. 간편!


# 3) 클래스 변수 수정
# 모든 인스턴스가 공유하는 값을 관리해야 할 때
class Counter:
    count=0
    @classmethod
    def increment(cls):
        cls.count +=1
    @classmethod
    def get_count(cls):
        return cls.count

Counter.increment()
print(Counter.get_count())

# 4) 자식 클래스의 정보 유지
class Animal:
    species ="동물"

    @classmethod
    def get_species(cls):
        return cls.species

class Dog(Animal):
    species="진돗개"

print(Animal.get_species())
print(Dog.get_species())  #Dog 클래스가 부모인 Animal클래스에서 가져온 get_species클래스에서 species를 "진돗개"로 바꿨기 때문에
# Dog.get_species의 리턴값인 cls.species는 진돗개를 리턴하게 되고  프린트하면 진돗개를 출력한다.