반응형

Computer Science 18

Proxy Pattern | 프록시 패턴

목차 어떤 상황에서 쓰일까? 애플리케이션 내에서 A라는 객체를 만드는데에 10초가 걸린다고하자. A 객체를 만들어야만 애플리케이션이 동작하는데 A 객체의 값이 필요한 상황은 아니라고하자. 즉 A의 깡통만 있으면 된다는 얘기이다! 뒤에 할일이 너무 많아도 10초를 기다려서 A객체가 만들어지기를 기다리는게 나은 선택일까? 차라리 A객체의 값이 실제로 필요할 때 A를 만들고 그 전에는 깡통인 채로 놔두면 어떨까? 프록시 패턴이란? 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴 초기화 지연, 접근제어, 캐싱 등 다양하게 응용할 수 있다! 프록시의 활용 - 초기화 지연 리소스가 많이 사용되는 객체인 경우, 해당 객체 타입의 프록시를 만든 후 실제 객체가 필요한 순간에 프록시가 실제 객체를 바라보..

Computer Science 2022.08.16

Flyweight Pattern | 플라이웨이트 패턴

목차 어떤 상황에서 쓰일까? 글자에는 글꼴, 크기, 색깔, 내용 등의 속성이 있다. 우리가 문서를 작성할 때 보통 글꼴과 크기는 일관되게 맞추기때문에 변경할 일이 거의 없다! 하지만 내용과 색깔은 시시때때로 변하는 속성이다. 글자 객체는 글꼴 객체 + 크기 객체 + 색깔 객체 + 내용 객체의 조합으로 만들어 진다하면 자주 변하지 않는 글꼴 객체와 크기 객체를 매번 생성할 필요가 있을까? 하나 만들어 두고 공통적으로 사용해도 되지 않을까? 플라이웨이트 패턴이란? 객체를 가볍게 만들어 메모리 사용을 줄이는 패턴이다. 자주 변하는 속성과 자주 변하지 않는 속성을 분리하고 재사용하여 메모리 사용을 줄인다! 불필요한 인스턴스 생성을 최소화하기 때문에 필요할때마다 새로운 인스턴스를 생성할때마다 메모리를 적게 사용하..

Computer Science 2022.08.16

Facade Pattern | 퍼사드 패턴

목차 어떤 상황에서 쓰일까? 일상생활에서 전등을 킬때, 우리는 스위치 하나만 누르면 된다 스위치를 눌렀을 때 어떤 과정을 거쳐서 전등이 켜지는지 클라이언트 입장에서 알 필요가 있을까? 전혀없다 퍼사드 패턴도 마찬가지이다! 퍼사드 패턴이란? 클라이언트가 사용해야하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화 하는 패턴이다 퍼사드 패턴은 클라이언트 애플리케이션의 헬퍼 역할일 뿐이지, 서브시스템 인터페이스를 숨기는 것은 아니다! 또한 퍼사드패턴은 서브시스템을 여러 곳에서 사용할 때 적용하면 이점이 있는 패턴이다! 장점 - 서브 시스템에 대한 의존성을 한곳으로 모을 수 있다 - 서브 시스템을 각 역할에 맞게 분리하여 재사용할 수 있다 단점 - 클라이언트에게 있던 의존성이 그대로 퍼사드 클래스로 옮겨..

Computer Science 2022.08.16

Decorator Pattern | 데코레이터 패턴

목차 어떤 상황에서 쓰일까? 댓글 작성 서비스는 필터를 받아서 동작한다. 이때 공백을 자르는 필터가 있을 것이고, 어떤 문자열을 자르는 필터가 있을 것이다. 문자열을 자르는 필터는 new Client(new SpamFilter()); 로 사용하고 공백을 자르는 필터는 new Client(new TrimFilter()); 로 사용할 것이다. 그렇다면 문자열과 공백 둘다 자르는 필터는 어떻게 만들 수 있을까?? SpamAndTrimFilter? 여기서 필터의 기능이 더 추가된다면..? SpamAndTrimAnd...And....Filter..? 각 필터들의 기능은 그대로 놔두면서, 런타임 시에 이 필터들이 조합되며 동작하게 할 수는 없을까?? 데코레이터 패턴이란? 런타임에서 기존 코드를 변경하지 않으면서 부..

Computer Science 2022.08.16

Composite Pattern | 컴포짓 패턴

목차 어떤 상황에서 쓰일까? 게임 캐릭터는 가방에 도란검과 체력물략을 가지고있다 보통 아이템에 마우스를 올리면 가격이 출력되는데, 도란검 가격을 출력하는것이나, 가방의 모든 아이템의 가격을 출력하는 것이나 게임 캐릭터 입장에선 동일하게 가격을 출력하는 것이다. 가방은 아이템을 담을 수 있는 것이니 가방에.. 가격 출력 메서드가 있어야할까?? 아니면 아이템에 가격출력 메서드를 추가해서 가방의 모든 아이템 가격을 출력할 땐 아이템 전체를 순회해야할까??? 컴포짓 패턴이란? 그룹 전체와 개별 객체를 동일하게 처리할 수 있는 패턴이다. 클라이언트 입장에서 전체나 부분이나 동일한 컴포넌트로 인식할 수 있어야한다. 다시말해 일괄적인 관리가 가능하게끔 된다! * 트리구조이어야 하는 제약사항이 있다! 장점 - 복잡한 ..

