본문 바로가기

객체지향 디자인 패턴

(9)
어댑터 패턴 어댑터 패턴이란 매우 간단한 패턴이다. 기존에 있는(adaptee)것을 클라이언트 자신이 원하는 방식으로 사용해 주기 위해서 자신이 원하는 방식을 인터페이스로 만들어주고 새로운 클래스를 하나 만들어 그 클래스가 자신이 원하는 인터페이스를 implement해주고 기존에 있는 것을 has-a로 넣어 주는 것이 어댑터 패턴이다. 클라이언트가 adaptee(A)를 자기가 원하는 B타입으로 사용할 수 있게 해주는 것입니다. 여기서 이미 제공되어 있는것(A)의 메서드 이름과 매개변수가 필요한 것(B)의 그것과 다를 수 있다. 이 다른것을 맞추어 주기 위해 어댑터 패턴을 쓰는 것임. 아… 이제 이해가 간다. 이미 있는 것을 자신이 원하는 방식대로 쓸 수 있게 해주기 위해서 자신이 원하는 방식을 인터페이스로 여기고 구..
반복자 패턴중 자바에서 범용 자료구조 구현시 겪게 되는 어려움 코드의 중심내용은 자바에서 범용 자료구조를 만들때 겪게 되는 번거로움에 대한 것임. 왜 범용 자료구조를 반복자 패턴단원에서 설명하나? 반복자는 자료구조와 분리할 수 없는 것이므로! 자바에서 범용리스트 구현시 그 안에 배열을 사용한다고 하면 범용배열, 이를태면 T[ ]list=new T[capacity];이런 식으로 만들수 없고 항상 Object를 사용한 Object배열을 만들수 밖에 없습니다. 이것은 자바의 템플릿 사용 규칙 때문인데 이러한 템플릿 사용 규칙때문에 반복자뿐만이 아니라 여러가지 다른것을 사용할 때 문제점이 있습니다(하지만 배포된 교수의 코드는 강제형변환을 통해서 T배열을 사용함). 또한 템플릿T가 불변객체가 아닌 수정 가능한 객체일때 반환 받은 것을 수정하면 원본인 items배열에도 영향을..
소프트웨어 공학시간에 살펴본 몇몇 디자인 패턴의 간단한 정리 기존에 사용중인 입력장치(이미있는것)와의 인터페이스 작동 방식이 호환되지(자신이 원하는것) 않아 이를 변환할 수 있는 변환기 역할의 중간 매개체 클래스를 만들어야 한다. =어댑터패턴(=이미 있는 것을 자신이 원하는 방식으로 바꾸어 쓸 수 있게 해주는 패턴) 도로를 통제하기 위해서는 기본적으로 신호등 기능이 필요하지만 그 외에 변경 차선, 차로의 등, 횡단보도 신호, 교통량 등을 모두 조합하여 통제할 수 있는 클래스를 만들어야 한다. =데코레이션 패턴 데이터집합에 순차적인 접근 또는 순회를 지원하여 기본표현(리스트, 스택, 트리등)이 노출되지 않으면서 행동할 수 있도록 접근기능과 자료구조를 분리한다 =반복자 패턴 현재 상태를 파악하고 그에 따른 객체의 동작이 달라야 하기 때문에 맥락과 상태를 별도로 구현하..
[UML] 클래스 다이어그램 (Class Diagram) 출처: https://brownbears.tistory.com/577 클래스 다이어그램은 구조 다이어그램으로 클래스 내부 구성요소 및 클래스 간의 관계를 도식화하여 시스템의 특정 모듈이나 일부 및 전체를 구조화 합니다. 개발 하기 전, 클래스 다이어그램을 그리게 되면 시스템 내 클래스 간의 의존성 파악과 팀원들 간 의사소통이 편리합니다. 클래스 다이어그램의 목적에 따라 개념, 명세, 구현 단계로 나눌 수 있습니다. 개념 단계에서는 클래스만 도출하고 관계를 단순화하는 것이 목적입니다. 명세와 구현 단계에서는 개발 직전 설계나 구현 이후 설명 목적으로 사용되고 이 다이어그램을 기반으로 코드로 구현하거나 코드를 기반으로 다이어그램을 그리기 때문에 코드와 연관이 깊습니다. 요소 (element) 클래스 클래스 ..
생성패턴 Simple Factory패턴(=객체생성클래스+느슨한has-a)은 언제 쓰이나? 생성 부분을 추상화한 전략 패턴이 필요할때 Simple Factory패턴(Static Facotry pattern)의 형식은 어떻게 되나? 객체 생성 클래스+느슨한has-a 매우중요!!!! DIP(Dependency Inversion Principle,구체적 클래스에 의존하지 않고 그 클래스의 메서드를 사용)을 확보하는 2가지방법 1.느슨한 has-a+DI 2.상속 Simple factory Pattern 은 방법1을 사용하고factory method pattern은 방법2를 사용함. Simple factory pattern(객체 생성 클래스+느슨한has-a) Simple factory Pattern는 객체생성 메서드를 분리..
3. 장식(Decorator)패턴 장식패턴이 사용되는 경우(문제상황): 어떤 클래스의 전체 객체에 적용하는 것이 아니라 그 클래스의 특정 객체에게만 동적으로 기능(행위)을 적용하고 싶을 때(이 때문에 상속이 아닌 has-a를 통한 메서드의 재정의를 하는 것임) (물론 전략패턴도 이런 측면이 있다. 하지만 앞에서도 말했듯이 장식패턴은 어떤 본연의 기능이 있을때 그것을 없애지 않고 그 위에 추가를 해주는 것이지만 전략패턴은 통째로 바꾸는 것). 디자인 패턴도 역시 패턴이므로 OCP원칙을 저버리지 않는다. 즉 코드의 수정없이 기능을 확장한다. 디자인패턴의 형식: 상속과 포함(has-a)을 모두 활용한다(많은 경우 OCP는 DIP를 통해 이루어지고 DIP는 느슨한 has-a를 통해 이루어진다) (상속과 포함이 구체적으로 어떻게 활용되는지는 같은..
디자인 패턴(Design Pattern)이란? 출처: https://ko.wikipedia.org/wiki/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EB%94%94%EC%9E%90%EC%9D%B8_%ED%8C%A8%ED%84%B4 앞으로도 쭈욱 도움이 될 출처: https://readystory.tistory.com/114 출처: https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS6705039023 디자인패턴이란? 특정 문맥에서 공통적이고 반복적으로 발생하는 문제에 대해 재사용 가능한 해결책이다(따라서 나는 어떤 문제상황에 어떤 해결책이 쓰이는지 짝지어서 학습해야 한다). 디자인 패턴이란? 객체지향 설계원리들(SOLID)이 잘 적용..
2. Strategy Pattern 전략 패턴은 언제 쓰이나? 1. 실행시간에 클라이언트 클래스가 가지는 하나 혹은 다수의 종류의 전략을 실행시간에 변경하고자 할때. 2.한 클래스가 여러 행위를 조건문을 통해 정의할때 (수업시간에 전략패턴이 쓰이는 경우의 대표적인 경우가 한클래스가 여러행위를 조건문을 통해 정의해야 할 경우에 전략패턴이 쓰인다고 배웠다. 아래 유튜브 영상에서 제시하는 경우가 이 경우에 해당한다. SearchButton이라는 클래스 내에 여러행위가 조건문을 통해 정의되어 있음) 전략 패턴의 형식은 어떻게 되나? 각각의 전략을 클라이언트 클래스와 분리하여 전략 인터페이스와 전략 클래스로 구현하고 클라이언트 클래스(Context class)들은 느슨한 결합을 위해 그 전략 인터페이스를 맴버로 갖는다(has-a) 이러한 검색화면을..