✨ Java/디자인 패턴(Design pattern)5 자바(JAVA) - 전략 패턴(Strategy Pattern) - 2 자바(JAVA) - 전략 패턴(Strategy Pattern) 전략 패턴 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고, 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법. HTML 삽입 미리보기할 수 없는 소스 Character 클래 bright-landscape.tistory.com 전략 패턴은 정말 많이 쓰이면서도 기초적인 디자인 패턴 중 하나이다. 그래서 또하나 예를 들어 만들어보았다. 이전 게시글에서는 한 파일로 된 코드만 짰기 때문에 다시 한번 보았을 때 이해가 가지 않을 수 있기 때문에, 하나하나 순서를 통해 구현해보았다. 전략 패턴이란? 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요.. 2023. 8. 20. 자바(JAVA) - 팩토리 패턴(Factory) 팩토리 패턴이란? 객체를 생성하는 인터페이스는 미리 정의하되, 인스턴스를 만들 클래스의 결정은 서브 클래스 쪽에서 내리는 패턴. 즉, 여러 개의 서브클래스를 가진 슈퍼 클래스가 있을 때 인풋에 따라 하나의 자식 클래스의 인스턴스를 리턴해주는 방식 1. 인터페이스 정의하기 2. 여러 클래스 구현하기 3. 쥬스 공장 클래스 생성하기 4. 메인 클래스에서 쥬스공장 생성후 찍어보기 결과창 장점 유연성과 확장성 - 새 제품을 추가, 변경시 기존 코드 수정하지 않아도됨. 클라이언트 코드 분리 중복코드 제거 - 객체 생성 코드가 여러 곳에서 중복되지 않도록 한다면, 객체 생성에 불필요한 중복코드 제거 단점 복잡성 증가 - 이 패턴은 추가적인 클래스를 도입하므로, 코드의 복잡성이 증가할 수 있다. 추상화 비용 많은 클래스 2023. 8. 20. 자바(JAVA) - 템플릿 메소드 패턴(Template Method Pattern) 템플릿 메소드 패턴이란? 객체지향 프로그래밍에서 사용되는 설계 기법 중 하나로, 상위 수준의 알고리즘을 정의하고 하위 클래스에서 알고리즘의 일부 단계를 구체화할 수 있도록 하는 것이 목적. 템플릿 메소드 패턴은 추상 클래스를 사용한다. 부모 클래스에게 추상화를 시켜 이를 상속받은 자식 클래스에서 구체화하면서 완성할 수 있다. 즉, 변하지 않는 기능(템플릿)은 상위 클래스에 만들고, 자주 변경되며 확장할 기능은 하위 클래스에서 만들도록 하여, 상위의 메소드 실행 동작 순서는 고정하며 세부 실행 내용은 다양화 될 수 있는 경우에 사용. 코드의 중복을 없애기 위함. Animal.class ( 부모 클래스를 추상 클래스로 만들어준다.) 부모 클래스역할을 하는 Animal 클래스에 하나 이상의 추상 메소드를 만들.. 2023. 7. 26. 자바(JAVA) - 전략 패턴(Strategy Pattern) 전략 패턴 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고, 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법. HTML 삽입 미리보기할 수 없는 소스 Character 클래스가 Attack 인터페이스를 통해 공격 전략을 갖고있고, changeWeapon 메서드를 통해 동적으로 공격 방식을 변경할 수 있다. 전략패턴의 핵심은 클라이언트(Character 클래스)와 전략(Attack 인터페이스와 이를 구현한 Gun, Sord 클래스)를 분리하여 클라이언트가 변경 없이도 새로운 전략을 추가하거나 교체할 수 있도록 하는 것이다. 장점 기존 컨텍스트를 변경하지 않고, 새로운 전략을 도입함으로써 "개방-폐쇄 원칙"을 만족한다. 유연성과 확장성이 증가 재사용성 증가 개방-폐쇄 원칙(Ope.. 2023. 7. 13. 자바(JAVA) - 싱글톤 패턴(Singleton) 싱글톤 패턴 생성자를 private 접근 제한해서 외부에서 new 연산자로 생성자를 호출할 수 없도록 막는 것. 즉, 하나의 클래스에 하나의 객체 인스턴스가 오직 1개만 생성되는 패턴이다. Singleton 클래스 위 코드는 싱글톤 패턴을 사용하는 예제 코드이다. Singleton 클래스의 생성자가 private로 선언되어 외부에서 직접 인스턴스를 생성하는 걸 방지한다. 대신, 정적 메서드인 getInstance()를 통해 인스턴스를 얻을 수 있다. NoSingleton 클래스 예시로 객체 생성시 메모리 영역에 대해서만 알아볼 것이라 비워두었다. Main 클래스 위 코드를 보면, 싱글톤을 이용하여 생성된 객체는 같은 주소를 가지는 반면에 싱글톤을 쓰지 않고 new를 통해 새로 생성된 객체들은 각각 주소값.. 2023. 7. 13. 이전 1 다음