분류 전체보기

프록시 패턴 프록시 패턴은 다른 객체의 기능을 대리하거나 접근을 제어하는 디자인 패턴이다. 이 패턴은 클라이언트가 실제 객체(RealSubject)를 직접 호출하지 않고, 대신 프록시(Proxy) 객체를 통해 요청을 중계한다. 이를 통해 RealSubject에 대한 접근을 제어하거나 추가적인 기능을 제공할 수 있다. 구조 Subject - RealSubject와 Proxy가 구현해야 할 메소드를 정의한다. 클라이언트는 이 인터페이스를 통해 RealSubject 또는 Proxy와 상호 작용한다. RealSubject - 실제로 서비스를 제공하는 클래스. Proxy는 이 클래스의 인스턴스에 대한 요청을 중계한다. Proxy -RealSubject 클래스의 기능을 대리하는 역할. Proxy는 RealSu..
플라이웨이트 패턴 객체를 가볍게 만들어 메모리 사용량을 줄이는 패턴. 자주 변하는 속성과 불변 속성을 분리하고 불변 속성을 재사용함으로써 메모리 사용량을 줄일 수 있다. 구조 Flyweight - Flyweight가 받아들일 수 있고, 부가적 상태에서 동작해야 하는 인터페이스를 선언한다. ConcreteFlyweight - Flyweight 인터페이스를 구현하고 내부적으로 갖고 있어야 하는 본질적 상태에 대한 저장소를 정의한다. ConcreteFlyweight 객체는 공유할 수 있는 것이어야 한다. UnsharedConcreteFlyweight - 공유될 필요가 없는 Flyweight 구현 클래스. FlyweightFactory - Flyweight 객체를 생성하고 관리하며, Flyweight 객체가..
문제 링크 성능 요약 메모리: 4.13 MB, 시간: 0.02 ms 문제 설명 1 x 1 크기의 칸들로 이루어진 직사각형 격자 형태의 미로에서 탈출하려고 합니다. 각 칸은 통로 또는 벽으로 구성되어 있으며, 벽으로 된 칸은 지나갈 수 없고 통로로 된 칸으로만 이동할 수 있습니다. 통로들 중 한 칸에는 미로를 빠져나가는 문이 있는데, 이 문은 레버를 당겨서만 열 수 있습니다. 레버 또한 통로들 중 한 칸에 있습니다. 따라서, 출발 지점에서 먼저 레버가 있는 칸으로 이동하여 레버를 당긴 후 미로를 빠져나가는 문이 있는 칸으로 이동하면 됩니다. 이때 아직 레버를 당기지 않았더라도 출구가 있는 칸을 지나갈 수 있습니다. 미로에서 한 칸을 이동하는데 1초가 걸린다고 할 때, 최대한 빠르게 미로를 빠져나가는데 걸리..
문제 링크 성능 요약 메모리: 4.22 MB, 시간: 0.01 ms 문제 설명 Ax + By + C = 0으로 표현할 수 있는 n개의 직선이 주어질 때, 이 직선의 교점 중 정수 좌표에 별을 그리려 합니다. 예를 들어, 다음과 같은 직선 5개를 2x - y + 4 = 0 -2x - y + 4 = 0 -y + 1 = 0 5x - 8y - 12 = 0 5x + 8y + 12 = 0 좌표 평면 위에 그리면 아래 그림과 같습니다. 이때, 모든 교점의 좌표는 (4, 1), (4, -4), (-4, -4), (-4, 1), (0, 4), (1.5, 1.0), (2.1, -0.19), (0, -1.5), (-2.1, -0.19), (-1.5, 1.0)입니다. 이 중 정수로만 표현되는 좌표는 (4, 1), (4, -4..
문제 링크 성능 요약 메모리: 4.22 MB, 시간: 0.04 ms 구분 코딩테스트 연습 > 2020 KAKAO BLIND RECRUITMENT 문제 설명 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴파일하여 로그를 보니 대부분 소스 코드 내 작성된 괄호가 개수는 맞지만 짝이 맞지 않은 형태로 작성되어 오류가 나는 것을 알게 되었습니다. 수정해야 할 소스 파일이 너무 많아서 고민하던 "콘"은 소스 코드에 작성된 모든 괄호를 뽑아서 올바른 순서대로 배치된 괄호 문자열을 알려주는 프로그램을 다음과 같이 개발하려고 합니다. 용어의 정의 '(' 와 ')' 로만 이루어진 문자..
퍼사드 패턴 여러 개의 서브 시스템이나 복잡한 클래스들을 간단한 인터페이스를 통해 외부로 노출시키는 패턴. 클라이언트에게 획일화된 하나의 인터페이스를 제공함으로써, 클라이언트는 복잡합 동작 과정을 알 필요가 없이 인터페이스의 기능을 사용할 수 있다. 구조 기본 인터페이스 //서브시스템 클래스 class SubSystem1 { public void Method1() { //구현 로직 } } class SubSystem2 { public void Method2() { //구현 로직 } } //퍼사드 클래스 class Facade { private SubSystem1 sub1; private SubSystem2 sub2; public Facade() { sub1 = new SubSystem1(); sub2 =..
데코레이터 패턴 기존의 객체에 동적으로 새로운 기능을 추가할 수 있게 해주는 패턴이다. 새로운 기능을 추가한 서브클래스를 생성하는 것보다 융통성 있는 방법을 제공한다. 본래의 기능을 새로운 기능이 감싸안음으로써 기능을 더할 수 있다. 구조 Component - 동적으로 추가할 서비스를 가질 가능성이 있는 객체들에 대한 인터페이스 ConcreteComponent - 추가적인 서비스가 실제로 정의되어야 할 필요가 있는 객체 Decorator - 객체에 대한 참조자를 관리하면서 Component에 정의된 인터페이스를 만족하도록 인터페이스를 정의 ComcreteDecorator - Component에 새롭게 추가할 서비스를 실제로 구현하는 클래스 기본 인터페이스 public interface Component..
컴포지트 패턴 어떤 객체들의 구성을 표현하기 위해 사용되며, 개별 객체와 복합 객체를 동일한 인터페이스를 통해 다룰 수 있도록 해주는 디자인 패턴이다. 이 패턴은 개별 객체와 복합 객체를 구분하지 않고 동일한 방식으로 취급함으로써 클라이언트 코드가 단일 객체나 객체 구성을 일관되게 처리할 수 있게 해준다. 구조 Component - 개별 객체와 복합 객체가 구현해야 하는 공통 인터페이스를 정의한다. 순환 구조에서 요소들을 포함하는 전체 클래스에 접근하는데 필요한 인터페이스를 정의하며, 적절하다면 그 인터페이스를 구현한다. Leaf - 개별 객체를 나타내며 Component 인터페이스를 구현한다. Component에 Composite - 복합 객체를 나타내며 자식 컴포넌트를 관리하고 Component 인터..
NewtronVania
'분류 전체보기' 카테고리의 글 목록 (5 Page)