Bridge 패턴
·
복습/소프트웨어디자인패턴
브릿지 패턴이란?클래스 계층을 기능/구현으로 나눈후, 그 사이 다리를 놓는 패턴 만약 기존 클래스에 기능을 추가하고 싶다면?클래스 하위 클래스를 생성 후, 기능을 추가함override(x) 만약 기존 클래스에 구현을 추가하고 싶다면?상위 클래스는 추상메소드로, 하위메소드에서 실제로 구현한다. 정리하자면.기능의 클래스 계층이, 구현의 클래스 계층을 멤버변수로 가져오는 것을 뜻한다.public class Main { public static void main(String[] args) { Display d1 = new Display(new StringDisplayImpl("Hello, Korea.")); Display d2 = new CountDisplay(new StringDisplayImpl("Hel..
Prototype 패턴
·
복습/소프트웨어디자인패턴
프로토타입 패턴이란?클래스부터 인스턴스를 새로 만드는게 아닌,인스턴트를 복사해서 새로운 인스턴스를 만드는 것이다!객체로부터 객체 생성 왜 인스턴스를 복제하지요?1. 종류가 너무 많아서 클래스로 정리불가2. 클래스로부터 인스턴스 생성이 어려움ex) 사용자가 마우스로 그린 도형을 나타내는 인스턴스: 똑같이 그리는거 힘듦3. 인스턴스 생성 프레임워크를 특정 클래스에 의존하지 않게 하고 싶을 경우 (예제) java에는 clone이라는 기능을 제공하고 있음. manager class (client)에 messageBox 객체와 UnderlinePen 객체를 등록한 후 -> prototype두 객체의 복제품을 얻어가는 형식 public class Manager { private Map showcase = new ..
Singleton 패턴
·
복습/소프트웨어디자인패턴
Singleton 패턴이란?하나의 클래스에서 하나의 인스턴스만 생성하도록 보장하는 패턴생성자를 private 으로 선언하여 외부에서 객체 생성을 막는다. public class Singleton{ private static Singleton singleton = new Singleton(); private Singleton(){ System.out.println("인스턴스를 생성했습니다."); } public static Singleton getInstance(){ return singleton; }}singleton 멤버 변수:static으로 선언됨 > Singleton 클래스 로드시 한 번만 실행됨 singleton 생성자:private 메소드로, 외부에서 호출불가(==객체 생성 불가) publi..
Factory Method 패턴
·
복습/소프트웨어디자인패턴
팩토리 메소드 패턴이란?template method 패턴의 활용 버젼인스턴스를 생성하는 class를 따로 뺌상위 클래스에서 인스턴스 생성 방법을 결정 > 하위 클래스에서 인스턴스를 실제로 생성즉 new()를 활용해서 바로 객체 생성하는게 아니라능거 예제Factory classcreate(): 추상메소드를 활용함 -> template methodcreateProduct,registerProduct: 인스턴스 생성 방법 결정 -> factory methodpublic abstract class Factory { public final Product create(String owner) { Product p = createProduct(owner); registerProduct(p); return p; ..
Template Method 패턴
·
복습/소프트웨어디자인패턴
템플릿 메소드 패턴이란?상위 클래스에서, 추상 메소드를 정의하고(템플릿)하위 클래스에서 추상 메소드를 구현하는 패턴: 처리의 흐름은 상위클래스가 결정한다.상위클래스가 뼈대 결정 > 하위클래스에서 내용 결정 예제)AbstractDisply classdisplay(): 추상 메소드 open,print,close 를 사용한 메소드 => 템플릿 메소드open,print,close는 CharDisplay/StringDisply같은 하위클래스에 구현을 맡김(오버라이딩)public abstract class AbstractDisplay { public abstract void open(); public abstract void print(); public abstract void close(); public ..
Adapter 패턴
·
복습/소프트웨어디자인패턴
Adapter 패턴이란?서로 다른 두 interface를 연결하는 패턴wrapper 패턴 adapter 패턴의 구현방법 21. 상속(inheritance): class이미 존재하는 클래스 A, 필요 메소드를 선언한 interface B->interface B에 선언된 메소드를 이용해서 class A를 상속받아 class A가 가지고 있는 메소드를 이용(adapter)== class A 상속 + interface B 구현=> Main 을 수정하지 않고도, class A 의 구현을 변경할 수 있음+ java는 다중상속 불가능, 다중구현은 ok ex)여기서 PrintBanner가 adapter 이다.Banner class를 상속받고, Print의 추상 메소드를 Banner class의 메소드를 사용해 구현한다..
Iterator 패턴
·
복습/소프트웨어디자인패턴
Iterator 패턴이란?원소를 순서대로 하나씩 끄집어 내어 전체를 처리하는 패턴for문에서의 변수 i의 기능을 추상화+일반화 했다고 보면 됨== 순회(traverse) 예제책장에 책을 넣은 후-> 순서대로 하나씩 다시 끄집어내어 책 이름을 표시하는 program책꽃이가, 자신이 가지고 있는 책들을 순회할 iterator(반복자)를 생성해서 반환함 Iterable집합체를 나타내는 interface (java.lang)iterator(): BookShelf에서 Iterator 생성하기 위한 abstract method Iterator처리반복자를 나타내는 interface (java.util) Book책을 나타내는 classclient program BookShelf책장을 나타내는 classclient pr..
디자인패턴 (기초,uml)
·
복습/소프트웨어디자인패턴
GoF의 디자인패턴디자인패턴이란, 1)재사용가능한 2)객체 지향 소프트웨어이다.1995년, 4명의 IBM 프로그래머들이 23개의 문제와 해결법을 도출함. 디자인 패턴은,서로 다른 객체들의 상호작용으로 이루어진 시스템.== 특정 컨텍스트 내에서 주어진 문제에 대한 해결책 디자인 패턴의 4가지 구성 요소1. 이름2. 문제3. 해결: 관계,규칙 등..4. 결과: 패턴의 장단점 디자인 패턴의 분류:1. creational2. structual3. behavioral 1. class2. object UML이란,unified modeling language시스템을 시각화하거나, 요구사항명세서/설계를 문서화하기 위한 표현 방법클래스,인터페이스의 관계를 표현(java interface:pure abstract cla..
[알고리즘] 4주차 내용 초압축
·
복습/알고리즘
# Brute-force 전략 Brute-force- 문제 정의에 따라, 가능한 모든 경우를 시도하는 방법 == 문제정의에 기반한 가장 직접적인 접근 방식, Naive Method 중요성1. 해결보장: 반드시 해를 찾아낸다2. 작은 입력에 유용: 오버헤드가 적기 때문에, 빠르다.3. 최적화의 기준: 최적 알고리즘 비교의 참고대상이 됨.4. 이론적 토대: 최적화 적용 전, 복잡도 이해에 도움을 준다.-> sorting, searching, geometric problems, exhaustive search, and graph traversal 에 사용됨 # Exhaustive Search - 기존 문제점: input size가 커지면서, 일부 알고리즘은 복잡도가 폭발적으로 증가한다. - 최적화 문제점: 이..
[알고리즘] 3주차 내용 초압축
·
복습/알고리즘
# 알고리즘 분석 점근적 성능 분석- 알고리즘의 효율성을 비교할때는, 입력값 n이 충분히 커지는 상황에서의 점진적 행동에 주목해야함- 복잡도가 일차함수 vs 이차함수일때, 이차항(최고차항)이 전체함수 복잡도를 지배하게 된다. 그러므로 복잡도를 분류할때, 낮은 차수의 항 대신 최고차항만 남긴다. ex) T(n)=n^2+n+1 일때, n=1인 경우, n^2의 영향도는 33.3%n=1000인 경우, n^2의 영향도는 99.9% 대표적인 복잡도 함수의 종류 - 낮은차수의 알고리즘을 설계해야하는 이유는, 복잡도의 차수가 낮을수록 실제 실행시간이 낮아지기때문이다.- 그렇다면, 알고리즘을 선택할때 차수만 고려해야할까? 아니면 정확한 실행시간을 고려해야할까?-> 대부분은 정확한 측정이 어렵기때문에 차수만 알아도 괜찮..