Behavioral Design Patterns
특정 동작에 관련된 디자인 패턴이다.
Chain of responsibility
요청을 받을 수 있는 종류가 한 가지가 아닐 경우에, A 요청 B 요청을 한 명이 다 처리하는 게 아니라 각각의 요청에 대해서 처리 담당이 있다면 쉬워질 것이다.
내가 처리할 수 있으면 처리하고, 처리할 수 없으면 다른 담당자에게 돌려주기. 그 담당자도 안 되면 그 다음 담당자에게 넘기기.(체인 구조)
온라인 쇼핑몰 사이트에서, 주문 전 구매자 정보를 검사할 필요가 있다. (고객의 정보가 다양할 뿐더러 그런 정보를 검사하려는데 검사를 한 번에 주어져서 한 번에 핸들링하려 하면 실수하게될 가능성이 있다.) 또한, 추가적인 정보의 종류가 늘어날 경우에는? 하나의 로직에서 검사하고 있다면, 로직을 다시 살펴보고 확장하고.. 복잡하다.
솔루션 : 요청이 들어오면, 요청을 처리할 수 있는 구성요소를 따로 따로 만들어두는 것이다. 책임사항을 각각에게 조금씩 나누어 준다. 하나의 요청 처리자가 하나의 정보를 검사, 틀리면 요청 종료, 맞으면 다음 요청 처리자에게 검사맡도록 진행.
새로운 종류의 정보를 검사하려면 기존의 것을 변경할 필요없이, 로직에 추가만 하면 된다.
Mediator
클래스 사이에 굉장히 많은 의존성이 생기게 될 수 있다. A 클래스와 B 클래스의 의존성.. 그런데 이런 의존성이 있을 경우 프로그램을 고쳐야할 때 많은 수정사항이 발생하게 된다. 그래서, Mediator를 통해서 클래스간에 상호작용을 하도록 만들자.
유저 정보를 입력하는 대화상자를 만드는 경우, 대화 상자에 존재하는 다양한 객체들 사이에 의존성이 존재하게 된다.
- 체크 박스 클릭 시, 입력창을 수정 가능 또는 불가능하게 변경
- 확인 버튼 클릭 시, 입력창 정보를 가져와서 현재 대화상자 종류에 따라 다른 연산을 수행...
- ...
중재자를 둬야하겠다.
대화상자를 중재자로 두어 모든 행동을 대화상자를 통해 수행되도록 설계하자. 확장성이 높다.
유지 보수해야할 Factor를 Dialog 대화상자 하나로 줄이도록 하였다.
Observer
관찰자, 관련있는 건 사실 구독 시스템에 가깝다. 어떤 이벤트가 발생했을 때, 전파하는 방법. 옵저버는 어떤 이벤트가 발생했는지 확인하고 싶어하는 자. 이벤트 발생 시, 이 이벤트를 받고 싶은 자들에게만 알려준다.
상점에 들어올 물품, 그 물품이 없고, 그 물품이 들어오는 걸 기다리고 있다. 상점에서 그 물건이 들어왔는지 계속 확인하는 것도 비효율적(불편)이고, 상점 측에서 어떤 제품이 들어왔는지 모든 사람들에게 보낸다면? 굉장히 불필요한 정보가 들어오게 된다.
구매자가 가게에게 구독을 신청하면, 구독자에게만 구독자가 원하는 정보를 배송. 이러면 해결!
받은 정보를 핸들링해야 하는지 안 해야하는지 Validation을 해주면 좋다.
State
RPG를 해봤으면 이해 쉬움, 내 상태가 어떠하다면 이러한 행동을 하고, 각각의 상태를 클래스로 정의하고, 그 때에 따라서 수행해야할 행동을 나타내는 클래스가 대신 수행하도록 위임.
글을 작성하여 신문에 투고하는 경우,
초안 상태 -> 통과 명령 수행 시 "조정"상태로 전이
조정 상태 -> 통과 명령 수행 시 "출판"상태로 전이
같은 수행명령으로 보이지만 상태에 따라서 행동이 달라진다.
Template Method
알고리즘을 기술하고자 한다. 완벽하게 돌아가도록 쭉 쓰는데 Variation을 주기가 어렵다. 정렬이라 했을 때, 오름차순, 내림차순 정해주는 그런 변화를 주고자 하기에는 어렵다! 그래서 중간 중간에 구멍을 뚫어 놓는다.
Specific 하게 변경될 부분은 virtual function으로 만들어둔다.
학생증, 필기도구, 제 시간에 와주고,
시험 범위는 중간고사 이후부터 오늘 배운 여기까지가 범위. 문제 다 풀었을 때, 시간은 30분 안 정도에 끝날 수 있음.
중간 고사 이전에 내용들을 직접 물어보는 건 없을 거고, 연관되어 있는 것들은 나올 수가 있다. 문제 수 : 10문제 11문제-새끼 문제.
난이도는 중간고사에 비하면 비슷한 난이도. 기말고사도 그렇게 어렵지 않을 것이다. 특정 디자인 패턴을 잘 알고 있는지 물어보고, 왜 쓰는지, 쓰면 무엇이 좋을지? 그런 측면으로 낼 것. 첫 페이지 OX 문제 있음. 10개. o와 x의 비율 : 하나 차이는 아니다. 기말 OX는 중간보다는 훨씬 쉽다. 거의 개념을 물어보는 문제들. 서술형 깔끔하게 쓰기. 부분 점수 열심히 줌. print문이 다섯 개면 다섯 개 쓰기.
한 줄, 세 문장 이하로 쓰시오. 그 이상 쓰면 0점! 최대한 간결하게 쓰라는 말. 객관식은 없다. 모두 주관식. 단답. 서술형 간결하게 핵심 키워드만. 핵심 키워드가 들어가야 만 점.
중간고사 보다는 코드의 양은 많지 않다. 코드가 없어도 설명할 수 있는 것들이 많아서 압도적으로 적다. 코드 빈 칸 문제는 없다. 코드를 수정해야 하는 것들은 있을 수 있다.(오류 해결) 오류가 발생했다. 컴파일 오류냐 런타임 오류냐 맞추는 걸 정말 좋아하는 문제. 프로그램 주고, 실행하면 무슨 값이 출력되는지. 실습한 내용도 나올 수 있음. 숙제를 제대로 풀었다면, 그 숙제 코드를 주고 틀린 부분을 고치시오. 이런 문제들. 애매하지 않는 문제들을 낼 것이다. 오류 관련해서 Warning 해결은 없음. 에러는 있음. 에러가 없는 경우도 있음. 에러가 나냐 안 나냐. 에러 나면 그 이유는? 안 나면 출력문을 쓰시오. 에러는 한 문제 당 하나로. 이 코드는 에러가 난다. 원인을 기술하시오. 이유를 한 문장으로 적기. 수업 시간에 아주 구체적인 예시로 얘기를 했기 때문이다. "이 경우는 ~해서 안 되겠죠?".
적절하게 문제 배분을 다 잘 한 것 같고, 9 10 11 12 13 14 총 6개의 슬라이드. 6개에서 적당히 배분. 최대한 한 슬라이드에서 10점 씩은 줌. 안 나오는 슬라이드는 없다. 한 슬라이드를 포기한다 쳤을 때, 어떤 걸 포기하는 게 좋을까?
디자인 패턴 그림 그리기는 없고, 그림이 무엇인지는 알아야 함.
템플릿을 3주나 했다.
어떤 디자인 패턴을 위주로 공부하는 게 좋을까? 잘 안 나올 것 같은거. 애매한 건 안 냈고, 파싸드나 프록시나 안 냈다. 디자인 패턴에서 이거는 알았으면 한 것들. 간단하고 쉬운 것들. 실습 때 했던 것들, builder, singletone, prototype, ... 디자인 패턴 이름 물어볼 것임. 잘 알아두기.
중간고사와 연관된 거 하나 밖에 없음. 깊게 연관되어 있음. 중간고사 범위에 있는 슬라이드가 기말 범위에 포함될 것. 간단하게 얘기하고 자세하게 물어볼 수 있지는 못 하다. 게터 세터, 예시를 벗어나는 범위를 내지는 않았다. 슬라이드 내용에 있는 정도만 한 장 두 장 정도. 맵 말고 셋을 보도록.
'[Computer Science] -보호글 > [객체지향설계]' 카테고리의 다른 글
[객체지향설계] 기말 정리 (0) | 2023.12.13 |
---|---|
[객체지향설계] 11/21 이론 (0) | 2023.11.21 |
[객체지향설계] 11/14 이론 (0) | 2023.11.14 |
[객체지향설계] 11/7 이론 (0) | 2023.11.07 |
[객체지향설계] 10/31 이론 -Design Pattern (0) | 2023.10.31 |