분류 전체보기 170

퍼사드(FACADE) 패턴이란?

1. 퍼사드 패턴이란? 의도 한 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스를 제공하는 패턴. 서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 정의 즉, 복잡한 서브 시스템 의존성을 최소화하는 방법이다. 사실 이게 보면 뭔가... 굉장히 익숙하면서도 크게 어렵지도 않다. 많은 영상과 정보를 찾는 동안에도 모두가 별로 이야기할게 없다고 하긴 했다. 사용 시기 복잡한 서브시스템에 대한 단순한 인터페이스 제공이 필요할 때 추상 개념에 대한 구현 클래스와 사용자 사ㅏ이에 너무 많은 종속성이 존재할 때 서브시스템을 계층화 시킬 때 구조 Facade : 단순하고 일관된 통합 인터페이스를 제공. 서브시스템을 구성하는 어떤 클래스가 어떤 요청을 처리해야 하는지 알고 있으며, 사용자의 요청을 ..

데코레이터 패턴(Decorator Pattern)이란?

1. 데코레이터 패턴 의도 객체에 동적으로 새로운 책임을 추가할 수 있게 한다. 기능을 추가하려면, 서브클래스를 생성하는 것보다 용통성이 있다. 즉, 기존 코드를 변경하지 않고 부가 기능을 추가하는 패턴이다. 상속이 아닌 위임을 사용해서 보다 유연하게(런타임에) 부가 기능을 추가하는 것도 가능하다. 우리가 장식을 생각한다면 장식품을 달아주는 주체는 그 장식(데코레이터)만 추가될 뿐 주체는 여전히 동일하다. (예 : 크리스마스 트리에 장식품이 달려도 트리는 그대로임) 이것처럼 디자인 패턴에서도 이러한 느낌으로 데코레이터 패턴을 고안한게 아닌가 생각이 든다. (내 뇌피셜) 사용 시기 동적으로 또한 투명하게(transparent), 다시 말해 다른 객체에 영향을 주지 않고 개개의 객체에 새로운 책임을 추가하기..

Map 알아보기

저번에 List에 대해서 정리를 했는데 정리를 하지 않을 것이 Map이랑 Set이 있다. 이번에는 Map에 대해 알아보고자 한다. 1. Map이란? java.util에 존재하는 map interface는 키와 값사이의 매핑을 나타낸다. 맵 인터페이스는 컬렉션 인퍼테이스의 하위 항목이 아니다. 그러므로 컬렉션 타입의 나머지와 약간 다르게 작동한다. 맵은 유일한 키를 가진다. 출처 : https://www.geeksforgeeks.org/map-interface-java-examples/ Map은 사전처럼 key-value 연관 매핑같은 사용에 완벽하다. 맵은 키로 색인을 하는데 혹은 키로 값을 가져오거나 수정할 때 사용한다. 흔한 시나리오는다음과 같다. 에러 코드와 그 설명에 대한 맵 우편번호와 도시의 맵..

복합체(Composite) 패턴이란?

1. 복합체(Composite) 패턴이란? 의도 부분과 전체의 계층을 표현하기 위해 객체들을 모아 트리 구조로 구성한다. 사용자로 하여금 개별 객체와 복합 객체를 모두 동일하게 다룰 수 있도록 하는 패턴. 그룹 전체와 개별 객체를 동일하게 처리할 수 있다. 클라이언트 입장에서는 전체나 부분이나 모두 동일한 컴포넌트로 인식할 수 있는 계층구조를 만든다. 사용 시기 부분 - 전체의 객체 계통을 표현하고 싶을 때 사용자가 객체의 합성으로 생긴 복합 객체와 개개의 객체 사이의 차이를 알지 않고 자기 일을 할 수 있도록 만들고 싶을 때, 사용자는 복합 구조의 모든 객체를 똑같이 취급 구조 Component : 집합 관계에 정의될 모든 객체에 대한 인터페이스를 정의 Leaf : 가장 말단의 객체. 즉, 자식이 없는..

Deque, LinkedList 와 ArrayDeque

이번 시간에는 Deque 인터페이스를 알아보고 이의 구현체인 LinkedList와 ArrayDeque를 알아보고 비교할 것이다. 1. Deque란? 원소의 추가와 삭제를 둘 다 끝부분에서 지원하는 선형 collection. Deque라는 이름은 double ended queue의 줄임말이고 주로 "deck"으로 발음된다. 대부분의 Deque(Double eneded queue) 구현체는 Deque가 포함하고 있는 원소의 수에 고정된 제한이 없다. 하지만, 이 인터페이스는 고정된 사이즈 제한을 가진 것들과 마찬가지로 용량 제한(capacity-restricted) deque를 지원한다. 이 인터페이스는 deque의 끝부분 둘 다에 접근하는 메소드를 정의한다. insert, remove, examine이 제..

