Web 개발/디자인 패턴
-
팩토리 메소드(Factory Method)패턴2Web 개발/디자인 패턴 2023. 6. 25. 15:37
Client.class public class Client { public static void main(String[] args) { Client client = new Client(); Ship whiteship = ShipFactory.orderShip("Whiteship", "study1@mail.com"); System.out.println(whiteship); Ship blackship = ShipFactory.orderShip("Blackship", "study2@mail.com"); System.out.println(blackship); } } Client.class는 Factory를 사용하는 코드이다. Factory 패턴을 적용하지 않는 ShipFactory 클래스에서 orderShip(..
-
팩토리 메소드(Factory Method)패턴1Web 개발/디자인 패턴 2023. 6. 25. 12:57
Factory Method 시나리오 팩토리 메소드 패턴이 해결하려는 문제는 어떤 인스턴스를 생성하는 책임을 구체적인 클래스가 아니 추상적인 인터페이스의 메서드로 감싸는 것이다. 어떤 배를 만드는 공장이 있다고 가정할 때 그 공장은 고잉메리호라는 배 딱 한 종류만을 만들었다. 근데 사업이 잘되어 추후에 써니호라는 것도 만들게 되었다. 처음에는 고잉메리호만 만들었으므로 ShipFactory라는 클래스안에 orderShip이라는 메서드가 있다고 가정한다 해당 메서드는 당연히 static 메서드여도 되고 인스터스 메서드여도 된다. 해당 메서드는 Static 메서드라고 가정을 한다. 그래서 orderShip이라는 static메서드에 고잉메리호 라는 배를 만들어 주었다. 당연히 해당 메소드에는 배를 만드는 과정이 ..
-
싱클톤(Singleton)패턴 구현2Web 개발/디자인 패턴 2023. 6. 17. 13:19
싱글톤 패턴 구현 방법1 1.private 생성자에 static 메서드 public static Settings getInstance(){ if(instance == null){ instance = new Settings(); } return instance; } 해당 어플리케이션에 A쓰레드와 B쓰레드가 있다고 가정했을때 A쓰레드가 위코드의 if문을 평가해서 true가 나왔다고 가정했을 때 A쓰레드가 if문을 통과해 괄호안에 진입한 순간("instance"변수에 Settings 인스턴스를 생성하여 대입하기 직전) B쓰레드도 A쓰레드가 Settings 인스턴스를 만들기 직전 if문을 평가하고 if문 안으로 들어 올 수 있다. 그럼 결과 적으로 A쓰레드도 new Setting()를 실행할 것이고, B쓰레드도..
-
싱글톤(Singleton)패턴1Web 개발/디자인 패턴 2023. 6. 17. 11:47
싱글톤 패턴 인스턴스를 오직 한개만 제공하는 클래스 시스템 런타임, 환경세팅에 대한 정보 등, 인스턴스가 여러개 일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한개만 만들어 제공하는 클래스가 필요하다. private한 생성자와 static한 메서드를 이용한 구현 Settings.class public class Settings{ } App.class public class App{ public static void mian(String[] args){ Settings setting = new Settings(); Settings setting1 = new Settings(); } } App이라는 class가 있고, Settings라는 class가 있다. 이때 App class에서 Settin..
-
디자인 원칙 - 구현이 아닌 인터페이스에 대해 프로그래밍Web 개발/디자인 패턴 2022. 12. 21. 19:16
구현이 아닌 인터페이스에 대해 프로그래밍 구현이 아닌 인터페이스에 대해 프로그래밍하라, 또 구상 클래스에 의존하는 대신 추상화에 의존하라 기존의 코드를 망가뜨리지 않고 쉽게 확장할 수 있다면 그 디자인은 충분히 유연하다고 말할 수 있다. 만약 두 클래스가 서로 같이 작업하도록 만들려면 둘 중 하나를 다른 클래스에 의존하게 만드는 것으로 시작할 수 있다. 그런데 객체간의 공동 작업을 만드는 더 유연한 방법이있다. 한 객체가 다른 객체에서 정확히 무엇을 필요로하는지 확인하세요 어떤 메서드들을 실행하나요? 새 인터페이스 또는 추상 클래스에서 이러한 메서드들을 설명하세요. 다른 객체에 의존하는 (dependency인) 클래스가 아닌 인터페이스를 구현하도록 하세요. 이제 두 클래스를 구상 클래스가 아닌 이 인터페..
-
디자인 원칙 - 변화하는 내용을 캡슐화Web 개발/디자인 패턴 2022. 12. 20. 11:49
소프트웨어 설계에는 몇 가지 보편적인 원칙들이 있다. 변화하는 내용을 캡슐화 당신의 프로젝트에서 변경되는 부분들을 식별한 후 변하지 않는 부분들과 구분하세요. 이 원칙의 가장 큰 목적은 변화로 인해 발생하는 결과를 최소화하는 것이다. 독립된 모듈에서 변경되는 프로그램의 일부를 따로 떼어내면 코드의 나머지 부분들을 역효과로부터 보호할 수 있을 뿐 만아니라 변경 사항들을 구현하고 테스트하는 데 걸리는 시간을 줄일 수 있다. 매서드 수준에서 의 캡슐화 전자 상거래 웹사이트를 개발하고 있다고 가정해보자 코드 어딘가 세금을 포함한 주문의 총계를 계산하는 getOrderTotal메서드가 있다. 이때 쉽게 미래에 세금과 관련한 코드를 변경해야 할지도 모른다는 것을 예측할 수 있다. 왜냐면 세율은 거주하는 국가,주,도..
-
디자인패턴 - 소개Web 개발/디자인 패턴 2022. 12. 19. 15:33
디자인패턴 분류 기분 복잡성 상세도 설계중인 시스템에 적용 범위 의도 목적 가장 기본적인 하위 수준 패턴을 이디엄이라고 한다. 일반적으로 이디엄은 하나의 프로그래밍 언어에만 해당한다. 가장 보편적인 상위 수준 패턴은 아키텍쳐 패턴이다. 개발자들은 거의 모든 언어로 이러한 패턴을 구현할 수 있다. 아키텍쳐 패턴은 애플리케이션 전체구조(아키텍처)를 설계하는데 사용할 수 있다. 디자인 패턴의 주요 세가지 그룹 생성 패턴 : 기존 코드를 재활요하고 유연선을 증가시키는 객체 생성 매커니즘을 제공한다. 구조 패턴 : 구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명한다. 행동 패턴: 객체 간의 효과적인 의사소통과 책임 할당을 처리한다. 디자인 패턴은 객체지향 설계의 일반적인 ..
-
객체 간의 관계(의존성,연관관계....)Web 개발/디자인 패턴 2022. 12. 19. 14:55
객체 간의 관계 상속 및 구현 외에도 객체들 사이에는 다른 유형의 관계들이 있다. *STL(Stabdard Template Library,표준 템플릿 라이브러리): 개체들을 보관하기 위한 다양한 자료구조와 이들 자료구조에 보관된 개체들을 반복적으로 순회할 수 있게 해 주는 반복자, 사용자에서 정의한 코드를 입력 인자로 전달받아 처리할 수 있게 추상화한 함수 개체, 다양한 문제 해결 방법이 구현된 함수들로 구성된 알고리즘 등으로 구성되어 있다. *컴포넌트: 소프트웨어에서도 단자의 규격 같은 장치가 필요하다. 객체지향 언어에서는 이러한 장치를 인터페이스(Interface)로 제공해준다. 인터페이스는 사용자에게 해당 소프트웨어를 사용하기 위한 메소드(=장치)를 공개하고, 규격화된 메소드 환경에서 소프트웨어를 ..