본문 바로가기

Swift '문법'

Class '클래스'

클래스 정의는 객체지향 프로그래밍의 핵심 개념중 하나입니다. 클래스는 객체의 상태(속성)와 동작(메서드)을 정의 하는 객체의 청사진입니다.

'class' 키워드를 사용합니다.

class Dog:
    # 클래스 변수 (모든 인스턴스가 공유하는 변수)
    species = "Canis familiaris"

    # 생성자 메서드 (인스턴스를 초기화하는 메서드)
    def __init__(self, name, age):
        self.name = name  # 인스턴스 변수
        self.age = age    # 인스턴스 변수

    # 인스턴스 메서드 (인스턴스와 관련된 행동을 정의)
    def bark(self):
        return f"{self.name} says woof!"

    # 인스턴스 메서드 (인스턴스의 상태를 변경)
    def get_older(self):
        self.age += 1

    # 클래스 메서드 (클래스 자체와 관련된 행동을 정의)
    @classmethod
    def species_name(cls):
        return cls.species

    # 정적 메서드 (클래스와 인스턴스와는 독립적으로 동작)
    @staticmethod
    def dog_fact():
        return "Dogs have been human companions for over 14,000 years."

클래스의 구성요소

1. 클래스 변수: 모든 인스턴스가 공유하는 변수입니다. 클래스 선언 내에 직접 정의됩니다.

species = "Canis familiaris"

2.인스턴스 변수: 각 인스턴스마다 개별적으로 유지되는 변수입니다. 생성자 메서드 __init__에서 self를 통해 정의됩니다.

self.name = name
self.age = age

3.생성자 메서드: 클래스의 인스턴스를 초기화하는 특별한 메서드입니다. __init__ 메서드가 그것입니다.

def __init__(self, name, age):

4.인스턴스 메서드: 인스턴스와 관련된 행동을 정의하는 메서드입니다. 첫 번째 인수로 self를 받습니다.

def bark(self):

5.클래스 메서드: 클래스 자체와 관련된 행동을 정의하는 메서드입니다. 첫 번째 인수로 cls를 받으며, @classmethod 데코레이터를 사용합니다.

@classmethod
def species_name(cls):

6.정적 메서드: 클래스나 인스턴스와 독립적으로 동작하는 메서드입니다. @staticmethod 데코레이터를 사용합니다.

@staticmethod
def dog_fact():

예제 사용

클래스를 정의한 후에는 이를 사용하여 인스턴스를 만들 수 있습니다.

# Dog 클래스의 인스턴스를 생성
dog1 = Dog("Buddy", 5)
dog2 = Dog("Molly", 3)

# 인스턴스 메서드 호출
print(dog1.bark())  # Buddy says woof!
print(dog2.bark())  # Molly says woof!

# 인스턴스 변수 접근
print(dog1.age)  # 5

# 인스턴스 변수 변경
dog1.get_older()
print(dog1.age)  # 6

# 클래스 메서드 호출
print(Dog.species_name())  # Canis familiaris

# 정적 메서드 호출
print(Dog.dog_fact())  # Dogs have been human companions for over 14,000 years.

 

클래스를 정의하고 사용하는 기본 사항을 보여줍니다. 클래스는 코드 재사용성과 구조를 용이하게 하여 복잡한 프로그램을 효율적으로 작성할 수 있도록 해줍니다.

'Swift '문법'' 카테고리의 다른 글

Set  (0) 2024.07.08
Enum(Enumeration)  (0) 2024.07.05
튜플(tuple)  (0) 2024.07.03
스택(Stack) 큐(Queue)  (0) 2024.07.02
옵셔널 체이닝 (Optional Chaining)  (0) 2024.07.01