전체 글 183

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 : 인터페이스의 적응이 필요한 기존 ..

프로토타입(Prototype) 패턴이란?

1. 프로토 타입 패턴이란? 의도 원형이되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성 즉, 기존 인스턴스를 복제하여 새로운 인스턴스를 만드는 방법을 말한다. 사용 시기 원형 패턴은 제품의 생성, 복합, 표현 방법에 독립적인 제품을 만들고자 할 때 사용 인스턴스화할 클래스를 런타임에 지정할 때 제품 클래스 계통과 병렬적으로 만드는 팩토리 클래스를 피하고 싶을 때 클래스의 인스턴스들이 서로 다른 상태 조합 중에 어느 하나일 때 구조 구조에서 보듯이 원형에서 다양한 클래스가 파생해서 그 파생된 클래스를 사용하는 것이다. (이정도야뭐...) Prototype : 자신을 복제하는데 필요한 인터페이스를 정의 ConcretePrototype : 자신을 복제하..

빌더(Builder) 패턴이란?

이번에는 빌더 패턴에 대해서 배울것이다. 이번 빌더 패턴을 공부하면서 떠오른 생각은 전에 내가 작성했던 회사 코드에 이것을 적용했으면 더 좋앗을것 싶은 것이 있다. 그래서, 적용을 해보고 어떤식으로 적용을 했으면 더 좋았을지 고민하려고 한다. 1. 빌더 패턴이란? 의도 복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공할 수 있다. 다시 말하면, 동일한 프로세스를 거쳐 다양한 구성의 인터페이스를 만드는 방법을 정의한다. 이 빌더 패턴을 통해 우리는 객체를 만드는 프로세스를 독립적으로 분리할 수 있다. 사용 시기 복합 객체의 생성 알고리즘이 이를 합성하는 요소 객체들이 무엇인지 이들의 조립 방법에 독립적일 때 합성..

추상 팩토리 패턴(Abstract Factory Pattern)이란?

이번 시간에는 추상 팩토리 패턴에 대해 알아보고자 한다. 무언가 팩토리 메서드 패턴과 굉장히 유사하지만 차이점이 무엇인지를 생각하며 보는것이 포인트다. 1. 추상 팩토리 패턴이란? 의도 상세화된 서브클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공 즉, 서로 관련있는 여러 객체를 만들어주는 인터페이스를 제공하는 것이다. 얼핏 보면 팩토리 메서드 패턴과 매우 유사하지만 팩토리를 사용하는 초점이 클라이언트에 맞추어 져 있다고 생각하며 된다. 팩토리 메서드 패턴이 기억이 안나거나 잘 모르겟으면 전에 정리한 내용이 있으니 참고하면 좋다. https://tech-monster.tistory.com/148 팩토리 메서드의 구조는 다음과 같다. 추상 팩토리의 구..

List 관련 질문 답변 정리

금일 면접을 봤는데 List, Map, Set의 차이점에 대해 물어봤다. 그런데 대답을 잘 하지 못한 기념(?)으로 이에 대한 내용을 정리하려고 한다. 물론 내가 받은 질문 뿐 아니라, 평소 들엇는데 기억이 잘 안나는 것에 대한 답도 정리하려고 한다. 사실 이게 그냥 코드로 써보면 진짜 별 거 아닌데 사용하는것과 이해하는것은 별개의 문제긴 하다. 그런데 내용이 솔직히 어렵지는 않다. 다만 어느 차이점에 대해서 많이 질문을 하니, 그러한 것을 중심으로 정리할 것이다. 자세한 사용 방법이나 이런것은 흔히 찾을 수 있는 것이니 알아서 찾아보자. 1. What is Collection Framework? 자바에서 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 ..

팩토리 메서드(Factory Method) 패턴

1. 아이디어 캐치 공대 키메라가 공장을 운영하고 있다고 하자.(역시 상상이 최고야... ) 공장에서는 자동차 모델 1이라는 것을 생산하고 있다. 차체 Frame Stamping, 조립, 그리고 도색까지 모든 차의 제작 과정을 아우르고 있다. 그래서 공대 키메라의 공장의 매출이 상승해서 새로운 모델을 제작하려고 한다. 이 자동차 모델 2는 기존 모델에서 핵심 기능만 다를 뿐 다른 것은 전부 동일하다. 그러면 우리는 기존 자동차 모델 1을 제작하기 위해 사용한 공정을 동일하게 사용하고, 일정 부분에서 자동차 모델 2를 위해 기능을 추가혹은 수정하면 된다. 결국, 잘 추상화 되어있는 factory 를 구현한다면 문제는 해결된다. 의도 객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생..

static / final / static final이란?

어찌보면 쌩 기초이지만 생각나는대로 기초를 다시 다잡고 가려고 한다. static 혹은 final도 굉장히 많이 보는 친구들이지만(너같은 친구 난 없어) 정말 간단히 알아보려 한다. 1. Static (정적)이란? 정적 : 고정된이란 의미 이 키워드를 사용하여 static 변수, static 메소드를 만들 수 있다. 정적 필드와 정적 메소드는 객체에 소속된 멤버가 아니라 클래스에 고정된 멤버로, 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재시 클래스별로 관리된다. 따라서, 클래스 로딩이 끝나는 즉시 사용이 가능하다. 필드나 메소드를 객체마다 다르게 가져야 한다면 인스턴스로 생성하면 되고 공용 데이터에 해당하거나 인스턴스 필드를 포함하지 않는 메소드를 선언하고자 할 때 이용한다. 출처 http..

싱글톤(Singleton) 패턴

1. 싱글톤 패턴이란? 인스턴스를 오직 한개만 제공하는 클래스 This pattern involves a single class which is responsible to create an object while making sure that only single object gets created. This class provides a way to access its only object which can be accessed directly without need to instantiate the object of the class. reference : https://www.tutorialspoint.com/design_pattern/singleton_pattern.htm *인스턴스 : 객체 지향..