Computer Science 2022.08.15

Bridge Pattern | 브릿지 패턴

목차 어떤 상황에서 쓰일까? 게임 캐릭터의 속성을 생각해보자 스킨도 있고, 캐릭터 고유 스킬도 있고, 공통적인 캐릭터 스킬도 있고... 이 기능과 구현들을 모두 인터페이스나 추상 클래스를 확장해서 만들 수 있을까? 아마 implments 뒤에 붙는 인터페이스들이 20개가 넘어갈수도있다 ㅎㅎ 클라이언트가 바라보는건 '캐릭터'(추상화)이고 '캐릭터'의 구체적인 스킨과 스킬(구현체들)을 연결해서 사용하자! 다른 예시로, JDBC드라이버를 사용할 때 DriverManager.getConnection, Statement.execute(SQL), connection.prepareStatement(SQL).. 등이 모두 추상화된 기능이고 Class.forName("DriverName")에서 구체적인 구현체들을 가져오..

Computer Science 2022.08.15

Adapter Pattern | 어댑터패턴

목차 어떤 상황에서 쓰일까? 항상 나오는 예시.. 한국 전기제품 220V와 미국 전기제품 110V 사이에 꽂아서 전압을 맞추어주는 것을 어댑터라고한다! 소프트웨어에서도 동일하게, 서로 다른 인터페이스를 맞추어서 사용할 수 있게 해준다. 어댑터 패턴이란? 규격에 맞지 않는 객체를 클라이언트가 사용하는 인터페이스의 구현체로 바꾸어주는 패턴이다. 장점 - 기존 코드(Account)를 변경하지 않고 원하는 인터페이스 구현체(AccountUserDetails)를 만들어 재사용할 수 있다. 단점 - 새 클래스(AccountUserDetails)가 생겨 복잡도가 증가할 수 있다. 구현방법 기존코드 Security에서 제공하는 LoginHandler. Security 패키지에 있는 코드는 건드릴 수 없다고 가정한다!!..

Computer Science 2022.08.14

Prototype Pattern | 프로토타입 패턴

목차 어떤 상황에서 쓰일까? DB에서 데이터를 읽어와 인스턴스를 생성해야 하는 경우, 또는 네트워크를 거쳐 인스턴스를 생성해야 하는 경우는 시간도 오래걸리고 리소스도 많이 소모하게된다. 기존에 이미 DB에서 데이터를 가져온 인스턴스가 있다면 해당 인스턴스를 복사하고, 값만 조금 수정해서 사용해도 되지 않을까?! 프로토타입 패턴이란? 기존 인스턴스를 복제하여 새로운 인스턴스를 만드는 패턴이다. 기존의 객체를 응용해서 새로운 인스턴스를 만들 때 활용한다 장점 - 복잡한 객체 만드는 과정을 숨길 수 있다. - 인스턴스를 만드는 것보다 효율적일 수 있다. 단점 - 순환참조가 있는 경우, 복제과정 자체가 복잡할 수 있다. 구현방법 기존코드 GithubRepository repository = new GithubR..

Computer Science 2022.08.14

Abstract Factory | 추상 팩토리 패턴

목차 어떤 상황에서 쓰일까? 팩토리 메서드 패턴에서 Ship예제를 살펴보았다. Ship에 Anchor와 Wheel 부품을 추가하려고한다 이때, Anchor와 Wheel은 서로 짝지어지는 부품이다! Anchor - Wheel / AnchorPro - WheelPro / AnchorV2 - WheelV2 로 짝지어져서 추가되어야한다 기존 코드의 변경을 최소화하여 부품을 추가하고 수정할 수 있는 방법은 없을까? 추상 팩토리 패턴이란? 여러 관련있는 객체를 만들어주는 인터페이스를 만드는 패턴이다 팩토리 메서드 패턴과 유사하지만, 구체적으로 어떤 클래스의 인스턴스를 사용하는지 감출 수 있고 서로 유사한 객체가 조합되어야하는 경우 팩토리를 인터페이스화 하여 WhiteAnchor - BlackWheel의 조합을 방지..

Computer Science 2022.08.14

Factory Method Pattern | 팩토리 메서드 패턴

목차 어떤 상황에서 쓰일까? 하얀배는 하얀색깔에, 하얀마크에, whiteship이라는 이름을 가지고있다. 검정배는 검정색깔에, 검정마크에, blackship이라는 이름을 가지고있다. 노란배는 하얀배, 검정배와 동일한 작업에 내용물만 바꾸어 만들 수 있다. 배를 만드는 코드가 if문으로 분기처리 되어있으면 초록배를 만들어야할 경우 분기처리가 4개나 이루어지게되어 깔끔한 코드가 아닐것이고, 계속 코드를 수정해야하니 확장에 유연하지도 않게된다. 배의 공통적인 color, mark, name을 지정할 수 있도록 팩토리를 지정하고, 팩토리로부터 하얀배, 검정배, 노란배를 만들 수 있도록 하면 어떨까?? 팩토리 메서드 패턴이란? 구체적으로 어떤 인스턴스를 만들지는 서브 클래스가 정하게하는 패턴이다 장점 - 확장에 ..

Computer Science 2022.07.29
반응형