본문 바로가기
728x90
반응형

Programming/OOP12

[Design Pattern] Factory Method Pattern, 팩토리 메서드 패턴 DIP(Dependency Inversion Principle), 의존성 역전 원칙 변경에 강한 설계를 하기 위한 방법 중 잘 알려진 SOLID 원칙의 하나로 의존 흐름을 역전시키는 방법으로, 육각형 아키텍처의 포트-어댑터도 이 방법으로 구현할 수 있다. UploadService 의 upload 메서드에서 S3Storage 인스턴스를 생성하고 있기 때문에 UploadService 는 S3Storage 에 의존하고 있으며 강하게 결합하고 있다. S3Storage 는 물리적으로 파일을 업로드하는 인프라적인 영역이므로 포트-어댑터에서 외부 영역으로 볼 수 있는데 서비스 로직이라는 핵심 영역이 외부 영역에 의존하고 있는 형태이다. 이 둘의 관계를 느슨하게 만들기 위해서 의존성 역전이라는 방법을 사용한다. Upl.. 2022. 4. 25.
[Design Pattern] Decorator Pattern, 데코레이터 패턴 OCP(Open-Closed Principle), 개방-폐쇄 원칙 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다. 기존 코드의 변경 없이 기능을 확장해야 한다는 의미인데, 이 원칙을 지키기 위해서 기존 클래스를 상속받아 사용하거나, 의존 관계를 통한 구성을 사용해야 한다. OCP 의 단골인 DB 커넥션 부분을 살펴보자. 어느 날 갑자기 MySQL 에 심각한 버그가 발견되어 다른 DB 로 교체해야 한다고 하면, MySqlCon 을 사용해서 커넥션을 얻어오는 Repository 클래스의 생성자를 수정해야 한다. Repository 클래스가 MysqlCon 구상 클래스에 강하게 결합되어 있기 때문이다. 이런 코드 변경 없이 확장을 하기 위해서는 슈퍼 타입을 상속 또는 구현한 서브 타입의 인스턴스는 슈퍼.. 2022. 4. 21.
[Design Pattern] Observer Pattern, 옵저버 패턴 구현보다는 인터페이스에 맞춰서 코딩 AObserver 와 BObserver 는 실체를 가지는 클래스로 구현되었다고 할 수 있다. 구현된 클래스를 직접 사용하는 것, 즉 구현에 맞춰서 코딩하는 것은 무엇이 문제일까? class Subject { private final AObserver aObserver; private final BObserver bObserver; public Subject(AObserver aObserver, BObserver bObserver) { this.aObserver = aObserver; this.bObserver = bObserver; } public void notify(string message) { aObserver.update(message); bObserver.u.. 2022. 4. 19.
[Design Pattern] Strategy Pattern, 전략 패턴 헤드퍼스트 디자인 패턴 개정판이 출판되었다. 안 살 이유는 없지. 바로 사서 다시 처음부터 읽어보고 있는데, 이번에는 블로그에 정리를 좀 해볼까 한다. 확장(extends) 과 구성(composition) 상속이라는 말을 좋아하지 않아서 확장이라고 했다. 추상화된 객체를 조금 더 구체적인 객체로 확장해 나가는 것이 확장이다. 예를 들어 '마법사' 객체를 확장해서 '불 마법사', '물 마법사' 등의 객체를 만들 수 있고, '불 마법사' 객체를 확장해서 '공격형 불 마법사', '방어형 불 마법사' 등의 객체를 만들 수 있다. '마법사'보다는 '불 마법사'가 더 구체적이고, '불 마법사'보다는 '공격형 불 마법사'가 더 구체적이다. 구성은 의존관계를 맺는 것이라고 생각하면 된다. 예를 들어 '자동차'라는 객체.. 2022. 4. 18.
SOLID 원칙 참고도서 스프링 입문을 위한 자바 객체 지향의 원리와 이해국내도서저자 : 김종민출판 : 위키북스 2015.04.08상세보기 1. SRP(Single Responsibility Principle, 단일 책임 원칙)"어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다." - 로버트 C. 마틴 하나의 클래스가 수 많은 역할과 책임을 맡아서 수행하고 있고, 그런 클래스에 의존하는 다양한 클래스가 있다고 가정하면,-> 의존하고 있는 클래스 중 하나에 변화가 생기고 -> 수 많은 역할과 책임을 맡고 있는 클래스에 변화가 생기고-> 의존하고 있는 다양한 클래스들에게 영향이 미치게 된다. 남자 클래스가 여자친구에 대해 남자친구로서의 역할과 책임, 직장상사에 대해 사원으로서의 역할과 책임을 가지고 있다고 가정하면.. 2017. 8. 17.
OOP(Object Oriented Programming) 기본 개념 참고 도서스프링 입문을 위한 자바 객체 지향의 원리와 이해국내도서저자 : 김종민출판 : 위키북스 2015.04.08상세보기 1. 클래스, 객체, 인스턴스(Class, Object, Instance)객체 지향 프로그래밍, 말 그대로 객체를 지향해서(이용해서) 프로그램을 짜는 것을 의미한다.그럼 당연히 이 객체란 놈이 무엇인지 생각해 봐야 한다.객체는 세상에 존재하는 물체를 의미한다. 생물도 가능하고 무생물도 가능하다.프로그램의 세계에서 무생물은 현실세계와 달리 생물처럼 생명을 가지고 활동한다. 의인화라고 볼 수 있다.현실세계에서는 사람이 밥솥을 이용해서 밥을 한다고 표현하지만,프로그램 세계에서는 사람이 밥솥에게 밥을 하라고 메시지를 보내고, 그 메세지를 받은 밥솥이 밥을 한다.밥솥이 살아있는 생물처럼 밥을.. 2017. 8. 4.
728x90
반응형