[디자인 패턴] 반복자 패턴

반복자 패턴(Iterator Pattern) 반복자 패턴은 내부 구조를 외부에 노출하지 않고, 집합체(Aggregate)를 통해 원소 객체에 순차적으로 접근할 수 있습니다. C++의 vector에도 사용되는 유명한 패턴입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 std::vector<int> nums; nums.push_back(1); nums.push_back(2); nums.push_back(3); nums.push_back(4); nums.push_back(5); // 반복자 패턴 std::vector<int>::iterator iter = nums.begin(); for (; iter != nums.end(); iter++) { std::cout << *iter << std::endl; } 여기서 vector<T>::iterator가 반복자 패턴입니다. 반복자 패턴 구조 반복자 패턴의 해심은 효율적인 집합 관리를 위해 별도의 집합체를 갖고 있습니다....

December 8, 2020 · 3 min · Pacientes

[디자인 패턴] 프록시 패턴

프록시 패턴(Proxy Pattern) 프록시 패턴은 객체 접근을 제어하기 위한 중간 단계에 대리자를 생성하여 처리를 위임하는 패턴입니다. 프록시 패턴의 가장 큰 특징은 하나의 객체를 두 개로 분리하는 것입니다. 그러나 분리된 두 개의 객체는 서로 다른 객체가 아닌 동일한 객체이며 동일한 인터페이스를 갖고 있습니다. 프록시 패턴은 응용이 매우 많습니다. 대표적인 응용 사례는 다음과 같습니다. 원격 프록시 가상 프록시 보호 프록시 스마트 프록시 프록시 패턴 구조 프록시 패턴은 두 객체를 이어준다는 역할에서 **어댑터 패턴(Adapter Pattern)**과 유사합니다....

December 8, 2020 · 6 min · Pacientes

[디자인 패턴] 플라이웨이트 패턴

플라이웨이트 패턴(Flyweight Pattern) 플라이웨이트 패턴은 이름이 의미하는 바와 같이 공통된 객체를 공유하여 자원을 절약하는 패턴입니다. 자원이란 컴퓨터의 메모리를 의미합니다. 플라이웨이트 패턴 구조 공통된 객체를 공유하기 위해서는 특별한 조건이 필요합니다. 공유하려는 객체는 불필요한 메모리 사용을 방지하기 위해 단 하나의 객체로 만들어야 합니다. 이러한 특징은 **싱글톤 패턴(Singleton Pattern)**과 매우 비슷합니다. 또한 객체의 생성은 new 키워드로 동작합니다. 객체를 싱글톤 패턴과 결합하여 생성하는 것은 **팩토리 패턴(Factory Pattern)**과 연관 지어 생각할 수 있습니다. 이처럼 플라이웨이트 패턴은 다른 객체와의 결합이 많은 편입니다....

December 7, 2020 · 4 min · Pacientes

[디자인 패턴] 파사드 패턴

파사드 패턴(Facade Pattern) 파사드 패턴은 복잡하게 분리된 모듈의 결합입니다. 다른 말로는 연관된 서브 시스템의 메서드를 하나로 결합한 형태입니다. API를 사용해본 경험이 있다면, 대부분 파사드 패턴을 보았고, 사용하고 있습니다. 이처럼 파사드 패턴은 사용자에게 제공되는 최상위 통합 인터페이스입니다. 파사드 패턴의 구조 파사드 패턴은 특별한 구조보다는 작성 규칙이 존재합니다. 자기 자신만의 객체 사용 메서드에 전달된 매개변수 사용 메서드에 생성된 객체 사용 객체에 속하는 메서드 사용 먼저, 파사드 패턴을 활용했지만 잘못된 예시를 살펴보겠습니다. 잘못된 파사드 패턴의 예제 불필요한 객체 생성 루틴과 재호출을 코드에 삽입하는 경우가 많습니다....

December 7, 2020 · 3 min · Pacientes

[알고리즘] 삼성 SW 역량 테스트 컨베이어 벨트 위의 로봇

[삼성 SW 역량 테스트] 컨베이어 벨트 위의 로봇 삼성 SW 역량 테스트 기출 문제입니다. 문제해결 능력을 키우기 위해 온라인 알고리즘 문제를 풀어보고 있습니다. 이곳에서 직접 문제를 풀어볼 수 있습니다. 컨베이어 벨트 위의 로봇 문제 설명 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부터 2N까지의 번호가 매겨져 있다. 벨트가 한 칸 회전하면 1번부터 2N-1번까지의 칸은 다음 번호의 칸이 있는 위치로 이동하고, 2N번 칸은 1번 칸의 위치로 이동한다....

December 6, 2020 · 5 min · Pacientes