클래스
클래스
개요
클래스(Class)는 객체지향프로그래밍(Object-Oriented Programming, OOP)의 핵심 개념 중 하나로, 특정 유형의 객체를 생성하기 위한 설계도 또는 틀(blueprint) 역할을 합니다. 클래스는 데이터(속성)와 그 데이터를 조작하는 동작(메서드)을 하나의 단위로 묶어 구조화함으로써, 코드의 재사용성, 유지보수성, 확장성을 높이는 데 기여합니다. 프로그래밍 언어 중 C++, Java, Python, C# 등 대부분의 현대 언어는 클래스 기반의 객체지향 프로그래밍을 지원합니다.
클래스를 통해 생성된 구체적인 인스턴스를 객체(Object)라고 하며, 클래스는 여러 개의 객체를 일관되게 생성할 수 있는 틀을 제공합니다.
클래스의 구성 요소
클래스는 일반적으로 다음과 같은 구성 요소로 이루어집니다.
1. 속성 (Attributes / Fields)
속성은 클래스가 표현하는 대상의 상태를 저장하는 변수입니다. 예를 들어, Person
클래스에는 이름(name
), 나이(age
), 주소(address
) 등의 속성이 포함될 수 있습니다.
class Person:
def __init__(self, name, age):
self.name = name # 속성
self.age = age # 속성
속성은 객체마다 서로 다를 수 있으며, 클래스 내에서 정의되지만 객체 생성 시에 각각의 값이 할당됩니다.
2. 메서드 (Methods)
메서드는 클래스 내에서 정의된 함수로, 객체가 수행할 수 있는 동작을 의미합니다. 메서드는 객체의 속성에 접근하거나 수정할 수 있으며, 특정 로직을 수행합니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self): # 메서드
print(f"안녕하세요, 저는 {self.name}이고, {self.age}살입니다.")
위 예제에서 introduce()
는 Person
객체가 자기소개를 하는 동작을 정의합니다.
3. 생성자 (Constructor)
생성자는 객체가 생성될 때 자동으로 호출되는 특수한 메서드로, 객체의 초기 상태를 설정하는 데 사용됩니다. Python에서는 __init__()
메서드가 생성자 역할을 하며, Java나 C++에서는 클래스 이름과 동일한 메서드를 생성자로 사용합니다.
// Java 예시
public class Person {
private String name;
private int age;
public Person(String name, int age) { // 생성자
this.name = name;
this.age = age;
}
}
클래스의 특징
1. 캡슐화 (Encapsulation)
캡슐화는 데이터와 그 데이터를 다루는 메서드를 하나로 묶고, 외부에서의 직접 접근을 제한하는 개념입니다. 이를 통해 객체의 내부 상태를 보호하고, 예기치 않은 변경을 방지할 수 있습니다.
- 접근 제어자 (예:
private
,protected
,public
)를 사용하여 속성과 메서드의 접근 범위를 설정합니다. - 일반적으로 속성은
private
으로 설정하고, 외부에서는 게터(getter)와 세터(setter) 메서드를 통해 접근합니다.
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2. 상속 (Inheritance)
상속은 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받는 기능입니다. 이를 통해 중복 코드를 줄이고, 계층적 구조를 만들 수 있습니다.
class Animal:
def speak(self):
pass
class Dog(Animal): # Animal 클래스를 상속
def speak(self):
return "멍멍!"
Dog
클래스는 Animal
클래스의 기능을 상속받아 재정의(오버라이딩)하거나 확장할 수 있습니다.
3. 다형성 (Polymorphism)
다형성은 같은 이름의 메서드가 서로 다른 방식으로 동작할 수 있도록 하는 특성입니다. 상속과 메서드 오버라이딩을 통해 구현됩니다.
def animal_sound(animal):
print(animal.speak())
dog = Dog()
animal_sound(dog) # "멍멍!" 출력
animal_sound
함수는 Animal
타입의 객체를 인자로 받지만, 실제 실행 시 Dog
의 speak()
가 호출됩니다.
4. 추상화 (Abstraction)
추상화는 복잡한 내부 구현을 숨기, 외부에 필요한 기능만 제공하는 것을 의미합니다. 사용자는 객체가 어떻게 작동하는지 몰라도, 제공된 인터페이스를 통해 사용할 수 있습니다.
클래스의 활용 예시
다음은 BankAccount
클래스를 통해 은행 계좌를 모델링한 예시입니다.
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.__balance = balance # 캡슐화: 비공개 속성
def deposit(self, amount):
if amount > 0:
self.__balance += amount
print(f"{amount}원 입금됨. 잔액: {self.__balance}원")
else:
print("입금 금액은 0보다 커야 합니다.")
def withdraw(self, amount):
if 0 < amount <= self.__balance:
self.__balance -= amount
print(f"{amount}원 출금됨. 잔액: {self.__balance}원")
else:
print("잔액 부족 또는 잘못된 금액.")
def get_balance(self):
return self.__balance
# 사용 예
account = BankAccount("김철수", 10000)
account.deposit(5000)
account.withdraw(3000)
print("현재 잔액:", account.get_balance())
관련 개념
개념 | 설명 |
---|---|
객체 (Object) | 클래스를 기반으로 생성된 구체적인 인스턴스 |
인스턴스 (Instance) | 클래스로부터 생성된 객체의 다른 표현 |
인터페이스 (Interface) | 클래스가 제공해야 하는 메서드의 명세 (특정 언어에서 사용) |
추상 클래스 (Abstract Class) | 일부 메서드가 구현되지 않은 클래스로, 상속을 위해 사용됨 |
참고 자료
- Gamma, E. et al. (1994). 『디자인 패턴: 객체 지향 소프트웨어의 재사용을 위한 원리』
- Python 공식 문서: Classes - Python 3 Documentation
- Oracle Java 튜토리얼: Classes and Objects
클래스는 소프트웨어 설계에서 중요한 역할을 하며, 잘 설계된 클래스는 프로그램의 구조를 명확하게 하고, 협업 개발을 용이하게 합니다. 객체지향 설계 원칙(SOLID)을 함께 고려하면 더욱 견고한 클래스 설계가 가능합니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.