Study cs 9일차(디자인패턴)

디자인 패턴 정의와 주의점

특정 컨텍스트 내에서 주어진 문제에 대한 해결책이다. 어떤 컨텍스트 내에서 일련의 제약조건에 의해 영향을 받을 수 있는 문제에 봉착했다면 그 제약조건 내에서 목적을 달성하기 위한 해결책을 찾아낼 수 있는 디자인을 적용.

주의점

과다한 사용은 불필요한 코드 초래 가능

디자인 패턴 사용부분은 주석으로 설명해 패턴이 분명하게 드러날 수 있도록 한다.

디자인 원칙

애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리한다.

구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.

상속보다는 구성을 활용한다.

서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결한하는 디자인을 사용해야 한다.

클래스는 확장에 대해서는 열려 있어야 하지만 코드 변경에 대해서는 닫혀 있어야 한다.

생성,구조,행위의 각 대표적 패턴을 적으시오.

생성 패턴

생성 패턴이란 객체 생성에 대해서 다루고 상황에 적절한 객체를 만드는 것입니다. 생성에 관련된 패턴을 사용하면 쉽고 간단하게 객체 생성을 할 수 있습니다.

  • Builder
  • Dependency Injection
  • Singleton

구조 패턴

기존에 생성되어 있는 클래스를 새롭게 구현하는 클래스에 맞지 않는 경우에 사용합니다. 작은 클래스의 합성을 통해 더 큰 클래스 구조를 형성하기 위한 패턴입니다.

  • Adapter
  • Facade

행위 패턴

객체의 행위를 조직, 관리, 조합하는데 사용하는 패턴으로 객체들이 다른 객체와 상호작용하는 방식을 규정한다. 각각 다른 객체들과 통신하는 방법과 객체의 책임을 규정하여 복잡한 행위들을 관리 할 수 있도록 함. 두 객체 간의 관계에서부터 앱의 전체 아키텍처에까지 영향을 미침

  • Command
  • Observer
  • Model View Controller
  • Model View ViewModel

Singleton 패턴의 특징을 설명하시오.

해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록(전역 접근) 하기 위한 패턴

Decorator, Adapter와 Facade 패턴의 차이점을 설명하시오.

Decorator 패턴 : 인터페이스는 바꾸지 않고 책임(기능)만 추가

Adapter 패턴 : 한 인터페이스를 다른 인터페이스로 변환

Facade 패턴 : 인터페이스를 간단하게 바꿈

Observer 패턴의 특징을 설명하시오.

  • 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다.
  • 하나의 객체가 상태를 변경하면 모든 종속된 객체에 자동으로 통지되고 업데이트를 수행
  • API 호출과 같이 불확실한 시간의 작업을 위해서 사용 할 수 있으며 사용자 입력을 처리하는데 사용 할 수 있음
  • RxJava(RxAndroid)를 사용하면 앱 전체에 해당 패컨을 구현 할 수 있음
  • 값(이벤트)를 방출 할 Observable 객체를 정의
  • Observable들은 한 번 또는 연속적으로 스트림, 값, 이벤트를 방출함
  • Subscriber는 이러한 값을 수신하고 도작한 대로 응답
  • 예를들어, API 호출을 작성하고 서버에서 응답을 처리할 Subscriber를 지정 할 수 있음

Observable

register, remove, notify

Observer

update(notify 에서 update를 호출)

Singeton이 정적 메소드보다 나은 이유는?

  • 상속과 인터페이스 : 싱글톤은 객체다. 따라서 베이스 클래스로부터 상속을 받고 인터페이스를 구현할 수 있다.
  • 다수 객체로 전환 가능 : 나중에 마음이 바뀌어 (예를 들어 스레드당 하나같은 식으로) 여러 객체를 만들고자 하는 경우에 코드를 많이 바꾸지 않고도 원하는 바를 이룰 수 있다. (물론 이렇게 되면 더 이상 싱글톤 패턴을 쓰지 않는 셈이 된다.
  • 동적 바인딩 : 싱글톤을 생성하기 위해 실제로 사용하는 클래스를 컴파일시가 아닌 실행시에 결정할 수 있다.

Template Method 패턴 설명과, Strategy 패턴의 차이점.

메서드에서 알고리즘의 골격을 정의하고, 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있는 방법이다.

차이점

템플릿 메서드 패턴은 알고리즘의 개요를 정의하고, 실제 작업 중 일부는 서브클래스에서 처리한다. 하지만 스트래티지 패턴은 객체 구성을 통해서 알고리즘을 캡슐화 및 구현을 한다.

Factory 패턴이란?

객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만든다.

특징

클래스의 인스턴스를 만드는 일을 서브클래스에 맡긴다.

제품을 생산하는 부분과 사용하는 부분을 분리시킬 수 있다.

추상 팩토리 패턴

인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고 생성한다. 구상 클래스는 서브 클래스에 의해 만들어진다.

참고사이트 1

참고사이트 2