카테고리 없음

디자인 패턴

logloglog 2020. 12. 21. 16:44

 

저번시간 복습

json형식의 특징은 object모양인것도 특징이지만
속성 : 밸류 로 구분되어있는것도 특징
value로 올수있는건 기본타입, 배열, 제이슨오브젝트, 널, 불린,number  6개
속성이름은 반든시 "String"

 

  • 디자인 패턴에 대해서는 여기자세히 나와있다고 한다.

www.tutorialspoint.com/design_pattern/index.htm

 

Design Patterns in Java Tutorial - Tutorialspoint

Design Patterns in Java Tutorial Design patterns represent the best practices used by experienced object-oriented software developers. Design patterns are solutions to general problems that software developers faced during software development. These solut

www.tutorialspoint.com

  • ppt자료

DesignPattern_v0.3.pptx
0.63MB


 

디자인 패턴이란?

개발하다보면 자주마주치는 문제점에 대해서

미리 개발자들이 겪었던 내용들의 솔루션 모음집

 

3가지 범주가있다 (생성 구조 행동 패턴)


생성: 객체생성용도.. 만드는 방법에 대한 모음집

  1. 추상팩토리

  2. 빌더

      복합객체를 어떻게 만들지 표현에 관련된.. 어떻게 정리할지

      결국 복합객체를 생성할거니까 생성패턴에있다.

  3. 팩토리 : 요즘 많이 보이는 패턴

  4. 팩토리메서드

  5. 원형

  6. 싱글톤 : 객체를 하나만 생성하고싶을떄

 


 

추상팩토리 : 팩토리는 팩토리인데 추상팩토리.. 

팩토리메서드는 객체한개를 리턴하는데 추상팩토리는 객체여러개를 만들어주는 팩토리임

 

추상메서드를 구체화함.한개의 객체가아니고 여러개의  객체를 만든다.
어떤팩토리를 선택하냐에따라 내가만들 제품군들이 바뀐다

제품군을 만든다는게 앱스트랙팩토리의 특징

 


빌더 :  복합객체의 생성과정과 표현방법을 분리하여

동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴

 * 빌더 패턴 : 인자가 많은 생성자나 정적 팩토리가 필요한 클래스를 설계할 때
 *          특히 대부분의 인자값이 선택적인 상황에 유용함
 *          - 점층적 생성자 패턴보다 가독성이 좋아진다.  (점층적 : 생성자를 여러개만드는것)
 *          - 생성된 객체는 자바빈을 사용할 때보다 훨씬 안전하다. (Immutable 객체)
 *          (자바빈은 게터세터가 있고 디폴트생성자가잇는 구조.. )(뭐가안전? 세터를 만들어놓으면 세터는
 *          우리만 호출할수있다는 보장이없음. 게다가 세터를 이용하면 mutable 즉 값을 언제든지 바꿀수잇는객체)
 *          (빌드쓰면 immutable객체로 만들어지기떄문에 쉽게바꿀수없다.) (뭔소리냐면 멤버를 내가원하는 갑으로 세팅해서 만들었는디
 *       	Member memeber = new Member.builer("sdfsdf"ssdf) <<이걸 아랫줄ㄹ에서 ㄷ바꿀수가없다.
 *       

 

 


구조패턴

어댑터 : 뭔가 변환한다.

인터페이스의 타입을 중간에서 변환해주는 역할을 하는게 어댑터

다른타입의 객체가있을때 중간에 어댑터를 끼워넣어서 어댑터를 통해 두개가 정상사용할수있는거임

저 둘은 인터페이스가 달라서중간에 어댑터가 필요하다

저 어댑터는 mediaPlayer를 임플리먼트받으면서 advance 멤버변수를 갖고있음


복합체

집합을 사용할때 사용하는 패턴. 트리구조 나오면 그냥 composite(복합체)패턴임

나 자신을 넣을수있는 또다른 타입을 가지고있는것


장식자 (Decorator)..많이나온다

객체가있는데, 그걸 감싸고(빨간색으로칠하기) 또 감사(파란색으로칠하기)

기본기능은 손대지않고 계속 덧붗이는거임


퍼사드 : 정면

보이는 면이있는반면에 우리가모르는 여러부분들이있음복잡한.. 하지만 우리가 보는건 깔끔한 면

내부적인 복잡한것들은 클라이언트가 전혀 관심이없음. 단지 내가 원하는 인터페이스만 호출해서 쓰면 됨


프록시 : 대리인

진짠 리얼어쩌군데 프록시역할을 하는 프록시이미지가 대신 알아서 해주는거임 (사용자가 호출했을때)

진짜든 프록시든 어짜피 같은거임플리먼트했음.

 ex 페이징처리할때 10페이지읽었는데 1~10까지는 이미읽었기때문에 db에 또 select할필요없고 벗어나는거 눌렀을때 읽어야함. 그런작업을 중간에 프러시가 컨트롤을 한다.

프록시가 리얼이미지전에서 권한있/없을 걸러주면서 리얼이미지ㄹㄹ 보호해주는 역할(프로텍션 프록시)

프록시패턴하면 크게 3가지 용어가 나오느데 리모트 프록시(원격에있는데 로컬에있는것처럼), 버츄얼프록시(객체를 생성해서 쓴다고쓴건데 알고보니 프록시가 가상객체 생성해줬던거임), 프로텍션 프록시(보호기능. 권한체크등)


행동패턴

어떤 처리를 할대 그 기능을 어느객체가 처리를 하고 어떤 알고리즘을 구현하는지 를 정의하는걸 다루는 패턴

특정한 기능 구현할때 어떤 객체가 구현해야하는지..


명령 : 브로커가 오더를 열심히 리스트에 담을거임(take order) 그래서 나중에 포문으로 꺼내서 하나의 객체처럼 오더타입인 애들을 다 쓸수있음..


반복자 (Iterator)

집합이나 컬렉션이 있어야됨. 그 안의 데이터를 하나하나 접근해서 하나하나 꺼내오는 과정을 이터레이터로 설계를 함. 그안에 hasnext랑 next가 있고..

클라이언트는 이터레이터 가져다가 해즈넥스트랑 넥스트로 꺼내쓸수있음(컬렉션안의 구조가 tree든 set이든 클라이언트는 알필요가 없다)


(Strategy) << 알고리즘이 나옴 항상

인터페이스로 알고리즘을 해놓고, 전략의 구현으로 add, multi등...