직렬화란 무엇인가 ? / serialVersionUID 설정 이유

1. 재미있는 직렬화 이야기 화성과 지구간의 통신 때는 2040년... 화성은 식민 행성으로 발전했다. 근데 지구에서 로봇을 만들었다. 근데 화성에서도 마침 로봇을 만들었는데 지구의 로봇보다 성능이 좋아서 이것을 사용하기로 결정했다. 두 행성 과학자들이 미팅 후 화성에서 지구로 로봇을 보내기로 했다. 그런데, 문제가 발생했다! 로봇 100개를 지구로 보내는 비용이 100만 달러라고 한다. 여행 기간은 무려 60일이 걸린다고 한다. 비용 문제로 고민한 결과, 화성의 과학자들은 이 로봇의 핵심 기술을 지구의 과학자들과 공유하기로 한다. 이 핵심 기술은 로봇의 구조에 관한 것이다. 화성 로봇들은 지구의 로봇들과 같은 구조로 개발됐고, 화성 과학자들은 로봇 각각 부품의 데이터를 직렬화해서 지구로 보냈다. 지구의..

leetcode : 1046. Last Stone Weight

요즘 코딩 테스트를 많이 하지 않는것 같아서 문제를 하나 풀어보았다. 문제는 다음 사이트에서 풀 수 있다. https://leetcode.com/problems/last-stone-weight/ Last Stone Weight - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com Description You are given an array of integers stones where stones[i] is the weight of the ith stone. We ..

Stack, Queue, PriorityQueue

최근에 코딩 테스트를 풀었는데 위 세개의 항목을 실제로 사용한 적도 없고, 그렇다고 이해하고 있지 않았다. 그런 이유로 위 세개를 정리한다. Stack, Queue, PriorityQueue... 내가 갈게 ㅠㅠ 1. stack 스택 클래스는 객체의 LIFO를 나타낸다. vector가 스택으로 취급될 수 있도록 다섯개의 작업을 가진 Vector클래스를 extends 한다. 보통의 push와 pop작업이 제공된다. top을 뽑아내는 메소드 뿐만 아니라, 스택이 비었는지, 그리고 한 아이템을 스택에서 찾는 메소드, 또 top에서 얼마나 떨어져 있는지 같은 기능을 제공한다. 출처 : https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html 스택은 객체의 ..

브릿지(Bridge) 패턴이란?

1. 브릿지 패턴이란? 의도 구현에서 추상을 분리하여, 이들이 독립적으로 다양성을 가질 수 있도록 한다. 즉, 추상적인 것과 구체적인 것을 분리하여 연결하는 패턴이다. 사용 시기 추상적 개념과 이에 대한 구현 사이의 지속적인 종속 관계를 피하고 싶을 때 추상적 개념과 구현 모두가 독립적으로 서브클래싱을 통해 확장되어야 할 때 추상적 개념에 대한 구현 내용을 변경하는 것이 다른 관련 프로그램에 아무런 영향을 주지 않아야 할 때 클래스 계통에서 클래스 수가 급증하는것을 방지하고자 할 때 구조 Abstraction : 추상적 개념에 대한 인터페이스를 제공하고, 객체 구현자에 대한 참조자를 관리 Refind Abstraction : 추상적 개념에 정의된 인터페이스를 확장 Implementor : 구현 클래스에 ..

어탭터(Adaptor) 패턴이란?

1. 어탭터 패턴이란? 의도 클래스의 인터페이스를 사용자가 기대하는 인터페이스 형태로 적응시킨다. 서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 동작시킨다. 즉, 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴 사용 시기 기존 클래스를 사용하고 싶은데 인터페이스가 맞지 않을 때 이미 만든 것을 재사용하고자 하나 이 재사용 가능한 라이브러리를 수정할 수 없을 때 이미 존재하는 여러 서브클래스를 사용해야 하는데 서브클래스들의 상속으로 인터페이스를 다 개조하는것이 불가능할 때 구조 Target : 사용자가 사용할 응용 분야에 종속적인 인터페이스를 정의하는 클래스 Client : Target 인터페이스를 만족하는 객체와 동작할 대상 Adapdee : 인터페이스의 적응이 필요한 기존 ..