Computer Theory/Design partterns 5

Computer Theory/Design partterns
디자인 패턴과 SOLID 원칙

최근 객체 지향 프로그래밍을 자주 하게 되면서 해당 로직이 어떻게 더 깔끔하게 작성할지, 또는 코드의 유지보수성이 잘 되었으면 하는 생각에 여러 주제를 찾아보다가 디자인 패턴을 접하게 되었다. 따라서 "헤드 퍼스트 디자인 패턴"이라는 책과 여러 웹에 뿌려져 있는 지식을 통해 디자인 패턴을 학습하고, 이를 활용해 보고자 한다. 디자인 패턴디자인 패턴이란 객체 지향 프로그래밍 설계를 할 때 자주 발생되는 문제를 피하기 위해 사용하는 패턴이다. 소프트웨어 설계에 있어 공통적인 문제들에 대한 표준적인 해법과 작명법을 제안하여, 알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, 특정한 상황에서 구조적인 문제를 해결하는 방식이다. "효율적인 코드를 만들기 위한 방법론"이라고 말하기도 한다.  ..

Computer Theory/Design partterns
팩토리 패턴

팩토리 패턴 간단하게 말하자면 객체를 생성하는 부분을 따로 빼서 처리하는 패턴이다. 팩토리 페턴은 2가지가 존재한다. 추상 팩토리 패턴 : 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성한다. 팩토리 메소드 패턴 : 객체를 생성하기 위한 인터페이스를 정의하는데 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정한다. 상황 피자 가게에서 피자의 종류를 고르고 그에 맞는 피자를 만드는 코드를 만든다고 가정한다. Pizza orderPizza(String type) { Pizza pizza; if (type.equals("cheese")) { pizza = new CheesePizza(); } elseif(type.equals("greek")) { pizza = ..

Computer Theory/Design partterns
데코레이터 패턴

데코레이터 패턴 (Decorator pattern) 객체에 추가적인 요건을 동적으로 첨가하는 패턴이다. 데코레이터는 서브 클래스를 만드는 것을 통해서 기능을 유연하게 확장 할 수 있는 방법을 제공하는 패턴이다. 상황 카페에서 커피 사업을 시작하여 주문 시스템을 도입했다고 가정한다. 카페에서 마실 음료에서는 스팀우유, 모카, 두유, 등등 기타 추가 첨가물이 필요할 수 있다. 하지만 각각의 첨가물을 추가 하게 된다면 커피의 가격이 올라가고 주문 시스템에서도 해당 첨가물에 대한 부분을 모두 고려하여야 한다. 이런 부분을 고려하여, 첨가물을 옵션 여부로 나타내는 인스턴스 변수로 넣어서 코드를 작성하게 된다면 아래와 같이 작성 할 수 있다. 이를 통해 슈퍼클래스에서 구현한 cost을 호출하여 추가가격을 구한다면 ..

Computer Theory/Design partterns
옵저버 패턴

옵저버 패턴 (Observer pattern) 옵저버 패턴이란 객체의 상태 변화를 관찰하는 관찰자들 즉 옵서버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 알려주는 패턴을 의미한다. 쉽게 말하자면 어떤 객체의 상태가 변할 때 그와 연관된 객체들에게 알림을 보내는 디자인 패턴을 의미한다. 상황 Weather 객체로 현재 조건, 기상 통계, 기상 예보, 이렇게 3가지 항목을 디스플레이 장비에서 갱신해 가면서 보여주는 애플리케이션을 제작하려고 한다. 아래는 온도, 습도, 기압의 값을 새로 받을 때마다 호출되는 measurementsChanged() 메서드이다. 🖥️ WatherData.java public class WeatherData { publi..

Computer Theory/Design partterns
전략 패턴

전략 패턴 (Strategy Parttern) 전략 패턴이란 객체들이 할 수 있는 행위에 대해 전략 클래스를 생성하고 유사한 행위들을 캡슐화하는 인터페이스를 정의하여 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략만 바꿔 행위를 유연하게 확장하는 방법을 의미한다. 헤드 퍼스트 디자인 패턴 책에서는 이를 오리게임에 비유하여 설명한다. 상황 모든 오리가 "꽥" 소리를 내고 수영을 할 수 있기에 슈퍼클래스로 작성한다. 오리마다 생김새는 다르기 때문에 display는 오버라이드 한다. 슈퍼클래스에 fly() 기능을 추가하고 RubberDuck(고무 오리) 클래스도 추가하였다. Duck의 몇몇 서브 클래스만 날 수 있을 뿐 고무오리는 날지 못한다. 하지만 슈퍼 클래스에 fly()을 작성하..