본문 바로가기

Programming29

Observer Pattern 과제 과제 : 옵저버 패턴을 이용해서 쓰레드에서 생성되는 소수를 두 개 옵저버 GUI 화면에 출력하는 프로그램을 작성 예) 실행 화면 설계) 소수를 생성하는 Prime Thread가 Subject 역할을 하고, TextFieldWindow, LabelWindow가 Observer 역할을 한다. 코드) https://github.com/kook1932/Computer-Science/tree/master/Design%20Pattern/Observer%20Pattern 2019. 12. 27.
Observer Pattern 1. 정의 1) 객체 간 1 : n 의존 관계를 정의함. 2) 한 개 객체 상태가 변화될 때, 그 객체와 의존 관계에 있는 모든 객체들이 자동으로 알림을 받고 상태를 갱신 2. 문제 1) 알고싶은 컨텐츠가 업데이트 되었는지 지속적으로 방문하여 확인하는 것은 매우 비효율적이다. 3. 해결방안 1) 컨텐츠 제공자에게 클라이언트를 등록하여, 업데이트 될 때마다 자동으로 클라이언트에게 알려준다. 4. 사용 예제 1) Youtube 구독 시스템. 구독 서비스를 신청하면 게시자가 컨텐츠를 올리면 구독자에게 알려줌. 2) 모닝콜. 일어나기 위해 자다 깨면서 시간을 계속 확인하는 것은 어려움. 일어나야 할 시간에 알람을 받는 것이 효율적 2019. 12. 27.
Strategy Pattern 과제 과제 : strategy pattern을 이용해서 파일 속성을 다양한 형태로 비교해서 정렬해서 출력할 수 있는 프로그램을 작성할 것 - 두 가지 방식으로 패턴을 작성하였음 (1) Sorter Interface에 정렬 알고리즘들을 구현한다. 본인이 푼 방식 코드 : https://github.com/kook1932/Computer-Science/tree/master/Design%20Pattern/Strategy%20Pattern01 (2) Comparable Interface에 정렬 기준에 따른 비교 알고리즘 구현 코드 : https://github.com/kook1932/Computer-Science/tree/master/Design%20Pattern/Strategy%20Pattern02 어떤 알고리즘을.. 2019. 12. 26.
Strategy Pattern 1. 정의 1) 여러 알고리즘 전략이 존재하고, 상황에 따라 적합한 정책을 적용시킨다. 2. 문제 1) 클라이언트에 모든 알고리즘을 포함시키는 것은 클라이언트 코드의 양이 늘어나고 복잡해짐 -> 유지 보수 어려움 2) 알고리즘의 다른 버전이 존재해서, 중복으로 존재하거나 if문을 이용해서 선택해야함. OCP(Open-Closed Principle) 위반 3. 해결방안 1) 중복을 공통화시키고, 실행 시점에 맞는 알고리즘을 호출하도록 한다(상속 또는 인터페이스 활용) 2) 새로운 알고리즘이 필요하면 알고리즘 클래스를 추가하여 전략적으로 상황에 맞게 알고리즘을 사용할 수 있음. 알고리즘의 확장이 용이함. 4. 사용 예제 1) 조리법이 다른 경우 2) 파일의 압축 방법이 다른 경우 등. 2019. 12. 26.
디자인 패턴을 배워야 하는 이유 19년 2학기에 수강한 "고급객체지향 프로그래밍"에서 디자인 패턴에 대한 내용을 배웠다. 강의에서는 코드를 어떤 방식으로 설계할지에 대해 알려주었다. 내가 생각하는 디자인 패턴을 배워야 하는 이유는 다음과 같다. 1. 객체들의 관계를 loosly coupling 하게 만든다. 객체지향 프로그래밍을 하다보면 객체를 마구잡이로 만들어 객체끼리 데이터를 주고 받다 보면 객체들이 서로 너무 의존적인 관계가 되어, 한 클래스를 수정하게 되면 의존하는 클래스도 모두 바꿔줘야 하는 경우가 생긴다. 그런 경우를 방지하기 위해 객체 간 관계를 독립적으로 유지시켜주어 수정이 필요한 클래스만 수정하게 한다. 2. 코드 재사용 객체가 독립적이기 때문에 비슷한 내용의 클래스가 필요하다면 객체를 조금 수정하거나 혹은 그대로 활용.. 2019. 12. 26.