디자인 패턴5 [디자인 패턴] 장식자 패턴(Decorator Pattern) 장식자 패턴(Decorator Pattern)이란? 객체에 동적으로 새로운 행위를 추가할 수 있도록 해주는 구조 패턴이다. 클래스의 책임을 실행 시간에 코드를 수정하지 않고 바꾸고 싶을 때 사용한다. 전략 패턴도 이 기능이 가능하다. 전략 패턴은 전략 객체를 바꿔 실행시간에 확장한다. 장식자 패턴은 한 객체를 다른 객체로 포장하여 책임을 추가/변경한다 장식한 개체는 여전히 원래 객체와 같은 타입이다. -> is-a 한 객체를 여러 번 포장할 수 있고, 보통 포장하는 순서가 중요하지 않다. 포장하는 순서가 중요할 시 제한을 따로 둬야한다. is-a와 has-a를 모두 사용한다. has-a(포함 관계)를 이용해 책임을 추가/변경한다. 사용하는 이유 위와 같은 주문 시스템이 있다고 하자. 주 목적은 가격을 계.. 디자인 패턴/Design Pattern 2022. 10. 14. [디자인 패턴] 관찰자 패턴(Observer 패턴) 관찰자 패턴(Observer 패턴)이란? 객체 사이에 관계가 이루어져 있을 때, 한 객체가 바뀌는 것을 계속 확인하고 있는 것이 아니라 상태가 변화됐을 때 그에 의존하는 객체에게 알려주는 패턴이다. 즉, 관찰하는 객체가 능동적으로 관찰하는 것이 아닌 관찰 대상으로부터 어떤 사건이 발생하였을 때 수동적으로 통보해주길 기다리는 것이다. 사용하는 이유 예를 들어보자. 기상청이 있을 때 시민들이 기상청에서 새로운 측정이 있는지를 계속 관찰하고 있는 것은 비효율적이다. 기상청에서 새로운 측정을 했을 때, "시민들에게 이러한 측정이 있었다!"라고 알려주는 것이 효율적이다. 위와 같이 WeatherData 클래스가 있을 때 온도, 습도, 기압 메서드는 계속해서 새로운 정보를 준다고 하자. 이제 measurements.. 디자인 패턴/Design Pattern 2022. 10. 11. [디자인 패턴] 전략 패턴(Strategy Pattern) 전략 패턴(Strategy Pattern) 알고리즘 군을 정의하고 캡슐화해주며, 서로 언제든지 바꿀 수 있도록 해주는 방법이다. 즉, 객체가 해야 하는 행위들을 각각 전략으로 만든 후, 동적으로 행위의 수정이 필요한 경우 전략을 바꿔주는 것만으로 수정하는 패턴이다. 왜 사용하는가? 예시를 들고, 이를 통해 전략 패턴을 왜 사용하는지 알아보자. 이처럼 Duck 클래스가 있다고 하자. 이 오리 클래스 안에는 quack 메서드와 swim 메서드, display 메서드가 있다. 이 Duck 클래스를 상속받는 MallardDuck과 RubberDuck 클래스 또한 울음소리를 낼 수 있고, 수영을 할 수 있다. 만약 여기서 Duck 클래스에 fly 메소드를 추가시킨다면 어떨까? RubberDuck 클래스는 고무오리.. 디자인 패턴/Design Pattern 2022. 10. 10. 객체지향 프로그래밍2 SOLID 객체지향 설계 원리 중 가장 중요한 5가지가 있는데, 이 5가지를 합쳐 SOLID라고 한다. Single Reponsibility Principle: 클래스의 응집성이 높아야 한다. Open-Closed Principle: 코드 수정없이 확장이 가능해야 한다. Liskov Substitution Principle: 상위 타입은 항상 하위 타입으로 교체가 가능해야 한다. Interface Segregation Principle: 필요없는 것을 구현하도록 강요하지 않아야 한다. 즉, interface의 덩치가 작아야 한다. Dependency Inversion Principle: 클래스는 구체적 클래스 대신에 상위 추상 타입이나 interface에 의존해야 한다. SRP(Single Reponsi.. 디자인 패턴/객체지향 프로그래밍 2022. 10. 4. 객체지향 프로그래밍1 객체 간 관계 vs 클래스 간 관계 하나의 프로그램을 개발할 때 여러 종류의 객체를 사용한다. 객체는 보통 독립적으로 동작하지 않으며, 다른 객체와 다양한 관계를 맺는다. 객체 간 관계는 보통 동적 관계이기에 프로그램이 실행되는 동안 바뀔 수 있다. 객체 간 관계는 크게 두 개의 관계로 구분된다. 사용 관계(use-a) -> 논리적 관계 포함 관계(has-a) -> 물리적 관계(구현 형태에 의해 결정된다.) 한 객체가 다른 객체를 멤버 변수로 유지하는 경우 논리적으로 전체-부분 관계를 나타내기 위해 주로 사용한다. 이번에는 클래스 간 관계를 보자. 클래스 간 관계는 객체 간 관계와는 달리 정적이다. 따라서 코드를 수정하지 않는 이상 관계가 변하지 않고 고정된다. 클래스 간 관계 또한 두 가지의 종류가 있.. 디자인 패턴/객체지향 프로그래밍 2022. 10. 4. 이전 1 다음 728x90