[디자인패턴] 데코레이터 패턴(Decorator Pattern)이란 무엇인가?
2023. 3. 8. 15:46
Programming/Design Pattern
정의 데코레이터(Decorator)는 사전적으로 무언가를 꾸며준다는 의미를 가지고 있다. 이에 착안해 데코레이터 패턴의 사전적 정의를 살펴보면 다음과 같다. 객체에 추가 요소를 동적으로 더할 수 있도록 하는 패턴으로, 서브클래스를 만들 때보다 훨씬 유연하게 기능을 확장할 수 있다. 데코레이터 패턴은 Java I/O 에서 대표적으로 적용되고 있는 디자인 패턴이다. 사전적 정의가 실제 구현에서 어떻게 사용되는 것인지 와 닿기 힘들다. 이에 관련된 문제 상황과 해결 방법을 아래 문단에서 자세하게 알아보자. 문제 상황 우리는 샐러드 가게에서 사용할 전산 시스템을 만드는 상황을 가정해 보자. 만약 아래와 같이 샐러드 주문 표가 있다고 할 때, 각 샐러드 조합에 대한 클래스를 만드려면 어떻게 해야 할까? 만약 조합..
[디자인패턴] 옵저버 패턴(Observer Pattern)이란 무엇인가?
2023. 3. 8. 11:58
Programming/Design Pattern
정의 정말 많이 쓰이는 디자인 패턴 중 하나인 옵저버 패턴은 아래와 같은 정의를 가지고 있다. 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로, 일대다(one-to-many) 의존성을 정의한다. 아래의 그림과 같이, 한 Subject가 자신의 상태가 바뀌었음을 다수의 Observer 들에게 통지(Notify)하는 방식을 가지고 있는 패턴이다. 옵저버 패턴은 RxJava, Swing 라이브러리 등 많은 곳에서 활용하고 있는 디자인 패턴이다. 문제 상황 한 신문사가 있고, 이 신문사에서 출간되는 신문을 구독하는 다수의 구독자가 있는 상황을 고려해 보자. 구독자들은 신문이 배달될 때마다 바로 신문을 읽고 싶은 상황이다. 이를 위의 그림과 같이 정리하면 ..
[디자인패턴] 전략 패턴(Strategy Pattern)이란 무엇인가?
2023. 3. 7. 19:45
Programming/Design Pattern
정의 이는 다음과 같은 의미를 가지고 있다. 어떤 문제를 해결하는 알고리즘을 클래스 별로 캡슐화해서, 필요에 따라 교체 가능하도록 하여 문제 상황마다 다른 전략(Strategy)을 세울 수 있게 하는 디자인 패턴 디자인 패턴을 접하는 많은 사람들이 그러하듯, 정의만 봐서는 어떤 내용인지 이해가 잘 되지 않는다. 아래와 같은 문제 상황과 예시를 보며 알아보자. 문제 상황 만약 객체 지향 프로그래밍을 이용해 다음과 같은 클래스를 작성해야 한다고 가정해 보자. Warrior(전사) 슈퍼 클래스를 만든다. 이 클래스는 공격 기능, 이동 기능이 있다. 이를 상속받는 서브 클래스들은 각각 다른 공격 기능, 이동 기능을 갖출 수 있다. 공격 기능에는 Slash, Arrow가 있고, 이동 기능에는 Walk, Ride가..
[Spring] 의존성 주입(Dependency Injection)이란 무엇인가?
2022. 11. 25. 20:34
Back-End/Spring
스프링을 배우기 시작한 사람이라면 반드시 의존성(dependency)의 개념을 학습해야 한다. 이 의존성이라고 하는 개념은 프레임워크에 익숙하지 않은 사람일수록 이해하기 어려운 것이 사실이지만, 스프링을 이해하기 위해서는 반드시 학습해야 할 내용이므로 꼭 이해하고 넘어가야 한다. 의존성(dependency)이란 무엇인가? '하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없을 때, 의존성이 있다고 한다.' 스프링에서 정의하고 있는 의존성은 위와 같이 한 줄로 나타낼 수 있다. 하지만 이 말을 처음 듣자마자 어떤 말인지 이해하기는 쉽지 않을 것이다. 이는 상황으로 생각해보면 조금 더 이해하기 쉬운데, 아래의 예시를 보자. 한 학급에 선생님 1명과 여러 명의 학생이 있다. 만약 학생이 1명 빠진다고 ..
[Spring] Eclipse/STS에서 자동으로 import 하기
2022. 11. 24. 20:17
Back-End/Spring
Eclipse/STS와 같은 IDE를 사용하다 보면, 소스 코드에 입력하는 클래스 등이 자동으로 import 되지 않아 귀찮은 경우가 있다. (실제로 모를 때는 모두 타이핑 해주는 사람도 있다!) 이럴 때는 다음과 같은 두 가지의 대표적인 방법으로 해결할 수 있다. 1. 단축키를 통해 빠르게 import 하기 소스 코드를 작성하고, Ctrl + Shift + O 를 누르면 필요한 라이브러리를 빠르게 import 할 수 있다. 아래와 같이, 빨간 불이 들어와 있는 상황에서 사용하면 된다. 이 상황에서 단축키를 누르면, 바로 소스 코드에서 라이브러리가 import 될 것이다. 2. 저장할 때마다 자동으로 import 시키기 필자가 선호하는 방식이다. 이 방식을 적용해두면 소스 코드를 저장(save) 할 때마..
[Spring] Eclipse/STS에서 한글이 깨질 때
2022. 11. 23. 21:20
Back-End/Spring
스프링에서 신나게 코딩을 한 후 실행했는데, 아래와 같이 한글이 깨지는 경우가 있다. 이는 Eclipse 혹은 STS에서 설정이 잘못되어 있기 때문에 발생한 현상이다. 아래와 같이 조치해주도록 하자. 1. 설정에서 인코딩 방식을 UTF-8로 바꿔준다. 아래와 같이, 프로젝트의 Windows-Preferences로 진입한 후에, 'Web' 카테고리 아래의 CSS Files, HTML Files, JSP Files의 인코딩 방식을 모두 UTF-8로 설정해 준다. 2. 기본 브라우저를 크롬(chrome)으로 바꿔준다. 만약 기본 브라우저를 아직도 STS 내부 브라우저를 사용하고 있다면, 아래와 같은 설정을 통해 외부 브라우저인 크롬을 사용해주도록 하자. 3. web.xml에 한글깨짐 방지 코드를 삽입해준다. ..