본문 바로가기

설계

(27)
[파이썬] 상속성 (Inheritance) 상속성(Inheritance)은 객체지향 프로그래밍에서 중요한 개념 중 하나로, 이미 존재하는 클래스를 기반으로 새로운 클래스를 정의하는 것을 의미합니다. 상속을 사용하면, 이미 존재하는 클래스의 모든 속성과 메소드를 새로운 클래스에서 사용할 수 있습니다. 예를 들어, 자동차 클래스와 스포츠카 클래스를 생각해보겠습니다. 자동차 클래스는 자동차의 기본적인 속성과 메소드를 갖고 있고, 스포츠카 클래스는 자동차 클래스를 상속받아서 자신만의 추가적인 속성과 메소드를 갖게 됩니다. 1. 예제 코드 이제 Python 코드로 간단한 예제를 살펴보겠습니다. class Car: def __init__(self, make, model, year): self.make = make self.model = model self...
[파이썬] 캡슐화 (Encapsulation) 캡슐화는 객체지향 프로그래밍에서 중요한 개념 중 하나로, 객체의 상태를 외부에서 직접적으로 접근하지 못하도록 보호하는 것을 말합니다. 이를 통해 객체의 내부 구현을 외부에서 숨기고, 객체가 제공하는 인터페이스를 통해 상호작용할 수 있도록 합니다. 이를 통해 코드의 안정성과 유지보수성을 높일 수 있습니다. Python에서는 캡슐화를 구현하는 가장 간단한 방법은 클래스 내에서 멤버 변수와 멤버 메소드의 접근 제어를 통해 구현하는 것입니다. 파이썬에서는 멤버 변수와 멤버 메소드의 이름 앞에 언더스코어(_)를 붙여서 접근 제어를 구현할 수 있습니다. 1. 예제코드 다음은 캡슐화를 구현한 예시 코드입니다. class BankAccount: def __init__(self, name, balance): self._..
[파이썬] 레이어드 (layered) 아키텍처 레이어드 아키텍처(Layered Architecture)는 소프트웨어를 구성하는 아키텍처 중 하나로, 서로 다른 계층으로 구성되어 있습니다. 이 아키텍처에서 각 계층은 다른 계층과 상호작용하여 전체 시스템을 구성합니다. 각 계층은 자신이 책임져야 할 기능을 수행하며, 다른 계층에 대한 인터페이스를 제공합니다. 1. 설명 레이어드 아키텍처의 가장 일반적인 예는 3계층 아키텍처입니다. 이 아키텍처는 다음과 같은 세 개의 계층으로 구성됩니다. 프레젠테이션 계층 (Presentation Layer): 사용자 인터페이스(UI)를 담당하는 계층입니다. 사용자와 시스템 간의 상호작용을 처리하며, 사용자가 시스템을 조작할 수 있도록 UI를 제공합니다. 비즈니스 계층 (Business Layer): 비즈니스 로직을 처리..
[파이썬] 포트와 어댑터 패턴 포트와 어댑터 패턴은 소프트웨어 디자인 패턴 중에서, 소프트웨어 컴포넌트간의 연결을 관리하고, 서로 다른 인터페이스를 갖는 객체들간의 상호작용을 가능하게 해주는 패턴입니다. 포트(Port)는 인터페이스를 나타내며, 송수신 가능한 통신 채널을 제공합니다. 어댑터(Adapter)는 서로 다른 인터페이스를 가진 객체들 간의 상호작용을 가능하게 해주는 중간 역할을 수행합니다. 어댑터는 포트를 통해 객체들 간의 상호작용을 담당합니다. 1. 예제 코드 다음은 파이썬 예제 코드로 포트와 어댑터 패턴을 설명하겠습니다. # 포트 인터페이스 정의 class PaymentPort: def process_payment(self, amount): pass # 포트 구현체1: 신용카드 결제 class CreditCardPayme..
[파이썬] 저장소 패턴 (Repository Pattern) 에 대해서 파이썬에서 Repository Pattern은 데이터 저장소의 독립성을 보장하고 비즈니스 로직을 데이터 액세스 코드로부터 분리하는 디자인 패턴입니다. Repository Pattern을 사용하면 데이터베이스, 파일 시스템 또는 다른 데이터 저장소와 같은 데이터 저장소를 변경하더라도 비즈니스 로직의 변경 없이 쉽게 전환할 수 있습니다. 이 패턴은 데이터 액세스 계층과 비즈니스 로직 계층 사이의 의존성을 제거하여, 코드를 보다 관리하기 쉽게 만들고, 유지 보수성을 높이며, 코드 재사용성을 높이는 데 도움이 됩니다. 1. 구성 요소 Repository Pattern은 다음과 같은 요소로 이루어집니다. Interface: Repository 인터페이스는 데이터 액세스 계층과 비즈니스 로직 계층 간의 상호 작용을..
[디자인 패턴] 비지터 패턴 (Visitor Pattern) - python 예제 코드 Visitor Pattern은 객체 지향 디자인 패턴 중 하나로, 객체를 탐색하고 객체의 각 요소에 대해 작업을 수행하는 방법을 제공합니다. 이 패턴은 객체의 구조와 작업을 분리하고, 새로운 작업을 추가하거나 객체 구조를 수정하지 않고도 작업을 수행할 수 있게 합니다. 패턴의 핵심 아이디어는 방문자(visitor)라는 개체를 사용하는 것입니다. 방문자는 객체 구조를 탐색하고 각 객체에 대해 특정 작업을 수행합니다. 이 때 객체는 방문자를 인자로 전달하고, 방문자는 객체의 메소드를 호출하여 작업을 수행합니다. 1. 예제 코드 Python 예제 코드를 통해 이해해보겠습니다. class Element: def accept(self, visitor): pass class ConcreteElementA(Eleme..
[디자인 패턴] 템플릿 메서드 패턴 (Template Method Pattern) - python 예제 코드 템플릿 메서드 패턴은 객체 지향 디자인 패턴 중 하나로, 알고리즘의 구조를 정의하는 패턴입니다. 이 패턴을 사용하면 알고리즘의 골격을 정의하고, 각 단계에서 다른 구현을 제공하여 코드 중복을 줄일 수 있습니다. 패턴의 핵심은 "템플릿 메서드"라는 추상 메서드를 가진 추상 클래스를 정의하는 것입니다. 이 클래스는 알고리즘의 골격을 정의하고, 구체적인 구현은 서브클래스에서 제공합니다. 템플릿 메서드는 알고리즘의 각 단계를 호출하는데 사용되며, 서브클래스에서 구현될 수 있는 메서드도 호출됩니다. 예를 들어, 게임에서 캐릭터를 만드는 경우를 생각해보겠습니다. 캐릭터는 머리, 몸, 다리 등으로 구성되어 있으며, 이들 각각을 만드는 과정에서 공통적으로 수행해야 할 작업이 있습니다. 예를 들어, 캐릭터의 각 부분은 ..
[디자인 패턴] 스트래티지 패턴 (Strategy Pattern) - python 예제 코드 스트래티지 패턴(Strategy Pattern)은 객체 지향 디자인 패턴 중 하나로, 알고리즘을 정의하고 각각을 캡슐화하며, 이를 상호 교환 가능하도록 만드는 패턴입니다. 이 패턴은 프로그램에서 알고리즘을 선택할 때 유연성을 제공하며, 알고리즘의 적용을 담당하는 코드와 알고리즘 자체를 구현하는 코드를 분리하여 코드의 재사용성을 높이고 유지보수를 용이하게 합니다. 1. 예제 코드 간단한 예제로, 리스트에 대한 정렬을 수행하는 코드를 작성해보겠습니다. # Strategy pattern example for sorting a list class SortStrategy: def sort(self, data): pass class QuickSortStrategy(SortStrategy): def sort(self..