전체 글

책에서 공부한 내용들을 활용해 복합 패턴으로 하나의 프로그램을 만들어보자.public interface Quackable { public void quack();}먼저 위와 같은 기본적인 인터페이스가 있고public class Duck implements Quackable { public void quack() { ... }}그 인터페이스를 implements 받아 오리 객체를 만드는 클래스가 존재한다.Adapter Pattern그런데 여기서 오리가 아닌 거위 객체가 추가 되었다.public class Goose { public void honk() { ... }}거위는 quack이 아닌 honk 메소드를 가지고 있다.여기서 어댑터 패턴을 사용한다.public clas..
템플릿 메소드 패턴(Template Method Pattern)템플릿 메소드 패턴(Template Method Pattern)은 알고리즘의 골격을 정의한다.알고리즘의 일부 단계를 서브클래스에서 구현할 수 있다.알고리즘의 구조는 유지하며 특정 단계만 서브클래스에서 재정의할 수 있다.비슷한 형태의 클래스, 즉 중복되는 코드가 있는 클래스들의 공통된 부분을 추상화해서 또 다른 base 클래스로 만드는 것이다. 한 마디로 프로그램의 '틀'이라고 볼 수 있다.스타버즈라는 카페의 커피와 티 레시피는 거의 흡사하다. 이 중 공통된 부분을 묶어서 하나의 베이스로 만든다.void perpareRecipe() { boilWater(); brew(); pourInCup(); addCondiments()..
Adapter Pattern어댑터 패턴(Adapter Pattern)은 특정 클래스 인터페이스를 클래스에서 요구하는 다른 인터페이스로 변환하여, 호환되지 않는 클래스를 사용할 수 있도록 한다.Adapter?어댑터란, 우리가 해외를 갈 때 110V로 변환하기 위해 챙기는 어댑터와 목적이 거의 동일하다.어떠한 인터페이스를 클라이언트에서 요구하는 형태로 변환하는 역할을 한다.예를 어떠한 업체의 라이브러리를 사용하는데, 이 라이브러리에서 지원하는 인터페이스와 기존의 인터페이스가 호환되지 않는다고 가정해보자. 더군다나 기존의 코드를 수정할 수 없는 상황이라면? 이 두 가지를 적응 시켜주는 것이 어댑터의 역할이다. 어댑터 사용 방법public class MallardDuck implements Duck { publ..
데코레이터 패턴이란?데코레이터 패턴(Decorator Pattern)은 객체에 추가 요소를 동적으로 추가할 수 있다.상속으로 확장하는 것보다 새로운 인스턴스 객체를 만들어 감싸는 데코레이터 패턴이 유연성 측면에서 더 좋다. Starbuzz Coffee 예제Starbuzz라는 초대형 커피 전문점이 있다.이 카페의 초기 주문 시스템은 이렇게 되어 있었다.초창기에는 4가지의 커피 종류가 있었다. 점점 시간이 지날 수록 커피에 휘핑, 우유, 모카 등을 추가하는 손님이 생겨났고 하나씩 확장하다 보니 오른쪽 그림과 같은 다이어그램이 만들어졌다.한 눈에 봐도 문제가 많은 걸 알 수 있다.인스턴스 변수와 상속을 통해 이를 해결하고자 했다.boolean타입의 인스턴스 변수를 만들고 이에 대한 getter와 setter를..
옵저버 패턴이란?옵저버 패턴(Observer Pattern)은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다. 옵저버 패턴에는 하나의 subject(상태를 저장하고 있는 객체)가 있고 object(상태를 전달받는 객체)로 이루어진 observer가 존재한다.subject의 값이 변경될 때마다 observers로 묶여있는 그룹에 속해 있는 object들에게 변경 사항을 알려준다. (혹은 object들이 가져온다)본 교재에서는 이를 그림으로 직관적이게 나타냈다.Duck이라는 object가 observer에 등록을 요청한다. subject는 이를 받아들여 duck object를 observer 그룹에 넣..
문제 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 입출력 예 해결 방법 소수를 판별하는 함수를 미리 만들어놓는다. permutation 함수를 이용해서 순열을 만든다. 루프를 돌며 소수인지 판별한다. 코드 from itertools import permutations def isPrime(number): if number < 2: return False else: for i in range(2, number): if number % i == 0: retur..
김영한 스프링 부트 강의를 듣는 중 예제를 따라하다가 의문이 생겼다. input 태그의 name 값을 이용해서 post 메서드 방식으로 입력한 값을 컨트롤러에 전달해준다는데 아무리 봐도 html과 java 파일을 연결해주는 코드가 없었다. 결론부터 말하자면, 우리의 눈에 보이지 않을 뿐 스프링 프레임 워크 내부에서 자체적으로 처리해주는 것이었다. 이름 등록 사용자가 값을 입력하는 html이다. package hello.hellospring.controller; public class MemberForm { private String name; public String getName() { return name; } public void setName(String name) { this.name = nam..
문제수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.해결..
문제명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다.아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다.명함 번호가로 길이세로 길이16050230703603048040가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 5..
꽉악꽉
카악퉤