CS
어탭터 패턴 (Adapter Pattern) Adapter의 필요성 1. 문제 : 사용 객체의 API가 서로 다름2. 해결방안 : 함수를 변환하는 객체를 중간에 넣음3. 결과 : 변경 최소화 기존 소프트웨어 시스템에서 새로운 업체에서 제공한 클래스 라이브러리를 사용해야 한다고 가정해보자.새로 채택한 업체에서 사용하는 인터페이스가 기존 업체에서 사용하던 인터페이스와 다른 경우라면 이를 변환해주는 매개체가 필요할 것이다.어댑터는 클라이언트로부터 요청을 받아서 새로운 업체에서 제공하는 클래스에서 받아들일 수 있는 형 태의 요청으로 변환시켜주는 중개인 역할을 한다. Target Target은 클라이언트가 사용하는 인터페이스를 정의한다.클라이언트는 이 Target 인터페이스를 통해 서비스나 동작을 호출한다...
Architecture(아키텍처) 시스템 아키텍쳐컴퓨터(머신)의 배치 방법, 머신에 소프트웨어의 배치 방법소프트웨어 아키텍쳐소프트웨어 컴포넌트의 논리적 구성 및 역할에 대한 구성이벤트 중심 , 레이어, 객체지향 아키텍쳐 등등 레이어 아키텍쳐(Layerd Architecture)기능을 계층으로 쪼개어 각자의 기능에 충실하게 함각 레이어는 이전 레이어를 사용하여 상위 레이어로 Export 되도록 → 상위, 하위 계층과만 교류가 가능하도록 제약조건을 걸음예를 들어 TCP는 4계층하나의 계층이 문제가 생기면 Bottleneck(병목 현상) 발생 가능, Single Point of Failure 객체 기반 아키텍쳐(Object-based) Client-Server Architecture(클라어언트..
Multiprocessors vs Multicomputers Shared Memory(Multiprocessors)Shared Memory 아키텍처는 여러 프로세스 또는 스레드가 단일 공유 메모리에 접근하는 컴퓨팅 시스템. 모든 프로세서가 동일한 주소 공간에 접근할 수 있으며, 데이터 공유 및 통신이 용이하다.동시에 공유 메모리에 접근하는 경우 경쟁 조건과 동기화 문제가 발생할 수 있음.Private Memory(Multicomputer)각 프로세서가 자체 독립적인 메모리를 가지고 있으며, 데이터 공유와 프로세서 간의 통신은 네트워크를 통해 이루어진다.확장성과 동기화 문제가 감소한다. Bus-based Architecture프로세서 및 메모리 간의 통신에 Bus(공유 데이터 경로)를 사용.버스는 모든 프..
분산 시스템이란? 네트워크로 연결되어 있음어떤 목표를 달성하기 위해 함께 작동하는 독립적인 컴퓨터들의 집합소프트웨어 : 사용자에게는 하나의 싱글 시스템처럼 보이게됨(분산 인식을 잘 모름)하드웨어 : 자율 컴퓨터 → OS/메모리/클럭를 공유하지 않고 자기만의 것을 가지고 있음.(상이한 성질의 서버 컴퓨터들이라고 보면 분산 환경을 운영하기 어려움 → 미들웨어) Flynn의 분산 시스템 체계 Flynn의 분산 시스템을 분류하기 위한 방법으로 다음 네 가지 주요 유형으로 정의하였다.SISD (Single Instruction, Single Data)하나의 처리기(CPU)가 하나의 명령어를 실행하고 하나의 데이터를 처리한다.병렬 처리의 이점을 제공하지 않는다.SIMD (Single Instruction, M..
팩토리 메서드 패턴(Factory Method Pattern) 팩토리 메서드 패턴은 객체 생성을 처리하기 위한 디자인 패턴이다.팩토리 메서드 패턴을 사용하면 Creator와 Product를 분리함으로써, 객체 생성과 사용을 독립적으로 관리할 수 있다. CreatorCreator는 객체 생성을 위한 인터페이스 또는 추상 클래스를 정의한다.Creator 클래스는 구체적인 제품(Product) 객체를 반환하는 역할을 하는 팩토리 메서드를 선언한다.팩토리 메서드는 Creator 클래스에서 정의되지만 실제로 구현하지 않고 서브 클래스인 ConcreteCreator(Creator1)로 객체 생성에 대한 역할을 위임하여 사용한다. ProductProduct는 Creator에서 생성될 객체의 인터페이스 또는 추상 클..
Decorator Pattern 객체에 추가적인 책임을 동적으로 부여할 수 있도록 설계한다.데코레이터는 서브클래스(상속)을 사용하지 않아도 유연하고 융통성 있는 기능 확장을 가능하게 한다.상속으로 문제를 풀면 너무 많은 상속 관계가 발생할 수 있음상속을 사용하지 않고, 새로운 기능을 추가하는 것이 목표데코레이터 패턴에서는 객체에 추가적인 요건을 동적으로 추가할 수 있도록 함데코레이터 패턴에서의 상속은 기능(행동)을 물려받기 위해서가 아니라 형식을 맞추기 위해서 사용된다. 1. Component : 각 구성요소는 직접 쓰일 수도 있고 데코레이터로 감싸져서 쓰일 수도 있음. 클래스 또는 인터페이스2. ConcreteComponent : 새로운 행동을 동적으로 추가3. Decorator : 자신이 장식할 구성..
Observer Pattern Observer 패턴은 객체 간에 일대다 의존성을 정의하며, 어떤 객체의 상태가 변경되면 그 객체에 의존하는 다수의 객체들이 자동으로 알림을 받아 업데이트될 수 있도록 하는 디자인 패턴이다. 해당 디자인 패턴에는 두 가지 주요 역할이 있다.Observer(관찰자): 관찰 대상인 Subject의 상태 변화를 감시하고, 변화가 있을 때마다 적절한 Action을 취하도록 설계한다.구현: Observer 인터페이스나 추상 클래스를 통해 정의되며 이 인터페이스에는 주로 update() 메서드가 포함되어 있어서 Subject로부터의 업데이트를 처리한다.Subject(주제): 상태 변화가 일어날 때, 그 변화를 Observer들에게 알리는 역할을 한다. Subject는 Observer들..
Strategy Pattern 같은 종류의 작업을 하는 알고리즘을 정의, 각 알고리즘을 캡슐화, 그리고 알고리즘들을 바꿔 유동적으로 사용할 수 있도록 하는 디자인패턴.알고리즘을 사용하는 클라이언트로 부터 독립적으로 알고리즘을 바꿔서 적용시킬 수 있도록 한다.클라이언트에 모든 알고리즘을 포함시키는 것은 클라이언트 코드의 양이 늘어나고 복잡해진다. 이는 유지 보수가 어려워지며, 새로운 알고리즘 추가를 하려면 기존 코드를 수정해야 하는 문제가 있다. Context : 캡슐화된 알고리즘을 멤버 변수로 포함하며, 알고리즘을 교환해서 적용시킬 수 있다.Strategy : 컴파일 시점에서 사용하는 캡슐화된 알고리즘, 실제 구현은 하위 Strategy(n) 클래스에 위임, 인터페이스 혹은 추상클래스로 구현한다.St..
Iterator Pattern 여러 요소들을 담고 있는 객체의 내부 구조에 대한 이해 없이 각 요소를 순서대로 접근하고 사용할 수 있도록 방법을 제공한다. Collection에서의 Iterator Pattern 사실 우리가 이미 일반적으로 사용하고 있는 Collection의 경우에도 Iterator 패턴이 적용되어 있다. import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args){ List list = new ArrayList(); for(Integer n : list){ System.out.println(n); ..