목록디자인 패턴 (8)
DailyCode
의존관계 역전 법칙(Dependency Inversion Principle, ISP)은 객체 지향 프로그래밍에서 SOLID 원칙 중 하나입니다. 이 원칙은 상위 모듈과 하위 모듈 간의 의존성을 최소화하고, 추상화를 통해 서로간의 결합도를 낮추는 것을 목표로 합니다. 이를 통해 시스템의 확장성, 재사용성, 테스트 용이성 등이 향상되며, 유지보수가 용이해집니다. 이를 구현하기 위해 의존성 주입(Dependency Injection)과 같은 기법이 사용되곤 합니다. 의존성 주입은 별도의 게시글로 소개 하겠습니다. 정의 시스템은 추상화에 의존하고, 구체화에 의존하면 안 된다 상위 모듈은 하위 모듈의 구현에 의존하면 안 된다. 하위 모듈(Class)이 상위 모듈에 정의한 추상 타입(Protocol)에 의존해야 ..
인터페이스 분리 법칙(Interface Segregation Principle, ISP)은 객체 지향 프로그래밍에서 SOLID 원칙 중 하나로, 인터페이스의 설계와 관련된 원칙입니다. 이 법칙은 큰 범용 인터페이스를 작은, 특정 목적에 맞는 여러 인터페이스로 분리하는 것을 권장하는 법칙입니다. 이를 통해 코드의 결합도를 낮추고, 유지 보수와 확장성을 향상시킬 수 있습니다. 정의 • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. 이 원칙은 각각의 클라이언트에게 필요한 기능만을 제공하는 인터페이스를 여러 개 작성하는 것이, 모든 기능을 포함하는 하나의 거대한 인터페이스를 작성하는 것보다 훨씬 효과적이라는 것을 강조합니다. • 기능 구현 및 상속 시 불필요한 메서드가 구현될 필요..
정의 객체 지향 프로그래밍과 소프트웨어 설계에서 사용되는 원칙 중 하나로, 바바라 리스코프(Barbara Liskov)에 의해 소개되었습니다. 이 원칙은 "서브타입은 그들의 기반 타입을 대체할 수 있어야 한다"라는 원리를 제시합니다. LSP는 상속과 다형성의 올바른 사용을 강조하며, SOLID 설계 원칙 중 하나입니다. 특징 서브타입과 기반 타입: LSP는 서브 타입(subtype)이 기반 타입(basetype)을 대체할 수 있어야 함을 주장합니다. 이 말은 기반 타입의 객체가 사용되는 모든 위치에서 서브타입의 객체로 대체되어도 프로그램의 동작이 올바르게 유지되어야 함을 의미합니다. 메서드 시그니처: 서브타입은 기반 타입에서 상속받은 메서드를 오버라이딩할 때, 메서드 시그니처를 유지해야 합니다. 이는 매..
정의 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하지만 변경에는 닫혀 있어야 한다는 개념입니다. 이는 기존의 코드를 변경하지 않고도 새로운 기능을 추가할 수 있도록 하는 것을 목표로 합니다. 이를 위해서는 클래스와 인터페이스를 확장 가능하도록 설계해야 합니다. 장점 기능 추가에 용이 OCP를 따르는 코드는 기능 추가 시 기존 코드를 변경하지 않아도 되므로 유연성이 높습니다. 클래스를 분리 테스트 할 수 있어 개별 부분에 대한 테스트가 용이 OCP를 따르는 코드는 기능 추가 시 기존 코드를 변경하지 않아도 되므로 유연성이 높습니다. 예제 도형의 너비를 구하는 클래스를 예로 들어보겠습니다. 이 클래스는 도형의 종류에 따라 너비를 구하는 메소드를 제공합니다. 만약 새로운 도형이 추가되면..
SOLID 원칙 : 로버트 마틴이 개발한 객체 지향 프로그래밍의 다섯 가지 기본 원칙인 SOLID 원칙은 소프트웨어를 구축하며 확장성과 유지 관리를 쉽게 할 수 있는 지침입니다. 마이클 페더스가 이 원칙들을 이해하기 쉽게 두 문자어 기억술을 사용하여 SOLID라는 이름으로 소개했습니다. 이 글에서는 SOLID 원칙 중 'S', 즉 단일 책임 원칙(Single Responsibility Principle, SRP)에 대해 알아보겠습니다. SRP(Single Responsibility Principle): 단일 책임 원칙 정의 단일 책임 원칙은 소프트웨어 시스템의 각 클래스 또는 모듈이 하나의 책임을 가지며, 해당 책임만을 수행해야 함을 강조하는 원칙입니다. 각 클래스는 하나의 책임 또는 기능을 캡슐화하며,..
정의 탬플릿 메서드 디자인 패턴은 슈퍼클래스에서 로직의 골격을 정의하며, 서브클래스가 구조를 변경하지 않고 특정 기능에 대해 자체 구현을 제공하는 디자인 패턴입니다. 스위프트에서는 상속과 오버라이딩을 통해 이를 구현할 수 있습니다. 사용 이유 탬플릿 메서드 디자인 패턴은 코드를 쉽게 수정할 수 있도록 해주기 때문에, 확장하기 어렵거나 유사한 코드를 작성해야 할 때 유용합니다. 사용 확장에는 열려있고 수정에는 닫혀있는(OCP) 상황에서 기존 논리를 수정하지 않고 기능을 확장하고 싶을 때 자신만의 프레임워크를 만들고 일부 파라미터를 전달할 때 구성 요소 추상 클래스(부모 클래스) 로직의 공통 구조를 정의하는 추상 베이스 클래스를 생성하는 것으로 시작됩니다. 추상 클래스는 구현되진 않았지만 선언된 메서드 하나..
정의 로직을 인터페이스(프로토콜)로 사전에 정의하고, 각 로직을 캡슐화하여 상호 호환할 수 있도록 만드는 데 사용되는 패턴 전략패턴을 통해 클라이언트는 컴파일 타임이 아닌 런타임 알고리즘을 선택할 수 있으며,(부가설명: 기존에 소스를 정의(하드코딩)하는 것이 아닌 작업중 교체) 그로인해 클라이언트의 영향을 미치지 않고 로직을 변경합니다. 이 패턴은 코드 재사용성, 유지보수성 및 유연성을 촉진하기 때문에, 클래스의 동일한 방법을 다른 방식으로 수행하는 로직이 많을 때 유용합니다. 구성요소 전략 인터페이스: 구현해야 하는 모든 전략에 대한 공통 인터페이스 구현부: 전략 인터페이스를 상속받아 실제 구현 연결부: 전략 인터페이스를 사용하여 구현부와 통신. 구현부 중 하나에 대한 참조를 보유하고 알고리즘을 실행하..
Command 패턴은 메서드 호출, 요청 또는 작업을 단일 객체로 캡슐화할 수 있는 동작 디자인 패턴입니다. 명령이라고 하는 이 객체는 다른 메서드나 객체에 매개변수로 전달되어 저장되고 나중에 실행될 수 있습니다. Command 패턴은 네 가지 주요 구성 요소로 이루어져 있습니다: 커맨드 패턴 용어 Receiver 명령이 요청하는 작업을 실제로 수행하는 객체입니다. Receiver는 초기화 중에 ConcreteCommand에 전달되며 멤버 변수로 저장됩니다. Command execute 메서드를 정의하는 인터페이스 또는 추상 클래스입니다. execute 메서드는 명령이 실행될 때 수행할 작업을 지정합니다. Command에는 실제 작업을 수행할 수신자 객체에 대한 참조도 포함됩니다. Concrate Com..