이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
객체 지향 프로그래밍(OOP)은 작업과 데이터가 아닌 객체를 중심으로 코드를 구성하는 프로그래밍 패러다임입니다. OOP에서 코드는 데이터를 나타내는 개체와 해당 데이터에서 수행할 수 있는 작업으로 구성됩니다. 이 패러다임은 Java, C++ 및 Python을 비롯한 많은 프로그래밍 언어에서 사용됩니다.
OOP는 코드를 보다 모듈화하고 확장 가능하며 유지 관리할 수 있게 만드는 강력한 프로그래밍 패러다임입니다. 또한 코드를 이해하고 변경하기 쉬운 방식으로 구성해야 하는 대규모 프로젝트에서도 자주 사용됩니다.
OOP에서 개체는 데이터와 해당 데이터에서 수행할 수 있는 작업을 나타내는 독립적인 코드 단위입니다. 개체는 자체 데이터와 코드가 있는 미니 프로그램으로 생각할 수 있습니다.
개체는 클래스라는 템플릿에서 생성됩니다. 클래스는 개체의 청사진입니다. 객체에 포함될 데이터와 코드를 정의합니다.
코드에서 개체를 사용하면 다음과 같은 몇 가지 이점이 있습니다.
상속은 한 개체가 다른 개체의 데이터와 코드를 상속할 수 있도록 하는 OOP의 기능입니다. 이것은 개체의 계층 구조를 만드는 데 사용할 수 있으며 각 개체는 그 위에 있는 개체의 보다 특수화된 버전입니다.
예를 들어 모든 동물에 공통적인 데이터와 코드를 포함하는 "Animal"이라는 기본 클래스가 있을 수 있습니다. 여기에는 "이름" 및 "체중"과 같은 데이터와 "먹다" 및 "수면"과 같은 코드가 포함될 수 있습니다.
그런 다음 "개" 및 "고양이"와 같은 특정 유형의 동물에 대해 "동물"의 하위 클래스를 만들 수 있습니다. 이러한 하위 클래스는 "Animal" 클래스의 데이터와 코드를 상속하지만 해당 동물 유형에 특정한 데이터와 코드도 포함할 수 있습니다.
다형성(Polymorphism)은 객체가 다른 유형인 것처럼 취급될 수 있도록 하는 OOP의 기능입니다. 특정 유형의 개체를 미리 알지 않고도 다양한 유형의 개체에 대해 작업할 수 있는 코드를 작성하려는 경우에 유용할 수 있습니다.
예를 들어 모든 셰이프에 공통적인 데이터와 코드를 포함하는 "Shape"라는 기본 클래스가 있을 수 있습니다. 여기에는 "색상" 및 "크기"와 같은 데이터와 "그리기" 및 "크기 조정"과 같은 코드가 포함될 수 있습니다.
그런 다음 "원" 및 "직사각형"과 같은 특정 유형의 도형에 대해 "도형"의 하위 클래스를 만들 수 있습니다. 이러한 하위 클래스는 "Shape" 클래스의 데이터와 코드를 상속하지만 해당 유형의 모양에 특정한 데이터와 코드도 포함할 수 있습니다.
그런 다음 특정 유형의 객체를 미리 알지 않고도 모든 유형의 "Shape" 객체와 함께 작동할 수 있는 코드를 작성할 수 있습니다. 이 코드는 "Circle" 개체 및 "Rectangle" 개체뿐만 아니라 "Shape"의 다른 하위 클래스에서도 작동합니다.
클래스는 개체의 청사진입니다. 객체에 포함될 데이터와 코드를 정의합니다.
클래스는 키워드 "class"를 사용하여 생성됩니다. 예를 들어 다음 코드는 "Animal"이라는 클래스를 만듭니다.
class Animal:
pass
인스턴스는 클래스에서 생성된 개체입니다. 예를 들어 다음 코드는 "Animal" 클래스의 인스턴스를 만듭니다.
animal = Animal()
메서드는 클래스 내에 포함된 함수입니다. 메서드는 개체 내에 포함된 데이터에 대해 작업을 수행하는 데 사용됩니다.
메서드는 키워드 "def"를 사용하여 생성됩니다. 예를 들어 다음 코드는 "food"라는 하나의 매개 변수를 사용하는 "eat"라는 메서드를 만듭니다.
def eat(self, food):
pass
생성자는 개체를 만드는 데 사용되는 특수한 유형의 메서드입니다. 생성자는 클래스의 인스턴스가 생성될 때 호출됩니다.
생성자는 "init" 키워드를 사용하여 생성됩니다. 예를 들어 다음 코드는 "Animal" 클래스에 대한 생성자를 만듭니다.
def __init__(self, name, weight):
self.name = name
self.weight = weight
캡슐화는 객체 내에서 데이터를 숨길 수 있도록 하는 OOP의 기능입니다. 이것은 데이터가 직접 액세스되거나 수정되는 것을 방지하는 데 사용할 수 있습니다.
캡슐화는 "private" 키워드를 사용하여 수행됩니다. 예를 들어 다음 코드는 "__name"이라는 개인 변수를 만듭니다.
class Animal:
def __init__(self, name, weight):
self.__name = name
self.weight = weight
속성은 개체 내의 데이터에 액세스하거나 수정하는 데 사용되는 특수한 유형의 변수입니다. 속성은 키워드 "property"를 사용하여 생성됩니다. 예를 들어 다음 코드는 "__name" 변수에 액세스하거나 수정하는 데 사용할 수 있는 "name"이라는 속성을 만듭니다.
class Animal:
def __init__(self, name, weight):
self.__name = name
self.weight = weight
@property
def name(self):
return self.__name
@name.setter
def name(self, value):
self.__name = value
정적 메서드는 개체가 아닌 클래스와 연결된 메서드입니다. 클래스의 인스턴스를 만들지 않고 정적 메서드를 호출할 수 있습니다.
정적 메서드는 "staticmethod" 키워드를 사용하여 생성됩니다. 예를 들어 다음 코드는 "name" 및 "weight"라는 두 개의 매개 변수를 사용하는 "create_animal"이라는 정적 메서드를 만듭니다.
class Animal:
def __init__(self, name, weight):
self.__name = name
self.weight = weight
@staticmethod
def create_animal(name, weight):
return Animal(name, weight)
클래스 변수는 개체가 아니라 클래스와 관련된 변수입니다. 클래스 변수는 클래스의 모든 인스턴스에서 액세스할 수 있습니다.
클래스 변수는 "classmethod" 키워드를 사용하여 생성됩니다. 예를 들어, 다음 코드는 "Animal" 객체가 생성될 때마다 증가하는 "num_animals"라는 클래스 변수를 생성합니다.
class Animal:
num_animals = 0
def __init__(self, name, weight):
self.__name = name
self.weight = weight
Animal.num_animals += 1
개체 지향 프로그래밍은 코드를 보다 모듈화하고 확장 가능하며 유지 관리할 수 있게 만드는 강력한 프로그래밍 패러다임입니다. 또한 코드를 이해하고 변경하기 쉬운 방식으로 구성해야 하는 대규모 프로젝트에서도 자주 사용됩니다.