본문 바로가기

전체 글22

팩토리 메서드 패턴 (Factory Method), 추상 팩토리 패턴 (Abstract Factory) 팩토리 메서드 패턴 (Factory Methos) - 정의 - 객체를 생성하기 위한 인터페이스를 정의합니다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정합니다. (구글 이미지를 참고하였습니다) 객체 생성을 담당하는 부분은 factoryMethod이 부분입니다 서브클래스에서 팩토리 메서드를 정의하여 팩토리 메서드 호출로 객체를 반환합니다. Allen Holub은 "실용주의 디자인 패턴"에서 Factory Method 패턴은 기반 클래스에 알려지지 않은 구체 클래스를 생성하는 Template Method라 할 수 있다. Factory Method의 반환 타입은 생성되어 반환되는 객체가 구현하고 있는 인터페이스이다. Factory Method는 또한 기반 클래스 코드에 구체 클래스의 이름을 감추는 방.. 2021. 2. 3.
데코레이터 패턴 (Decorator) - 정의 - 객체에 추가 요소를 동적으로 더할 수 있다. 데코레이터 패턴을 사용 시 서브클래스를 만드는 경우에 비해 훨씬 유연하게 기능을 확장할 수 있다. 예시 코드 예시 구현 코드입니다 public abstract class Beverage { String description = "제목없음"; public String getDescription() { return description; } public abstract double cost(); } public abstract class CondimentDecorator extends Beverage{ public abstract String getDescription(); } public class Espresso extends Beverage{ p.. 2021. 2. 2.
옵저버 패턴 (Observer) - 정의 - 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다 옵저버 패턴의 경우 신문구독을 생각하면 이해하기 쉽습니다 신문이 발행(객체의 정보 변경)되면 그 정보가 다른 객체들 에게 전달되는 구조라 생각하시면 됩니다 자바에서의 옵저버 패턴을 이용하지 않고 직접 옵저버패턴을 구현하는 다이어그램입니다 ; 아래는 예시 코드입니다 인터페이스 코드들입니다 public interface Subject { //옵저버를 등록하고 제거하는 역할의 메서드 public void registerObserver(ObserverH o); public void removeObserver(ObserverH o); //주제 객체의 상태가 변경되었을때.. 2021. 1. 29.
스트래티지 패턴 (Strategy) -정의- 알고리즘(이하 로직)을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지 패턴을 활용하면 로직을 사용하는 클라이언트와는 독립적으로 로직을 변경할 수 있다. 예시(해당 예시는 헤드퍼스트 디자인 패턴 책에 나온 예시이다) 무기를 인터페이스로 만든다 그 후 무기를 쓰는 구체적 행위를 구현 클래스에서 따로 정의한다 Character추상클래스에서는 각각의 직업이 상속받는다 기사는 검을 쓰지만 활을 쓸수도 있습니다 무기의 교체가 일어날 수 있기 때문에 모든 기사 클래스에서 모든 무기의 사용법을 구현하는 것은 비효율적입니다 이렇게 특정하게 변경을 해야 할 경우 단지 인터페이스의 구현 클래스를 새로 끼우는 방식으로 수정이 가능한 것이 이 패턴의 큰 장점입니다 예시 코드입니다 //먼저 캐.. 2021. 1. 28.
학습계획 및 책정리 현재까지 구입하고 읽은 책들과 앞으로 구입예정인 책들을 정리하는 포스팅입니다 앞으로 공부 계획은 1. 알고리즘 및 자료구조 매일 조금씩 따로 할예정입니다 지금 공부중인 부분이지만 몇주 바짝 열심히한다해서 따라잡을만한 부분은 아니더군요 -> 교재 DO it 자료구조와 함께 배우는 알고리즘 입문 자바편 (구입완료) 2. 스프링 복습 스프링관련 책을 읽으며 복습하는 단계 스프링관련 개념 및 이론부분학습이 목표라 포스팅하고 같이 할생각입니다 -> 교재 토비의 스프링, 스프링5프로그래밍입문(최범균저) (구입완료) 3. 디자인패턴 헤드퍼스트디자인패턴의 1회독은 현재 마친상태이나 머리속에서 좀더 완벽하게 암기및 개념정리를 하고싶어 추가로 포스팅하며 공부할 예정입니다 -> 교재 head first design patt.. 2021. 1. 26.
IntelliJ에서 webapp mvc패턴프로젝트만들기 이번 개인 포폴을 만들면서 프로젝트를 생성해서 진행하는 건 인텔리제이로는 처음이었다 인텔리제이의 mvc패턴시 폴더구조가 좀 달라서 익숙한 webapp프로젝트로 만들고 싶어서 알아보던 중 방법을 찾게 됐다 maven에 webapp폴더 구조 프로젝트 생성 시 참고 바람 먼저 프로젝트 생성에 들어간다 그 후 archetype에서 생성 이란 체크박스를 누른후 아래서 webapp를 누른다 다음과 같은 그림이다 그후 다음을 눌러 프로젝트 생성해주면 끝! webapp가 잘 인식되어있다 java폴더가 안 생기는데 이건 간단하게 해결 가능하다 생성 후 경로를 눌러주면 자바와 리소스 경로를 선택하여 만들 수 있게 해 준다 이후 눌러서 생성하면 자바와 리소스 폴더 역시 잘 만들어졌다 이상입니다 2021. 1. 26.
GOF 디자인 패턴 한줄 정리! 그동안 공부하며 했던 디자인 패턴을 일단 간략 요약정리해볼까 합니다 물론 각 디자인 패턴을 최대한 간단히 설명한 것이라 여기에 간단하게 정리 후 자세한 내용은 따로 포스팅할 예정입니다. 모든 내용은 제가 공부하며 정리한 부분이기 때문에 오류가 있을 수 있습니다 틀린 사항 있을 시 댓글에 수정 적어주시면 감사하겠습니다. 1. 스트래티지 패턴(Strategy) (link) 일명 전략 패턴 알고리즘을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 알고리즘을 사용하는 클라이언트와 독립적으로 로직을 변경이 가능하다. 2. 스테이트 패턴 (State) 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 정의할 수 있다 클래스가 바뀌는 효과를 낸다 (실제로 클래스가 바뀌진 않는다 스트래티지 패턴하고의 가.. 2021. 1. 21.
Spring Triangle Spring Triangle 1. 제어 역행 IOC - 애플리케이션의 느슨한 결합을 만든다 - 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어 필요에 따라 스프링에서 사용자코드를 호출한다 └ 의존성 주입 DI - 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다 의존성 주입엔 3가지 방법이 있다 1. 필드 주입 2. 생성자 주입 3. setter 주입 @Autowired 의존성을 주입할때 쓰는 어노테이션이다 (스프링 4.3이상부터는 생성자로 의존성주입시 @Autowired을 생략할수있다) 2. 관점 지향 프로그래밍 AOP - 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화한다 (여기서 모듈화란 어떤 공통된 로직이나 기능을 .. 2021. 1. 17.
객체지향의 특징 4가지 객체지향 - 추상화 - 구체적인 사물들의 공통적인 특징을 파악에서 이룬 하나의 개념또는 집합으로 다루는 수단 (예. 토끼, 개, 고양이는 새끼를 낳는 포유류라는 공통적인 특징을 가지고 있음.) - 일반화 - 여러 개체들이 가진 공통된 특성을 부각시켜 하나의 개념이나 법칙으로 성립되는 과정 객체지향 프로그래밍 관점에서는 상속관계라고도 본다. - 캡슐화 - 객체만이 자신이 어떻게 작동되는지를 알고 있으며, 외부에서는 알 수 없는 방식. 낮은 결합도를 유지할 수 있도록 해주는 객체지향 설계원리 - 다형성 - 서로 다른 클래스의 객체가 같은 메세지를 받았을 때, 각자의 방식으로 동작하는 능력. (예. TV리모컨은 TV를 켜지만, 에어컨 리모컨은 에어컨을 킨다.) 2021. 1. 16.
728x90