일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 회사폐업
- 캡쳐링
- 자료구조
- 동적계획법
- array
- 네트워크
- 정보
- 사회초년생
- 정보처리기사개정
- 순열
- 실업급여
- 모여봐요동물의숲
- IT기초
- 코딩테스트
- 부분합알고리즘
- 튜터링
- C++
- 후니의쉽게쓴시스코네트워킹
- 전화영어
- 후니의쉽게쓴시스코라우팅
- 취업사실신고
- 막대기자르기
- 알고리즘
- 자취준비
- HeadFirstDesignPatterns
- 청년내일채움공제
- 프로그래머스
- 생애첫계약
- 실업인정인터넷신청
- leetcode
- Today
- Total
목록프로그래밍/공부 (37)
따봉도치야 고마워

컴파운드 패턴 두 개 이상의 패턴을 결합해 일반적으로 자주 등장하는 문제들에 대한 해법을 제공 SimUDuck 1장에서 사용했던 예제를 처음부터 다시 만들어보자 (bb-dochi.tistory.com/72) 1. Quackable 인터페이스 정의 public interface Quackable{ public void quack(); } 각 오리 클래스에서 종류에 맞게 구현하고 ex) MallardDuck, RedheadDuck 시뮬레이터를 생성해 테스트 해보자 void simulate(){ Quackable mallardDuck = new MallardDuck(); Quackable duckCall = new DuckCall(); Quackable rubberDuck = new rubberDuck(); ..

프록시 패턴 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴 원격 객체 / 생성하기 힘든 객체 / 보안이 필요한 객체에 대한 대변자 객체 생성 프록시 패턴의 수많은 변종 - "접근을 제어하는 방법"에서 차이가 있음 원격 프록시를 사용해 원격 객체에 대한 접근 제어 가상 프록시를 사용해 생성하기 힘든 자원에 대한 접근 제어 보호 프록시를 사용해 접근 권한이 필요한 자원에 대한 접근 제어 프록시 원격 객체에 대한 로컬 대변자 원격 객체 : 다른 JVM에 있는 객체 ex) 뽑기기계 로컬 대변자 : 로컬 대변자의 메소드를 호출하면 원격 객체의 메소드를 호출하는 것처럼 행동 = 1. 클라이언트는 원격 서비스에 있는 메소드를 호출한다고 생각하고 작업 처리 2. 실제로..

스테이트 패턴 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있음 마치 객체의 클래스가 바뀌는 것과 같은 결과 Q. 스테이트 패턴과 스트래티지 패턴의 다이어그램이 같은 것 같은데? 다이어그램은 같지만 용도의 차이 스테이트 패턴 스트래티지 패턴 - 상황에 따라 Context에서 여러 상태 객체 중 하나에 행동 위임 - 내부 상태가 변경됨에 따라 컨텍스트의 행동도 자연스럽게 바뀜. - 즉 클라이언트는 상태 객체에 대해 몰라도 됨 - 수많은 조건문 대신에 사용 - 일반적으로 클라이언트에서 컨텍스트한테 전략 객체를 결정해줌 - 실행 시 전략 객체를 변경할 수 있는 유연성 제공을 위해 사용 - 상속보다 구성을 이용한 유연성 극대화 Q. 반드시 구상 상태 클래스에서 다음 상태가 변경되어야 하는 건지? 아..

이터레이터(Iterator) 패턴 컬렉션 구현 방법을 노출시키지 않으면서도 모든 항목에 접근할 수 있게 해주는 방법을 제공 (반복 작업 캡슐화) 또한 각 항목에 접근하는 기능을 집합체가 아닌 반복자 객체에서 책임져 집합체 인터페이스 및 구현이 간단해짐 + 컬렉션과 반복자 : 자바 Collection 인터페이스에선 집합체를 조작하기 위한 여러가지 유용한 메소드들을 포함하고 있음 : 그 중 하나가 iterator() 객체 마을 식당과 팬케이크 하우스의 합병 식당은 (점심) 메뉴를 ArrayList로, 하우스는 (아침메뉴를) 배열로 저장하고 있음. 두 가게의 메뉴 구현 방식이 달라 메뉴를 출력하고, 구별하는 웨이트리스 클래스를 만드는데 어려움이 생김 각 타입에 맞춰 두 번씩 반복해야 함 (식당이 추가되면 그만..
템플릿 메소드 패턴 메소드에서 알고리즘의 골격(틀)을 정의하고, 여러 단계 중 일부는 서브 클래스에서 구현할 수 있다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있다. 예제 커피와 차를 만드는 클래스를 추상화 해보자 Coffee Tea 1. 물을 끓인다. 2. 끓는 물에 커피를 우려낸다. 3. 커피를 컵에 따른다. 4. 설탕과 우유를 추가한다. 1. 물을 끓인다. 2. 끓는 물에 차를 우려낸다. 3. 차를 컵에 따른다. 4. 레몬을 추가한다. 기존 커피/차 클래스 public class Coffee{ void prepareRecipe(){ boilWater(); brewCoffeeGrinds(); pourInCup(); addSugarAndMi..

어댑터 패턴 한 클래스의 인터페이스를 다른 클라이너트에서 사용하고자 하는 다른 인터페이스로 변환한다. 어탭터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 사용 가능. 클라이언트는 타겟 인터페이스에 맞게 구현이 되어있고, 그걸 통해 메소드 호출 어댑터는 타겟 인터페이스를 구현하며 *어댑티 객체를 가지고 있음 어댑터는 어댑티 객체를 사용해 클라이언트의 요청을 응답 클라이언트는 결과를 받지만 중간에 어댑터가 껴있는지 알지 못함 *어댑티 : 어댑터를 가운데 두고 클라이언트(타겟 인터페이스)와 반대의 위치에 있는 것 ex) 아래 예제에서 Turkey 객체지향 어댑터 - 말 그대로, 어떤 인터페이스를 클라이언트가 요구하는 형태의 인터페이스에 적응 시켜주는 역할 ex) 기존 시스템에..
커맨드 패턴 커맨드 패턴을 이용해 요청 내역을 객체로 캡슐화 할 수 있고, 매개변수를 사용해 여러 가지 다른 요청을 집어 넣을 수 있다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수 있고, 작업취소 기능도 지원이 가능하다. 요청을 하는 객체와(요청), 그 요청을 수행하는 객체(동작)를 분리 할 수 있음. 리시버에 대한 동작이 추가될 때마다 잡다한 클래스가 많이 추가될 수 있다는 단점이 있음. 요청 자체를 리시버한테 넘기지 않고 자신이 처리하는 '스마트' 커맨드 객체도 종종 사용 커맨드 패턴 구조 수신자 (Receiver) : 실제 행동을 하는 객체 커맨드 (Command) : 리시버와 리시버의 특정 행동을 호출하는 객체, 버튼에 할당될 행위 발동자 (Invoker) : 커맨드를 저장해놓고, 행위 ..
싱글턴 패턴 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴 싱글턴은 제한된 용도로 특수한 상황에서 사용해야함. 남용 x 전역변수 사용 시 단점 전역변수에 객체를 대입하면 어플리케이션 시작 시 객체가 생성됨(플랫폼마다 다르지만) 만약 그 객체가 자원을 많이 차지하는데 아무도 쓰지 않는다면 아무데도 쓸데없는 객체가 되어버림. 고전적인 싱글턴 패턴 구현법 생성자를 private 으로 선언하고, 클래스의 인스턴스를 생성해 리턴해주는 정적 메소드를 만듦 public class Singleton{ private static Singleton uniqueInstance; private Singleton() {} //생성자를 private으로 선언..