분류 전체보기 194

[소프트웨어 아키텍처] 5. 템플릿 메소드 패턴(Template method Pattern -java)

템플릿 메소드 패턴 커멘드 패턴에서 우리는 메서드의 호출을 캡슐화 했습니다. 이번에는 서브클래스에서 언제든 필요할 때마다 알고리즘을 가져다가 사용 할 수 있도록 캡슐화 해보겠습니다. 그리고 할리우드에서 영감을 받아 만들어진 디자인 원칙도 같이 배워보도록 합시다.! 템플릿 메소드 패턴은 알고리즘의 골격을 정의 합니다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있습니다. 간단하게 말하면, 알고리즘의 템플릿(틀)을 만듭니다. 템플릿이란 그냥 메서드 입니다.(템플릿 안에는 또 다른 메서드가 존재합니다.) 좀더 구체적으로 이야기 하면 알고리즘의 정의한 메서드 입니다. 즉, 템플릿 메서드..

[소프트웨어 아키텍처] 2. 전략 패턴(Strategy Pattern -java)

전략패턴 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 사용 할 수 있게하는 패턴 입니다. 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다. 하나의 움짤에 여러가지 전략을 설정할 수 있습니다. 변하지 않는 것은 움짤, 변하는 것은 전략 입니다. 상속이 모든 문제를 해결할 수는 없습니다.(템플릿 메소드 패턴에서는 상속을 사용합니다.) 2022.10.25 - [컴퓨터 공학/0 + 소프트웨어 아키텍처] - [소프트웨어 아키텍처] 5. 템플릿 메소드 패턴(Template method Pattern -java) [소프트웨어 아키텍처] 5. 템플릿 메소드 패턴(Template method Pattern -java) 템플릿 메소드 패턴 커멘드 패턴에서 우리는 메서드의 호출을 캡슐화 했습니..

[소프트웨어 아키텍처] 6. 상태 패턴(State Pattern -java)

상태 패턴 전략 패턴과 상태 패턴을 쌍둥이다?! 전략패턴(Strategy Pattern)을 사용하면 행위(알고리즘)을 캡슐화해서 객체가 행위 자체 변경할 수 있습니다. 상태패턴(State Pattern)을 사용하면 객체의 내부 상태를 캡슐화해서 상태 변경에 따라서 객체의 행동을 바꿀 수 있습니다. 쉽게 이야기 하면, 상태 패턴은 내부 상태를 바꿈으로써 객체가 행동을 바꿀 수 있도록 한다. 다시 말하면 상태에 따라서 행동을 달리해야하는 경우에 사용하는 패턴이다. 상태를 별도의 클래스로 캡슐화한 다음 현재 상태를 나타내는 객체에게 행동을 위임하므로 내부 상태가 바뀔 때 행동이 달라지게 된다. 4강 상태를 제외하고 모든 상태가 같다..! 상태 패턴 구조 Context 해당 클래스에는 여러가지 내부 상태가 들..

[소프트웨어 아키텍처] 3. 커맨드 패턴(Command Pattern-java)

커맨드 패턴 커맨드 패턴을 사용하면 요청 내역을 객체로 캡슐화해서 객체를 서로 다른 요청 내역에 따라 매개변수화할 수 있다. 이러면 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있다. 리시버의 메서드 호출을 캡슐화 한다. 메서드 호출을 캡슐화하면 계산 과정의 부분을 결정화할 수 있기에 계산하는 코드를 호출한 객체는 그 일이 어떤 방법으로 처리되는지 신경 쓸 필요가 없다. 쉽게 이야기하면 다음과 같습니다. Command 를 통해서 리시버의 특정 메서드를 캡슐화 하고, 인보커(호출자)는 리시버에 관계 없이(Command에서 캡슐화했기 때문) Command 객체의 메서드를 호출하면 됩니다. 즉, 커맨드 패턴은 호출을 캡슐화 합니다. 위 내용을 레스토랑의 종업원, 주방장의 예시로 코드를..

[소프트웨어 아키텍처] 4. 옵저버 패턴(Observer Pattern -java)

옵저버 패턴 옵저버 패턴이란 한 객체의 상태가 변화하면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의합니다. 예를들어 정보통신대대라는 객체의 상태가 변화하면 그객체에 의존하는 병사 및 간부들에게 연락이 가고 자동으로 전달사항이 갱신되는 방식이다. 옵저버 패턴은 일련의 객체 사이에서 일대다 관계를 정의 또한, 신문 구독 매커니즘을 이해하고 있으면 옵저버 패턴을 쉽게 이해할 수 있다. 신문사를 주제(subject) 구독자를 옵저버(observer)라고 부른다고 알고 있으면 됩니다.! 주제(subject)가 상태를 저장하고 제어한다…! e.g) 행보관(subject)은 매일 아침7시에 병사들(obsever)에게 아침점호 방식을 알려..

