본문 바로가기

분류 전체보기

(143)
[소프트웨어/디자인패턴] 컴포지트 패턴 (Composite Pattern) 컴포지트 패턴은 동일 기능을 수행하는 부분-전체 관계를 정의할 때 유용하다. Context 보통 컴퓨터의 가격과 전력을 산정할 때는 중요하다. 어떤 CPU와 어떤 램 그리고 그래픽카드를 장착했는지에 따라 컴퓨터의 가격과 소비전력을 천차만별이다.흔히 우리는 기존에 배운대로 설계하여 코드를 작성할 것이다. 일부 눈엣가시인 듯한 코드들이 보이지만 가볍게 무시하자. class Computer { private CPU cpu; private Ram ram; private HardDisk disk; public Computer(CPU cpu, Ram ram, HardDisk disk) { this.cpu = cpu; this.ram = ram; this.disk = disk; } public int getPrice..
[소프트웨어/디자인패턴] 퍼사드 패턴 (Facade Pattern) 컴퓨터의 전원버튼을 누를때 우린 어떻게 동작하는지 생각하지 않는다. 글을 작성하려고 준비하면서 느낀점은 "과연 이 게시글을 볼까?"였다. 너무 쉬웠기떄문이다. 복잡한 프로세스의 내용을 하나의 인터페이스 메서드로 간략화하여 사용하는 패턴으로 정리할 수 있다. Context 주인공은 쉬는 동안에 영화를 보고싶다. 집에 DVDPlayer와 Screen이 있어 이를 사용하여 영화관에 가지 않고도 충분히 좋은 환경으로 영화를 즐긴다. 주인공이 쉴때 영화를 보려면 screen.on() -> dvdPlayer.insert()순으로 스크린을 켜고 볼 영화의 DVD를 플레이어에 넣어야한다. 이와 같은 내용을 코드드로 나타내면 아래와 같다. class Screen { public void on() { System.out...
[소프트웨어/디자인패턴] 어댑터 패턴 (Adapter Pattern) 어댑터 패턴은 아무 관련없는 인터페이스간의 호환성을 도와준다. Context 사실 adapter는 일상생활에서도 많이 볼 수 있는 형식과 같다. 흔히 말하는 돼지코와 같은 원리이다. 먼저 아래와 같은 상황이 주어진다고 해보자, 최초 어플리케이션 설계시 Client는 Car을 가지고 있으며 움직일 때마다 car::depart메서드를 이용한다. 이를 코드로 나타내면 아래와 같다. interface Car { void move(); } class Sonata implements Car { @Override public void move() { System.out.println("Sonata is going!"); } } class Client { private Car car; public Client(Car ..
[vue.js] Router Guard로 로그인 안된 사용자 리다이렉트 시키기 vue.js(v2)를 통해서 router를 작성하다보면, 세션이나 로그인된 유저에 대한 체크를 해야하는 경우가 있다. 만약 프로젝트가 vue-router를 사용하고 있다면 아래와 같이 로그인된 사용자에 대한 체크를 해서 다른 뷰로 이동시 사용자를 강제로 로그인 페이로 이동시키거나 로그인 팝업을 띄어야한다.
[도구] VSC 설정파일 자주 사용하는 옵션들을 아래에 저장해 놓았다.
[Java8] 새로운 collection api에 대해서 java8의 새로운 collection api에 대해서 알아보자. Iterable void forEach(Consumer
[소프트웨어/디자인패턴] 팩토리 메서드 패턴(Factory Method Pattern) 팩토리 메서드 패턴은 인스턴스 생성 정책을 사용 클래스로부터 분리한다. Context 엘리베이터 내부에는 어디로 갈 것인지에 대한 컨트롤러가 있고, 빌딩의 각 층에는 엘리베이터를 방향에 따른 엘리베이터를 호출하는 버튼이 있다. 이때, 어느 엘리베이터를 해당 층에 보낼 것 정하는 것을 스케줄링이라한다. 보통의 경우에는 엘리베이터가 사람을 많이 이동시키려고 처리량에 따른 스케줄링 정책을 가지고 있기 마련이다. ElevatorManager은 많은 엘리베이터를 거느리고 있으며, 스케줄링에 대해 처리량에 따른 정책을 가지고 있는 TroughputSceduler룰 속성으로 가지고 있다. 각 층에서 요청이 오면 ElevatorManager::requestElevator를 통해 ThroughputScheduler에 요..
[소프트웨어/디자인패턴] 템플릿 메서드 패턴(Template Method Pattern) 템플릿 메서드 패턴은 구조적으로 동일한 기능들의 코드 중복의 최소화를 도와줍니다. Context 엘리베이터는 모터와 문 등으로 이루어져 있다. 기존의 엘리베이터의 모터가 HyundaiMotor이고 Door가 있을 때 아래와 같이 나타낼 수 있는데 HyundaiMotor은 Door을 가지고 있고 Door에 상태(DoorStatus)에 따라서 모터의 움직임이 달라진다. 모터 움직이고 있는 경우 명령을 무시한다. 문이 열려있을 경우 문을 닫는다. 모터를 움직인다. 모터의 상태를 바꾼다. 위와 같은 조건에 따라서 아래와 같이 구현할 수 있다. class HyundaiMotor { private Door door; private MotorStatus motorStatus; public HyundaiMotor(Do..