분류 전체보기
-
[객체지향의 원리와 이해] 템플릿 콜백 패턴 (Template Callback Pattern)개발/OOP, Design Pattern 2021. 1. 3. 01:52
템플릿 콜백 패턴 전략을 믹명 내부 클래스로 구현한 전략 패턴 템플릿 콜백 패턴은 전략 패턴의 변형으로 모든 것이 전략 패턴과 동일한데, 전략을 익명 내부 클래스로 정의해서 사용한다는 특징이 있다. 템플릿 콜백 패턴을 리팩토링하면 중복되는 부분을 컨텍스트로 이관하여 코드가 간결해진다. 익명 내부 클래스를 사용하기 때문에 전략 패턴에서 사용한 각각의 전략 클래스(StrategyGun.. 등등)이 필요없다. 스프링의 3대 프로그래밍 모델 중 하나인 DI(의존성 주입)에서 사용하는 특별한 형태의 전략 패턴이다. 스프링을 이해하기 위해 전략 패턴, 템플릿 콜백 패턴, 리팩터링된 템플릿 콜백 패턴을 알아야 한다. 전략 패턴의 일종이므로 개방 폐쇄 원칙(OCP)와 의존성 역전 원칙(DIP)이 적용된다. 예제 아래 ..
-
[객체지향의 원리와 이해] 전략 패턴 (Strategy Pattern)개발/OOP, Design Pattern 2021. 1. 2. 21:40
전략 패턴 (Strategy Pattern) 클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴 다양한 전략을 생성해내고 필요에 따라 컨텍스트에 주입시키면 전략을 실행할 수 있다. 전략을 주입시킨다는 것은 모델링된 객체(어플리케이션 바운더리)에 전략을 매개값으로 주어서 사용되도록 하는 것이라고 할 수 있다. Startegy startegy = new Strategy(); // 전략 생성 Client client = new Client(); client.runContext(strategy); // 전략을 주입했다. 중요 포인트 전략 메서드를 가진 전략 객체 전략 객체를 사용하는 컨텍스트(전략 객체의 사용자/소비자) 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자..
-
[객체지향의 원리와 이해] 데코레이터 패턴 (Decorator Pattern)개발/OOP, Design Pattern 2021. 1. 2. 16:07
데코레이터 패턴 메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴 참고 : https://johngrib.github.io/wiki/decorator-pattern/ 원본에 장식을 더하는 패턴이다. 프록시와 구현 방법이 같다. 데코레이터 패턴은 클라이언트가 받는 값에 장식을 더하는 것이 목적이다. 프록시의 패턴의 목적은 제어의 흐름을 변경하거나 별도의 로직 처리이다. 그리고 반환값을 변경하지 않는다. 중요 포인트 장식자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다. 장식자는 실제 서비스에 대한 참조 변수를 갖는다.(합성) 장식자는 실제 서비스의 같은이름을 가진 메서드를 호출하고, 그 반환값에 장식을 더해 클라이언트에게 돌려준다. 장식자는 실제 서비스의 메서..
-
[객체지향의 원리와 이해] 싱글턴 패턴 (Singleton Pattern)개발/OOP, Design Pattern 2021. 1. 2. 16:03
싱글턴 패턴 클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 인스턴스를 여러개 만들면 불필요한 자원을 사용하게 되고, 프로그램에 예상치 못한 결과를 초래하기도 한다. 그래서 이런 경우 하나의 인스턴스만을 만들고 계속 재사용하는 싱글턴 패턴을 사용한다. 중요 포인트 new를 실행할 수 없도록 생성자에 private 접근제한자를 지정한다. 유일한 단일 객체를 반환할 수 있는 정적 메소드가 필요하다. 유일한 단일 객체를 참조할 수 있는 정적 참조 변수가 필요하다. 예제 public class Singleton { static Singleton singletonObject; // 정적 참조 변수 private Singleton() {} // pr..
-
[객체지향의 원리와 이해] 프록시 패턴 (proxy pattern)개발/OOP, Design Pattern 2021. 1. 2. 01:48
프록시 패턴 제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴 실제 서비스 객체가 가진 메소드를 직접 실행하지 않고, 대리자 객체를 대신 투입해 실행하는 패턴이다. 클라이언트 쪽에서는 실제 서비스를 통해 실행하는지, 대리자 객체를 통해 실행하는지 알 수 없다. 대리자를 둠으로써 실제 서비스의 메소드 호출 전후로 별도 로직을 수행하는 방식으로 제어 흐름이 가능하다. 개방 폐쇄 원칙(OCP)와 의존 역전 원칙(DIP)를 적용한 패턴이다. 중요 포인트 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다. 대리자는 실제 서비스에 대한 참조 변수를 갖는다.(합성) 대리자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고 그 값을 클라이언트에게 돌려준다. 대리자는 실제 ..
-
[live-study] 5: 클래스개발/Java 2021. 1. 1. 23:48
백기선님이 진행하시는 live-study 5주차 과제 5주차 과제 목표 자바의 Class에 대해 학습하세요. 학습할 것 (필수) 클래스 정의하는 방법 객체 만드는 방법 (new 키워드 이해하기) 메소드 정의하는 방법 생성자 정의하는 방법 this 키워드 이해하기 과제 (Optional) int 값을 가지고 있는 이진 트리를 나타내는 Node 라는 클래스를 정의하세요. int value, Node left, right를 가지고 있어야 합니다. BinrayTree라는 클래스를 정의하고 주어진 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node) 메소드를 구현하세요. DFS는 왼쪽, 루트, 오른쪽 순으로 순회하세요. 클래스 클래스란 객체 모델을 프로그래밍 언어로 표현하기 위한 수단이..
-
[live-study] 4: 제어문개발/Java 2020. 12. 30. 00:24
백기선님이 진행하시는 live-study 4주차 과제 4주차 과제 목표 자바가 제공하는 제어문을 학습하세요. 학습할 것 선택문 반복문 과제 (옵션) 과제 0. JUnit 5 학습하세요. 과제 1. live-study 대시 보드를 만드는 코드를 작성하세요. 과제 2. LinkedList를 구현하세요. 과제 3. Stack을 구현하세요. 과제 4. 앞서 만든 ListNode를 사용해서 Stack을 구현하세요. 과제 5. Queue를 구현하세요. 선택문 선택문은 제시된 조건에 따라 코드의 흐름을 결정하는 방법을 말한다. 크게 if문과 switch문이 있다. if if문은 조건식의 결과에 따라 블록의 실행 여부를 결정하는 방법이다. if ( 조건 ) { // method A)_ // print something..
-
Queue (큐)알고리즘/자료구조 2020. 12. 30. 00:24
Queue FIFO(First In First Out, 선입선출) 구조를 가지고 있는 자료구조다. 매표소에서 표를 예매하는 것과 같다. 매표소에 줄을 섰을 때, 먼저 온 사람이 앞에 서서 먼저 표를 구매하고 빠져나간다. 나중에 온 사람은 앞에 사람들이 빠질 때 까지 기다렸다가 자기 차례가 오면 구매하고 빠져나간다. 큐에 데이터를 넣는 행위를 enqueue라고 한다. 큐에서 데이터를 꺼내는 행위를 dequeue라고 한다. 두가지 자료구조를 활용해서 큐를 구현했다. 하나는 배열, 하나는 ListNode(LinkedList를 실습하기 위해 만든 클래스)이다. 배열로 구현했을 땐, 크기를 미리 정해야하기 때문에 가변적이지 못하다. ListNode로 구현했을 땐 큐 크기 제한이 없다. 테스트코드 포함 전체 코드 ..