[소프트웨어 아키텍처] 1-3) 아키텍처 패턴 스타일

2022.09.20 - [분류 전체보기] - [소프트웨어 아키텍처] 1-2) 소프트웨어 아키텍처 문서화와 평가 [소프트웨어 아키텍처] 1-2) 소프트웨어 아키텍처 문서화와 평가 2022.09.20 - [컴퓨터 공학/0 + 소프트웨어 아키텍처] - [소프트웨어 아키텍처] 1-1) 소프트웨어 아키텍처 기초지식 [소프트웨어 아키텍처] 1-1) 소프트웨어 아키텍처 기초지식 ✅ 아키텍처 기초 소프트 howisitgo1ng.tistory.com 아키텍처 패턴 스타일 왜 등장했는가??? 개발은 보통 완료된 후에도 오랜 시간 지속적으로 업그레이드되면서 향상된 서비스와 새로운 서비스를 제공해야 하는데,설계 없이 이런 유지보수, 진화의 작업을 하는 것은 장기적으로 큰 비용의 낭비를 가져오게 됩니다. 그래서 크고 복잡한 소..

[소프트웨어 아키텍처] 1-2) 소프트웨어 아키텍처 문서화와 평가

2022.09.20 - [컴퓨터 공학/0 + 소프트웨어 아키텍처] - [소프트웨어 아키텍처] 1-1) 소프트웨어 아키텍처 기초지식 [소프트웨어 아키텍처] 1-1) 소프트웨어 아키텍처 기초지식 ✅ 아키텍처 기초 소프트웨어 아키텍처를 공부하기 위해서 기초지식에 대해서 알아보자..! 💭 소프트웨어 아키텍처란? 소프트웨어 구조 또는 소프트웨어 아키텍처(software architecture)는 소프트웨 howisitgo1ng.tistory.com 지난 시간에 소프트웨어 아키텍처 기초 지식에 대해서 알아보았다. 이번에는 📚 문서화 하는 과정을 알아보자! 📚 아키텍처 문서화 🛠 아키텍처 문서는 더 좋은 설계를 만들기 위한 도구 문서화를 함으로써 얻는 이점은 다음과 같다. 구현을 시작하기 전에 중요한 설계 이슈를 발..

[소프트웨어 아키텍처] 1-1) 소프트웨어 아키텍처 기초지식

✅ 아키텍처 기초 소프트웨어 아키텍처를 공부하기 위해서 기초지식에 대해서 알아보자..! 💭 소프트웨어 아키텍처란? 소프트웨어 구조 또는 소프트웨어 아키텍처(software architecture)는 소프트웨어의 구성요소들 사이에서 유기적 관계를 표현하고 소프트웨어의 설계와 업그레이드를 통제하는 지침과 원칙이다. 소프트웨어 구조 - 위키백과, 우리 모두의 백과사전 소프트웨어의 설계는 서브시스템 수준의 덩어리화(chunking) 작업이라고 말할 수 있다. 👨‍🔧 아키텍처의 역할 시스템 구조를 확립하면서 소프트풰어 개발의 중심축 설계, 구현, 통합, 테스팅까지 통합하는 뼈대 초기 의사 결정의 핵심 컴포넌트 명백한 역할을 가지고 있고, 독립적으로 존재할 수 있는 시스템의 부분 모듈 프로그래밍 언어의 문법 구조에..

[JPA 에러 해결] Named parameter not bound: ~

[JPA] Named parameter not bound: ~ 작성한 쿼리를 테스트 하기위해 테스트 코드 작성한 것을 실행해보았다. //쿼리 public interface FaultJpaRepository extends JpaRepository { @Query(value = "select f from Fault f" + " where f.resolveTime is null" + " and (f.type =: type1 or f.type =: type2)" + " order by f.writeTime desc") List findBmsWarning(@Param("type1") int type1, @Param("type2") int type2); } @Test void findBmsWarningQueryTe..

[JPA 에러 해결] Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a ~ " 오류 해결

문제 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a ~" 신규 프로젝트를 진행하던 도중 위와 같은 오류가 발생했다.. 😮 스프링 버전 문제인가 생각해서 버전을 변경해봐도 같은 오류가 발생했다. 원인 분석 DB 예약어? 무엇인가에 홀린듯이 계속 검색을 해봤지만, Entity에 DB 예약어를 사용한 경우에 발생한 경우가 대부분이었다. 정말로 예약어 문제인지 확인하기 위해서 간단하게 Entity를 새롭게 만들어봤다. @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long..